Как перенести реквизит ДокументОснование из табличной части в реквизит документа при обмене через Конвертацию данных 2.1?

Программист 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация Бухгалтерский учет IT и автоматизация бизнеса
← На главную

В процессе обмена данными между конфигурациями часто возникают ситуации, когда структура объектов метаданных различается. Одной из типичных задач является перенос данных из табличной части одного документа в реквизит другого. Разберем по шагам, как правильно настроить Конвертацию данных 2.1 для корректного переноса поля ДокументОснование из документа СчетФактураПолученный.

Анализ проблемы различия структур

Основная сложность заключается в том, что в базе-источнике (например, Комплексная автоматизация 2.4) ДокументыОснования представлены табличной частью, тогда как в базе-приемнике (например, Бухгалтерия предприятия 3.0) это одиночный реквизит. Простое копирование ссылки из кода обработчика часто приводит к тому, что система не понимает, как сопоставить типы документов, так как уникальные идентификаторы (GUID) в разных конфигурациях могут принадлежать разным объектам или требовать специальной обработки при конвертации.

Шаг 1: Правильная настройка ПКС (Правил конвертации свойств)

Вместо попыток программного поиска объекта в базе-приемнике, необходимо воспользоваться встроенным механизмом Конвертации данных 2.1. Для этого выполним следующие действия:

  1. Откроем правила обмена и перейдем в Правила конвертации объектов (ПКО) документа СчетФактураПолученный.
  2. Перейдем на вкладку Правила конвертации свойств (ПКС).
  3. Для реквизита ДокументОснование необходимо выбрать в колонке Правило конвертации соответствующее ПКО, которое описывает логику переноса документа-основания (например, перенос ПриобретениеТоваровУслуг в ПоступлениеТоваровУслуг).

Использование связки через ПКО позволяет системе автоматически находить или создавать соответствующий объект в базе-приемнике, не перегружая код обработчиков лишними запросами.

Шаг 2: Написание кода в обработчике ПередВыгрузкой

В обработчике ПередВыгрузкой свойства ДокументОснование нам достаточно лишь выбрать нужную запись из табличной части источника. Не нужно пытаться программно определять имена правил внутри кода — это приводит к ошибкам компиляции. Используем следующий подход:


Если Источник.ДокументыОснования.Количество() > 0 Тогда
    // Берем первую строку из табличной части источника
    Значение = Источник.ДокументыОснования[0].ДокументОснование;
Иначе
    // Если табличная часть пуста, присваиваем Неопределено
    Значение = Неопределено;
КонецЕсли;

Обратите внимание: крайне важно убедиться, что вы обращаетесь именно к тем именам полей, которые существуют в метаданных вашей конфигурации источника. Ошибки типа Поле объекта не обнаружено возникают именно из-за опечаток или несоответствия имен в коде и конфигурации.

Почему не нужно пытаться искать UID в приемнике вручную?

Частая ошибка — попытки найти документ в приемнике по UID через запросы в обработчике. В Конвертации данных за это отвечает механизм Правил конвертации объектов. Когда вы передаете значение в Значение (как указано в коде выше), Универсальный обмен данными видит, что у данного ПКС установлено правило конвертации (ПКО). Система сама берет объект, вызывает ПКО, выполняет поиск по правилам, заданным в этом ПКО (например, по GUID или по полям поиска), и возвращает корректную ссылку на объект в базе-приемнике.

Рекомендации по отладке

Если после настройки данные не переносятся или поле остается пустым, проверьте следующие моменты:

Следование этому алгоритму позволит избежать «конфликта структур» и обеспечит надежный перенос данных без необходимости писать сложные и трудноподдерживаемые запросы в обработчиках Конвертации данных.

← На главную