Как организовать автоматическую выгрузку контрагентов вместе с договорами и банковскими счетами в Конвертации данных 2.1

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При настройке обмена данными между конфигурациями 1С:ERP Управление предприятием и 1С:Бухгалтерия предприятия (БП) часто возникает задача: при выгрузке одного контрагента автоматически «подтягивать» все связанные с ним объекты. По умолчанию универсальная обработка обмена может выгружать только те ссылки, которые непосредственно указаны в реквизитах объекта. Однако договоры и банковские счета являются подчиненными справочниками, и их список не всегда хранится в самой карточке контрагента.

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

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

Проанализируем самый распространенный и гибкий способ — программный вызов выгрузки подчиненных объектов в обработчике события «После выгрузки» основного ПКО. Это позволяет нам вручную определить список связанных данных и инициировать их экспорт.

Рассмотрим пошагово реализацию этого механизма:

  1. Откроем ПКО Контрагенты в конфигурации «Конвертация данных 2.1».
  2. Перейдем на закладку «Обработчики событий».
  3. Найдем событие «После выгрузки». Именно здесь объект-владелец (Контрагент) уже сформирован в файле выгрузки, и мы можем передать его данные для поиска подчиненных записей.

Напишем код, который найдет все договоры данного контрагента и отправит их на выгрузку:


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

Запрос.УстановитьПараметр("Владелец", Объект.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    // Вызываем выгрузку по конкретному правилу ПКО
    ВыгрузитьПоПравилу(Выборка.Ссылка, , , , "ДоговорыКонтрагентов");
КонецЦикла;

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

ЗапросСчета.УстановитьПараметр("Владелец", Объект.Ссылка);
ВыборкаСчета = ЗапросСчета.Выполнить().Выбрать();

Пока ВыборкаСчета.Следующий() Цикл
    ВыгрузитьПоПравилу(ВыборкаСчета.Ссылка, , , , "БанковскиеСчетаКонтрагентов");
КонецЦикла;

Важно помнить: при вызове ВыгрузитьПоПравилу пятым параметром передается имя ПКО, которое должно быть предварительно создано в правилах конвертации. Это гарантирует, что договоры будут обработаны именно так, как вы настроили их в правилах для справочника ДоговорыКонтрагентов.

Способ 2. Реализация через коллекцию в виртуальных свойствах ПКС

Разберем альтернативный, более структурированный подход. Если мы не хотим писать код в общих обработчиках ПКО, можно создать виртуальное ПКС (Правило конвертации свойства). Это свойство не существует в базе-источнике физически, но мы «наполняем» его данными в процессе выгрузки.

Выполним следующие действия:

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

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

В этом случае КД сама переберет массив в переменной Значение и для каждого элемента вызовет ПКО, указанное в настройках этого ПКС. Это выглядит более изящно с точки зрения архитектуры правил.

Архитектурные особенности связки ERP и БП

Проанализируем ситуацию, специфичную для обмена между современными конфигурациями. В ERP 2.5 используется разделение на справочники Партнеры (управленческий учет) и Контрагенты (юридические лица). В Бухгалтерии предприятия существует только справочник Контрагенты.

При выгрузке важно учитывать следующие нюансы:

Оптимизация выгрузки

Если ваша база ERP содержит данные за много лет, выгрузка всех договоров может существенно замедлить процесс и захламить базу-приемник. Рассмотрим, как ограничить выборку в коде:

Добавим в запрос фильтрацию по статусу договора или по дате его последнего изменения. Например, можно выгружать только те договоры, у которых статус Действует или по которым были движения в текущем году. Это значительно сократит объем передаваемого XML-файла и ускорит загрузку в Бухгалтерию.

Использование планов обмена для регулярной синхронизации

Рассмотрим ситуацию, когда выгрузка должна происходить не по одной кнопке в обработке, а автоматически. В этом случае мы регистрируем изменения объектов на узле плана обмена. Чтобы при изменении контрагента автоматически «подхватывались» его договоры, рекомендуется в модуле набора записей плана обмена прописать процедуру регистрации связанных объектов.

Таким образом, когда бухгалтер в ERP меняет номер телефона контрагента, система автоматически пометит к выгрузке не только самого контрагента, но и все его актуальные договоры. Это избавит пользователей от необходимости помнить о «трех галочках» при ручном обмене.

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

← На главную