Всем добрый день!
Платформа 8.3.8.2054, синхронизация между конфигурациями Управление торговлей 11.1.10.103 и Бухгалтерия предприятия 3.0.51.27.
Добавляю в обмен регистр сведений ДополнительныеСведения. При автоматическом создании конвертации свойств по регистру Свойство сопоставились, но в результате значение Свойства <Объект не найден> (....). Попыталась задать значение поля ПередЗагрузкой свойства, ПослеЗагрузки свойства и ПослеЗагрузки объекта следующим кодом:
Всякий раз ошибка следующая:
{Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(4216)}: Ошибка в обработчике события ПослеЗагрузкиОбъекта
ИмяПКО = ДополнительныеСведенияПроектПоступление
ТипОбъекта = Регистр сведений набор записей: Дополнительные сведения
Объект = РегистрСведенийНаборЗаписей.ДополнительныеСведения
Обработчик = ПослеЗагрузкиОбъекта
ОписаниеОшибки = Поле объекта не обнаружено (Свойство)
ПозицияМодуля = (1)
КСообщенияОбОшибках = 21
ВызватьИсключение СтрокаСообщенияОбОшибке;
Подскажите пожалуйста может кто сталкивался, как задать данное значение правильно.
// добавляем признак проекта
Если ПараметрыОбъекта <> Неопределено Тогда
Проект = ПараметрыОбъекта["Проект"];
КонецЕсли;
Если ЗначениеЗаполнено(Проект) Тогда
Если Объект.ЭтоНовый() Тогда
СсылкаНаОбъект = Документы.ПоступлениеТоваровУслуг.ПолучитьСсылку();
Объект.УстановитьСсылкуНового(СсылкаНаОбъект);
Иначе
СсылкаНаОбъект = Объект.Ссылка;
КонецЕсли;
МенеджерЗаписи = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Объект = СсылкаНаОбъект;
МенеджерЗаписи.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Проект (Поступление (акты, накладные))");
МенеджерЗаписи.Значение = Проект;
МенеджерЗаписи.Записать();
КонецЕсли;
Насколько помнится там Владелец должен быть. При записи должен присутствовать Владелец значения для текущего дополнительного свойства. например:
Справочник Номенклатура: элемент "Ботинки, артикул001" , Допсвойство "размер", при записи значение 41 непосредственно для этого элемента. В пустую значение без Владельца не записывается.
(2) В моем случае получается Владелец это Объект (документ Поступление (акт, накладная)). Объект и значение заполняются верно. Не получается только конкретное свойство указать.
Стоп! конечно же неправильно! У Объекта (док, Справочник и все такое) нет такого реквизита и не будет! Не нужно искать по наименованию и присваивать его найденное свойство! Посмотрите в Справочниках "ЗначенияСвойствОбъектов" и "НаборыДополнительныхРеквизитовИСведений" как происходит присвоение владельцу.
(4) Я говорю про реквизит Свойство конечно не документа, а регистра сведений ДополнительныеСведения. Там такой реквизит есть. И если просто добавить программно запись в этот регистр, то строка
Не проще ли будет вытащить и дописать алгоритм после загрузки объекта в правилах обмена, если у вас судя по данным релизов - УТ старая (20.03.2015), а БП последний релиз?
Если это и весь текст Алгоритма, то что является Объектом? Если "Регистр.ДополнительныеСведения", то просто так писать в него нельзя.
Пример текста из БП 3.0:
// Проверка, что изменение пометки удаления произведено не из списка.
// Наборы дополнительных реквизитов и сведений.
СвойстваОбъекта = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "ПометкаУдаления");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Наборы.Ссылка КАК Ссылка
|ИЗ
| %1 КАК Свойства
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений КАК Наборы
| ПО (Свойства.Ссылка = Наборы.Ссылка)
|ГДЕ
| Свойства.Свойство = &Свойство
| И Свойства.ПометкаУдаления <> &ПометкаУдаления";
Если ЭтоДополнительноеСведение Тогда
ИмяТаблицы = "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения";
Иначе
ИмяТаблицы = "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты";
КонецЕсли;
Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Запрос.Текст, ИмяТаблицы);
Запрос.УстановитьПараметр("Свойство", Ссылка);
Запрос.УстановитьПараметр("ПометкаУдаления", СвойстваОбъекта.ПометкаУдаления);
Результат = Запрос.Выполнить().Выгрузить();
Для Каждого СтрокаРезультата Из Результат Цикл
НаборСвойствОбъект = СтрокаРезультата.Ссылка.ПолучитьОбъект();
Если ЭтоДополнительноеСведение Тогда
ЗаполнитьЗначенияСвойств(НаборСвойствОбъект.ДополнительныеСведения.Найти(Ссылка, "Свойство"), СвойстваОбъекта);
Иначе
ЗаполнитьЗначенияСвойств(НаборСвойствОбъект.ДополнительныеРеквизиты.Найти(Ссылка, "Свойство"), СвойстваОбъекта);
КонецЕсли;
НаборСвойствОбъект.Записать();
В продолжении этой истории... добавляю записи в регистр сведений ДополнительныеСведения в обработчике ПослеЗагрузки самого объекта документа. Значение свойства передаю в параметр Проект. Код следующий:
// добавляем признак проекта
Если ПараметрыОбъекта <> Неопределено Тогда
Если Объект.ЭтоНовый() Тогда
СсылкаНаОбъект = Документы.ПоступлениеТоваровУслуг.ПолучитьСсылку();
Объект.УстановитьСсылкуНового(СсылкаНаОбъект);
Иначе
СсылкаНаОбъект = Объект.Ссылка;
КонецЕсли;
МенеджерЗаписи = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Объект = СсылкаНаОбъект;
МенеджерЗаписи.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Проект (Поступление (акты, накладные))");
МенеджерЗаписи.Значение = ПараметрыОбъекта["Проект"];
МенеджерЗаписи.Записать();
КонецЕсли;
Показать
Записи регистра создаются корректно, но проверка на заполненность параметра Проект не проходит. Т.е. записи регистра создаются всегда. С условием
ПараметрыОбъекта["Проект"] <> Неопределено
результат тот же. Подскажите какое условие поставить, чтобы код выполнялся только когда в значении параметра что-то есть.
// добавляем признак проекта
Если ПараметрыОбъекта <> Неопределено Тогда
Проект = ПараметрыОбъекта["Проект"];
КонецЕсли;
Если ЗначениеЗаполнено(Проект) Тогда
Если Объект.ЭтоНовый() Тогда
СсылкаНаОбъект = Документы.ПоступлениеТоваровУслуг.ПолучитьСсылку();
Объект.УстановитьСсылкуНового(СсылкаНаОбъект);
Иначе
СсылкаНаОбъект = Объект.Ссылка;
КонецЕсли;
МенеджерЗаписи = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Объект = СсылкаНаОбъект;
МенеджерЗаписи.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Проект (Поступление (акты, накладные))");
МенеджерЗаписи.Значение = Проект;
МенеджерЗаписи.Записать();
КонецЕсли;