При переносе данных из УПП в Бухгалтерию 3.0 часто возникают ситуации, когда структура документов в конфигурациях не совпадает. Одной из типичных задач является конвертация документа Выплата через банк подотчетникам, который содержит список сотрудников, в несколько документов Списание с расчетного счета в Бухгалтерии. Разберем по шагам, как реализовать этот механизм с помощью Конвертации данных 2.0.
Основная сложность заключается в том, что по умолчанию правило конвертации (ПКС) подразумевает отношение «один к одному». Чтобы изменить это поведение, нам необходимо воспользоваться параметром КлючВыгружаемыхДанных. Этот параметр позволяет системе однозначно идентифицировать создаваемый объект в приемнике, даже если он был порожден программно из одного источника.
Для решения задачи мы будем использовать обработчик Перед выгрузкой в ПВД (Правилах выгрузки данных). Именно здесь мы перехватываем процесс выгрузки и создаем нужное количество документов.
УПП, чтобы получить всех подотчетных лиц и суммы.ВыгрузитьПоПравилу() для каждого найденного подотчетника.КлючВыгружаемыхДанных, который уникально связывает наш документ-источник и конкретную строку (подотчетника).Рассмотрим пример кода, который нужно разместить в ПВД:
// Пример логики в обработчике Перед выгрузкой ПВД
ВыборкаСтрок = Источник.Подотчетники;
Для Каждого СтрокаТЧ Из ВыборкаСтрок Цикл
// Создаем ключ, уникальный для данной пары
Ключ = Новый Структура(\"СсылкаНаДокумент, Подотчетник\", Источник.Ссылка, СтрокаТЧ.Подотчетник);
// Выгружаем документ, передавая сформированный ключ
ВыгрузитьПоПравилу(Источник, , Ключ, , \"ВашеИмяПравилаКонвертации\");
КонецЦикла;
// Важно: отменяем стандартную выгрузку, так как мы сделали ее вручную
Отказ = Истина;
КлючВыгружаемыхДанных — это связующее звено. Если вы просто создадите документы, Конвертация данных не будет знать, что конкретное Списание с расчетного счета соответствует именно этой строке в исходном документе. В качестве ключа следует использовать минимальный набор полей, который гарантирует уникальность. В нашем случае это ссылка на исходный документ и ссылка на подотчетника. Не стоит добавлять в ключ суммы или иные меняющиеся данные, иначе при изменении этих данных связь будет утеряна, и система создаст дубли.
Вторая часть проблемы — как указать нужный документ списания в Авансовом отчете в Бухгалтерии. Поскольку мы программно создали несколько документов списания, теперь для каждого из них в Бухгалтерии есть своя ссылка. При выгрузке Авансового отчета вам нужно будет найти соответствующий документ Списание с расчетного счета, опираясь на тот же КлючВыгружаемыхДанных, который вы использовали при выгрузке.
В обработчике После загрузки или в правилах конвертации свойств (ПКС) вы можете выполнить поиск созданного ранее объекта по ключу. Если ключ был передан корректно, система без труда найдет нужный документ Списание с расчетного счета и подставит его в соответствующее поле Авансового отчета.
Работа с механизмом «один ко многим» требует внимательного отношения к идентификаторам объектов. Помните следующие правила:
Отказ = Истина в ПВД, если вы управляете выгрузкой через ВыгрузитьПоПравилу(), чтобы избежать дублирования объектов.КлючВыгружаемыхДанных как структуру, содержащую уникальные идентификаторы (ссылки).Авансовом отчете зеркально повторяет логику создания ключа, чтобы связки между документами не «развалились» при загрузке.Этот подход является стандартным для Конвертации данных 2.0 и позволяет гибко решать задачи трансформации данных любой сложности, сохраняя при этом целостность учета при переходе с УПП на Бухгалтерию 3.0.