Как перенести документы в Конвертации данных 2.0 с отбором по контрагенту или группе?

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

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

Настройка параметров выгрузки

Для того чтобы иметь возможность управлять отбором «на лету» без изменения кода правил, необходимо создать Параметр. Выполним следующие действия:

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

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

Реализация отбора по конкретному контрагенту

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


Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Объект)) Тогда
    Если НЕ Объект.Метаданные().Реквизиты.Найти("Контрагент") = Неопределено Тогда
        Если НЕ Параметры.Контрагент = Объект.Контрагент Тогда
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;
КонецЕсли;

Разберем, что делает этот код: мы проверяем, является ли текущий объект документом, и содержит ли он реквизит Контрагент. Если реквизит найден, мы сравниваем его значение с параметром Параметры.Контрагент. Если они не совпадают, устанавливаем Отказ = Истина, что предотвращает выгрузку данного документа.

Реализация отбора по группе контрагентов

Если задача стоит шире — выгрузить все документы по контрагентам, входящим в определенную группу, — логику проверки нужно изменить, используя метод ПринадлежитЭлементу(). Этот метод позволяет проверить, входит ли контрагент в указанную иерархическую группу (папку) справочника.


Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Объект)) Тогда
    Если НЕ Объект.Метаданные().Реквизиты.Найти("Контрагент") = Неопределено Тогда
        Если НЕ Объект.Контрагент.ПринадлежитЭлементу(Параметры.Контрагент) Тогда
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;
КонецЕсли;

Этот подход особенно удобен, так как он автоматически учитывает вложенные структуры справочника. Если контрагент находится в подгруппе, ПринадлежитЭлементу() корректно распознает это и разрешит выгрузку.

Важные нюансы реализации

При работе с такими фильтрами важно помнить несколько моментов:

Таким образом, комбинируя создание Параметра и логику ПередВыгрузкойОбъекта, мы получаем гибкий инструмент для точечного переноса данных между конфигурациями 1С.

← На главную