Как выгрузить банковские счета вместе с контрагентом в 1С:Конвертация данных 2?

Программист IT и автоматизация бизнеса
← На главную

Часто при настройке обмена данными в конфигурации 1С:Конвертация данных 2 возникает ситуация, когда нужно выгрузить элементы подчиненного справочника (например, банковские счета) вместе с их владельцем (контрагентом). При стандартной настройке правил конвертации объектов подчиненные данные могут не попадать в файл выгрузки автоматически, если пользователь не выберет их явно. Разберем по шагам, как правильно настроить автоматическую выгрузку, чтобы все связанные объекты переносились корректно.

Способ 1: Использование метода ВыгрузитьПоПравилу

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

Проанализируем алгоритм действий:

  1. Открываем ПКО справочника Контрагенты.
  2. Переходим на закладку обработчиков событий и выбираем событие После выгрузки.
  3. Пишем запрос, который найдет все банковские счета, подчиненные выгружаемому контрагенту. Сам контрагент в этот момент доступен в системной переменной Источник.
  4. В цикле обходим результат запроса и для каждого найденного счета вызываем системную процедуру ВыгрузитьПоПравилу.

Посмотрим на пример кода, который необходимо разместить в обработчике:


Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.БанковскиеСчета ГДЕ Владелец = &Владелец И ПометкаУдаления = ЛОЖЬ";
Запрос.УстановитьПараметр("Владелец", Источник);
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    // Явный вызов функции выгрузки для каждого найденного счета
    ВыгрузитьПоПравилу(Выборка.Ссылка, , , , "ИмяПКО_БанковскиеСчета");
КонецЦикла;

При использовании такого подхода создавать отдельное правило выгрузки данных (ПВД) для банковских счетов не нужно. Выгрузка будет полностью инициироваться из контрагента.

Способ 2: Использование виртуального ПКС и передача коллекции

Разберем альтернативный, более наглядный с точки зрения архитектуры Конвертации Данных способ. Он заключается в передаче коллекции объектов через специальное виртуальное свойство. Этот метод считается более стандартизированным.

Рассмотрим подробнее настройку этого механизма по шагам:

  1. В ПКО Контрагенты создаем новое Правило Конвертации Свойств (ПКС).
  2. Поля Источник и Приемник оставляем пустыми (это делает ПКС виртуальным, не привязанным к реальным реквизитам).
  3. В поле Правило для этого ПКС обязательно выбираем ПКО для банковских счетов.
  4. Открываем обработчик Перед выгрузкой для созданного ПКС.
  5. Пишем запрос для получения подчиненных счетов и выгружаем результат в виде таблицы значений в системную переменную Значение (также можно использовать переменную КоллекцияОбъектов).

Посмотрим на пример кода для обработчика Перед выгрузкой:


Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Справочник.БанковскиеСчета ГДЕ Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец", Источник);
Значение = Запрос.Выполнить().Выгрузить(); // Выгружаем результат в виде таблицы значений

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

Важный нюанс: привязка владельца в ПКО банковских счетов

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

В ПКО справочника Банковские счета обязательно должно быть создано ПКС для реквизита Владелец. В этом ПКС в качестве правила конвертации (ПКО) необходимо жестко указать правило для Контрагента. Если выгрузка инициируется из контрагента (любым из рассмотренных нами выше способов), система сама корректно сопоставит ссылки в памяти и подставит нужного владельца в формируемый XML-узел. При загрузке счет корректно запишется с привязкой к своему контрагенту.

← На главную