Имя: Пароль:
1C
 
Работа с реквизитом типа Уникальный идентификатор - баг или фича?
0 DrLekter
 
30.01.20
23:22
Сегодня наткнулся:
Есть в УНФ справочник с реквизитом ИдентификаторПоставляемыхДанных типа Уникальный идентификатор. Мне понадобилось присвоить некий УИД вновь созданному элементу этого справочника. Зачем - это отдельная история. На форме реквизита, разумеется, нет (а как его вывести?). Написал примитивную обработку, код на дюжину строк:

&НаСервереБезКонтекста
Процедура СохранитьУИДНаСервере(Профиль, УИД)
    ПрофильОбъект = Профиль.ПолучитьОбъект();
    ПрофильОбъект.ИдентификаторПоставляемыхДанных = Новый УникальныйИдентификатор(УИД);
    ПрофильОбъект.Записать();
КонецПроцедуры

&НаКлиенте
Процедура СохранитьУИД(Команда)
    СохранитьУИДНаСервере(Профиль, УИД);
КонецПроцедуры

Выполняется, но реквизит не меняется. Отладкой смотрю в конец процедуры записи - нет, и в объекте как был так и остаётся!
Решил проверить, как вообще реквизиты меняются. Добавляю в код строку:

&НаСервереБезКонтекста
Процедура СохранитьУИДНаСервере(Профиль, УИД)
    ПрофильОбъект = Профиль.ПолучитьОбъект();
    ПрофильОбъект.ИдентификаторПоставляемыхДанных = Новый УникальныйИдентификатор(УИД);
    ПрофильОбъект.Наименование = "Рабочее место кассира отредактированное";
    ПрофильОбъект.Записать();
КонецПроцедуры

&НаКлиенте
Процедура СохранитьУИД(Команда)
    СохранитьУИДНаСервере(Профиль, УИД);
КонецПроцедуры

И вуаля - ИдентификаторПоставляемыхДанных становится вновь полученным и успешно сохраняется!

И вот что это было?
1 vicof
 
31.01.20
05:20
Нужно было нажать сохранить в обработке
2 DrLekter
 
31.01.20
17:47
Да одинаково все делал. Но в первом случае не работает, а во втором - работает. Читал когда-то сто лет назад про баг, что если хотя бы пустую строку где-то там после чего-то не добавишь, то не работает. Но не думал, что до сих пор такое случается.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший