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