Имя: Пароль:
1C
 
Запись УникальногоИдентификатора в реквизит
0 ilyavorobyev
 
14.03.18
15:18
Добрый день.
Пишу в модуле менеджера справочника такой код и при записи он не заполняет реквизит, в чем может быть проблема?

Процедура ПриЗаписи(Отказ)
    ЭтотОбъект.УникальныйИдентификаторСтрока = Строка(Ссылка.УникальныйИдентификатор());
КонецПроцедуры
1 Cyberhawk
 
14.03.18
15:20
При записи уже ничего не запишешь в объект
2 Cyberhawk
 
14.03.18
15:21
Объект уже записан в БД и изменению не подлежит
3 ilyavorobyev
 
14.03.18
15:21
(1) А перед записью, он ведь не имеет еще ссылки? или через получитьссылкунового?
4 Cyberhawk
 
14.03.18
15:21
Устанавливай ссылку новому и в ПередЗаписью сохраняй
5 Волшебник
 
14.03.18
15:21
Например, это новый объект и у него ещё нет ссылки.
6 Necessitudo
 
14.03.18
15:21
В модуле менеджера? ПриЗаписи?
7 ilyavorobyev
 
14.03.18
15:28
Если ЭтотОбъект.ЭтоНовый() Тогда
        // Получаем возможно уже установленную ранее ссылку нового
        СсылкаНаОбъект = ЭтотОбъект.ПолучитьСсылкуНового();
        Если НЕ ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
            // Если ссылка нового пустая, то запрашиваем ее у менеджера и устанавливаем
            СсылкаНаОбъект = Справочники.ХарактеристикиНоменклатуры.ПолучитьСсылку();
            ЭтотОбъект.УстановитьСсылкуНового(СсылкаНаОбъект);
        КонецЕсли;
        УникальныйИдентификаторСтрока = Строка(ЭтотОбъект.Ссылка.УникальныйИдентификатор());
    КонецЕсли;
8 ilyavorobyev
 
14.03.18
15:28
Не заполняет, все равно
9 Mankubus
 
14.03.18
15:31
(7) перед записью делаешь?
10 ilyavorobyev
 
14.03.18
15:32
(9) Ага
11 Cyberhawk
 
14.03.18
15:33
(8) СП в помощь. Ты делаешь не то. У нового никакой ссылки и нет. Тебе надо ее сгенерировать и установить.
12 Cyberhawk
 
14.03.18
15:34
Ты там кем и как работаешь?
13 Cyberhawk
 
14.03.18
15:34
На окладе штаны протираешь аль во фране попу мылишь?
14 Serg_1960
 
14.03.18
15:40
(7) То, что ты установил ссылку новому объекту, вовсе не означает что теперь можно обращаться по ссылке в базу - объекта ещё нет в базе. Ок?
15 ilyavorobyev
 
14.03.18
15:42
(14) Ок а как тогда гуид его получить?
16 ilyavorobyev
 
14.03.18
15:44
Все получилось
        ЭтотОбъект.УстановитьСсылкуНового(Справочники.ХарактеристикиНоменклатуры.ПолучитьСсылку(Новый УникальныйИдентификатор));
УникальныйИдентификаторСтрока = Строка(ЭтотОбъект.ПолучитьСсылкуНового().УникальныйИдентификатор());
17 VS-1976
 
14.03.18
15:46
(16) В модуле менеджера или всё же объекта? Это несколько разные вещи...
18 ilyavorobyev
 
14.03.18
15:49
(17) модуле объекта конечно
19 Serg_1960
 
14.03.18
16:07
УИД = Новый УникальныйИдентификатор();
ЭтотОбъект.УстановитьСсылкуНового(Справочники.ХарактеристикиНоменклатуры.ПолучитьСсылку(УИД));
ЭтотОбъект.УникальныйИдентификаторСтрока = УИД;
20 Cyberhawk
 
14.03.18
16:17
(19) Любитель давать непрошенные советы? )
21 Serg_1960
 
14.03.18
21:43
Ага, меня прям распирает от желания делиться знаниями :)

PS: Посмотри внимательно на алгоритм в (16)
22 Cyberhawk
 
14.03.18
23:01
Ага, глядел конечно, то что там не кофильфо стало понятно сразу после прочтения и в голове мысля такая же родилась, как и у тебя в виде (19).
Но там же и фраза "Все получилось", т.е. оно работает, и Я воздержался от акта перфекционизма )
23 ilyavorobyev
 
14.03.18
23:23
(19) Спасибо! Переписал, так действительно лучше!
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн