В процессе обмена данными между конфигурациями часто возникают ситуации, когда структура объектов метаданных различается. Одной из типичных задач является перенос данных из табличной части одного документа в реквизит другого. Разберем по шагам, как правильно настроить Конвертацию данных 2.1 для корректного переноса поля ДокументОснование из документа СчетФактураПолученный.
Основная сложность заключается в том, что в базе-источнике (например, Комплексная автоматизация 2.4) ДокументыОснования представлены табличной частью, тогда как в базе-приемнике (например, Бухгалтерия предприятия 3.0) это одиночный реквизит. Простое копирование ссылки из кода обработчика часто приводит к тому, что система не понимает, как сопоставить типы документов, так как уникальные идентификаторы (GUID) в разных конфигурациях могут принадлежать разным объектам или требовать специальной обработки при конвертации.
Вместо попыток программного поиска объекта в базе-приемнике, необходимо воспользоваться встроенным механизмом Конвертации данных 2.1. Для этого выполним следующие действия:
Правила конвертации объектов (ПКО) документа СчетФактураПолученный.Правила конвертации свойств (ПКС).ДокументОснование необходимо выбрать в колонке Правило конвертации соответствующее ПКО, которое описывает логику переноса документа-основания (например, перенос ПриобретениеТоваровУслуг в ПоступлениеТоваровУслуг).Использование связки через ПКО позволяет системе автоматически находить или создавать соответствующий объект в базе-приемнике, не перегружая код обработчиков лишними запросами.
В обработчике ПередВыгрузкой свойства ДокументОснование нам достаточно лишь выбрать нужную запись из табличной части источника. Не нужно пытаться программно определять имена правил внутри кода — это приводит к ошибкам компиляции. Используем следующий подход:
Если Источник.ДокументыОснования.Количество() > 0 Тогда
// Берем первую строку из табличной части источника
Значение = Источник.ДокументыОснования[0].ДокументОснование;
Иначе
// Если табличная часть пуста, присваиваем Неопределено
Значение = Неопределено;
КонецЕсли;
Обратите внимание: крайне важно убедиться, что вы обращаетесь именно к тем именам полей, которые существуют в метаданных вашей конфигурации источника. Ошибки типа Поле объекта не обнаружено возникают именно из-за опечаток или несоответствия имен в коде и конфигурации.
Частая ошибка — попытки найти документ в приемнике по UID через запросы в обработчике. В Конвертации данных за это отвечает механизм Правил конвертации объектов. Когда вы передаете значение в Значение (как указано в коде выше), Универсальный обмен данными видит, что у данного ПКС установлено правило конвертации (ПКО). Система сама берет объект, вызывает ПКО, выполняет поиск по правилам, заданным в этом ПКО (например, по GUID или по полям поиска), и возвращает корректную ссылку на объект в базе-приемнике.
Если после настройки данные не переносятся или поле остается пустым, проверьте следующие моменты:
ПоступлениеТоваровУслуг) включено в состав правил обмена и является активным.Значение, соответствует типу, ожидаемому в приемнике.Сообщить("ДОКУМЕНТ ОСНОВАНИЯ = " + Значение) для проверки того, что именно попадает в переменную перед отправкой. Если значение пустое, значит логика выбора из табличной части составлена неверно.Следование этому алгоритму позволит избежать «конфликта структур» и обеспечит надежный перенос данных без необходимости писать сложные и трудноподдерживаемые запросы в обработчиках Конвертации данных.