Имя: Пароль:
1C
1С v8
Работа с ГУИД в чем моя ошибка?
,
0 Обработка
 
09.11.14
13:59
Создаю новый документ и присваиваю гуид битой ссылки.
Вываливается ошибка.

{Форма.Форма.Форма(29)}: Поле объекта недоступно для записи (УникальныйИдентификатор)
            UUID  = Новый УникальныйИдентификатор(ГУИД);

Вот код:

Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ТоварыНаСкладах.Регистратор
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
        |ГДЕ Регистратор.Ссылка ЕСТЬ NULL И НЕ Регистратор = &ПустаяСсылкаДокумента
        |    И ТоварыНаСкладах.Период МЕЖДУ &Дата1 И &Дата2";
        Запрос.УстановитьПараметр("ПустаяСсылкаДокумента",Неопределено);    
        Запрос.УстановитьПараметр("Дата1",Дата(2014, 7, 1, 0, 0, 0) );    
        Запрос.УстановитьПараметр("Дата2",Дата(2014, 7, 1, 23, 59, 59));    
        
     Сп = новый СписокЗначений;
    
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        ГУИДУдОбъкта = Строка(Выборка.Регистратор);
        ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъкта,"<Объект не найден> (","");
        ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаСтр,")","");
        ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаСтр,"0x","");
        ГУИДУдОбъктаСтр = Сред(ГУИДУдОбъктаСтр, Найти(ГУИДУдОбъктаСтр,":")+1, СтрДлина(ГУИДУдОбъктаСтр));
        ГУИД = Сред(ГУИДУдОбъктаСтр,25,8)+"-"+Сред(ГУИДУдОбъктаСтр,21,4)+"-"+Сред(ГУИДУдОбъктаСтр,17,4)+"-"+Сред(ГУИДУдОбъктаСтр,1,4)+"-"+Сред(ГУИДУдОбъктаСтр,5,12);            //и получаем ГУИД = 05dbe824-a4c6-11dd-bf56-00145e3710ab
        Если Сп.НайтиПоЗначению(ГУИД)  = Неопределено Тогда
            Сп.Добавить(ГУИД,ГУИД);
            UUID  = Новый УникальныйИдентификатор(ГУИД);
            НоваяСсылка = Документы.ПеремещениеТМЗ.ПолучитьСсылку(UUID);
            Док = Документы.ПеремещениеТМЗ.СоздатьДокумент();
            Док.УстановитьСсылкуНового(НоваяСсылка);
            Док.Записать();
        Иначе
            Продолжить;
        Конецесли;    
    КонецЦикла;
1 ДенисЧ
 
09.11.14
14:00
возьми другое имя переменной
2 Обработка
 
09.11.14
14:08
(1) Спасибо, получилось.
3 Обработка
 
10.11.14
15:07
Еще проблема. Не находит нужный тип документа. Где ошибка?

&НаСервере
Процедура UIDПриИзмененииНаСервере()

    ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъкта,"<Объект не найден> (","");
    ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаСтр,")","");
    ГУИДУдОбъктаСтр = СтрЗаменить(ГУИДУдОбъктаСтр,"0x","");
    ГУИДУдОбъктаСтр = Сред(ГУИДУдОбъктаСтр, Найти(ГУИДУдОбъктаСтр,":")+1, СтрДлина(ГУИДУдОбъктаСтр));
    тт = Сред(ГУИДУдОбъктаСтр,25,8)+"-"+Сред(ГУИДУдОбъктаСтр,21,4)+"-"+Сред(ГУИДУдОбъктаСтр,17,4)+"-"+Сред(ГУИДУдОбъктаСтр,1,4)+"-"+Сред(ГУИДУдОбъктаСтр,5,12);    
      ИД = Новый УникальныйИдентификатор(тт);
    Если ПолучитьСсылкуНоМенеджеруОбъекта(Документы,ИД) Тогда
    
    КонецЕсли;
    
КонецПроцедуры

&НаСервере
Функция ПолучитьСсылкуНоМенеджеруОбъекта(ОбъектыМенеджер,ИД)
        
    Для Каждого Менеджер Из ОбъектыМенеджер Цикл
        СсылкаНаОбъектГуид = Менеджер.ПолучитьСсылку(ИД);
        
        Если СсылкаНаОбъектГуид.ПолучитьОбъект() <> Неопределено Тогда
            Сообщить(Менеджер);
            Возврат Истина;
        Иначе

        КонецЕсли;
    КонецЦикла;
    
    Возврат Ложь;    
КонецФункции
4 Apokalipsec
 
10.11.14
15:18
Какая  ошибка? Или ждешь, что сообщить сработает на сервере?
5 Fram
 
10.11.14
15:22
(4) а у тебя не работает Сообщить на сервере?
6 Обработка
 
10.11.14
15:23
Да фиг с ним с сообщить у меня отладчик там не останавливается.
7 Обработка
 
10.11.14
15:24
+ отладчик у меня включен на сервере.

Обход цикла вижу.
8 Обработка
 
10.11.14
15:29
Выделяю битую ссылку регистратора, скопировав вставляю в поле обработки.
Функция возвращает ложь.
9 Fram
 
10.11.14
15:32
(8) а что должен вернут?
10 Обработка
 
10.11.14
15:36
Я полагаю должен вернуть тип документа.
Или это произойдет если ссылка не битая???
11 Обработка
 
10.11.14
15:37
+(10) Ну не тип а "Истина" если по ГУИД ссылка создалась
12 Обработка
 
10.11.14
15:39
Или я ступил когда код копипастил из мисты?

В общем мне нужно определить тип документа регистратора по битой ссылке...
13 Fram
 
10.11.14
15:40
Если нет объекта в базе, каким макаром ты хочешь получить тип этого неизвестного никому объекта?
14 Обработка
 
10.11.14
15:43
(13) Блииин ступил! Так и думал что именно по Гуид объекта идет поиск конкртеного объекта или его ссылка.


ЗЫ. как найти тип документа по битой ссылке регистратора регистра накопления??????
15 Fram
 
10.11.14
15:49
(14) чего не знаю, того не знаю.. возможно, по части гуида, если все объекта были созданы в этой базе
16 hhhh
 
10.11.14
16:22
(14) никак не найдешь.
17 Обработка
 
10.11.14
16:24
Да вроде бы не сложная задача периодически берусь потом кидаю не найдя решения.
Точно не помню это было с 1с 77 или 1с 8.х Но я что-то такое давно делал.