Имя: Пароль:
1C
1С v8
КД 2.0 ERP 2.2 Заполнение доп реквизита элемента справочника
0 Marik1274
 
28.02.18
08:46
Добрый день.
Подскажите как победить ошибку. Есть такой код (в После загрузке). При записи нового элемента справочника ДоговорыКонтрагентов выдает ошибку: Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных . Если это повторная загрузку, то существующий элемент правится корректно без ошибок. Уже делал промежуточную запись объекта в зависимости от ОбъектНайден, пытался искать ссылку по ГУИДу. Не помогает. Как вообще такие вещи решаются по феншую?

Сам код:

Если НЕ ПараметрыОбъекта["НаправлениеДеятельности"] = Неопределено Тогда
    Если НЕ ПараметрыОбъекта["НаправлениеДеятельности"] = "" Тогда
        Объект.НаправлениеДеятельности = Справочники.НаправленияДеятельности.НайтиПоНаименованию(ПараметрыОбъекта["НаправлениеДеятельности"]);
    Иначе    
        Объект.НаправлениеДеятельности = Справочники.НаправленияДеятельности.ПустаяСсылка();
    КонецЕсли;    
Иначе    
    Объект.НаправлениеДеятельности = Справочники.НаправленияДеятельности.ПустаяСсылка();
КонецЕсли;

Объект.ПорядокРасчетов     = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов;
Объект.Статус    = Перечисления.СтатусыДоговоровКонтрагентов.Действует;

ДопРеквизит = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("НомерДоговораКонтрагента");
ЕстьСтроки = Объект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ДопРеквизит));
    
ТЗ_Доп = Новый ТаблицаЗначений;
ТЗ_Доп.Колонки.Добавить("Свойство");
ТЗ_Доп.Колонки.Добавить("Значение");

Если ЕстьСтроки.Количество() = 0 Тогда
        
    НовыйРеквизит             = ТЗ_Доп.Добавить();
    НовыйРеквизит.Свойство     = ДопРеквизит;
                
    Если ПараметрыОбъекта["НомерДоговора"] <> Неопределено тогда
        
        НовыйРеквизит.Значение     = ПараметрыОбъекта["НомерДоговора"];
                        
    КонецЕсли;    
КонецЕсли;
        
ДопРеквизит = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ОсновнойПроект");
ЕстьСтроки = Объект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ДопРеквизит));
    
Если ЕстьСтроки.Количество() = 0 Тогда
                                            
    НовыйРеквизит             = ТЗ_Доп.Добавить();
    НовыйРеквизит.Свойство     = ДопРеквизит;
                
    Если ПараметрыОбъекта["ПроектКод"] <> Неопределено тогда
            
        НовыйРеквизит.Значение     = Справочники.Проекты.НайтиПоКоду(СокрЛП(ПараметрыОбъекта["ПроектКод"]));
            
    КонецЕсли;    
КонецЕсли;
    
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(Объект.Ссылка, ТЗ_Доп);
1 Marik1274
 
28.02.18
09:20
Апну
2 xaozai
 
28.02.18
09:22
"После загрузки" выполняется до записи объекта в базе.
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(Объект.Ссылка, ТЗ_Доп);//здесь, вероятно, будет ошибка, ибо ссылки объекта нет
3 Marik1274
 
28.02.18
09:25
(2) Перед этой строкой я ставил: Объект.Записать();
не помогает..
4 xaozai
 
28.02.18
09:26
(3) Тогда предлагаю воспользоваться отладчиком.
5 Marik1274
 
28.02.18
09:29
(4) Так и сделаю. Просто интересен опыт других людей на эту тему.
6 Йохохо
 
28.02.18
09:39
на которой строке ошибка? на этой "УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(Объект.Ссылка, ТЗ_Доп);" ?
7 Marik1274
 
28.02.18
09:44
(6) Если ее закоментить, то ошибки нет. Так что да, на ней.
8 Йохохо
 
28.02.18
09:45
УстановитьСсылкуНового?