Как настроить фильтрацию объектов и заполнение недостающих реквизитов в Конвертации данных 2.1

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

При работе с инструментом «1С:Конвертация данных 2.1» программисты часто сталкиваются с необходимостью тонкой настройки выгрузки. Типовые задачи, такие как перенос данных только по одной организации, исключение помеченных на удаление объектов или заполнение реквизитов, которых просто нет в базе-источнике, требуют понимания механизмов работы обработчиков событий. В этой статье мы подробно разберем, как эффективно решить эти задачи, избежав типичных ошибок.

Фильтрация данных по конкретной организации

Рассмотрим ситуацию, когда из справочника Организации или связанных с ним документов нам нужно перенести данные только по одному юридическому лицу. Существует два основных подхода: «жесткое» кодирование и использование параметров конвертации. Проанализируем их.

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

Если мы хотим ограничить выгрузку на уровне выборки объектов, нам поможет обработчик Перед выгрузкой в ПВД. Здесь мы можем проверить объект и, если он не соответствует условию, отменить его выгрузку с помощью переменной Отказ.


// Пример фильтрации по наименованию (не самый надежный, но быстрый способ)
НужнаяОрганизация = Справочники.Организации.НайтиПоНаименованию("Рога И Копыта");
Если Объект.Ссылка <> НужнаяОрганизация Тогда
    Отказ = Истина;
КонецЕсли;

Способ 2. Использование параметров (рекомендуемый)

Постоянно менять код при смене организации неудобно. Проанализируем более профессиональный подход. Мы можем создать параметр Организация на вкладке «Параметры» в самой конвертации. При запуске обработки выгрузки V8ExSrv.epf (или аналогичной) пользователь сам выберет нужную организацию в диалоговом окне.

В коде обработчика это будет выглядеть следующим образом:


// Проверка через параметры конвертации
Если Объект.Организация <> Параметры.Организация Тогда
    Отказ = Истина;
КонецЕсли;

Этот метод делает ваши правила универсальными и избавляет от необходимости редактировать XML-файл правил при каждом изменении условий обмена.

Исключение объектов, помеченных на удаление

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

Выгрузка через ПВД (зарегистрированные объекты)

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


Если Объект.ПометкаУдаления Тогда
    Отказ = Истина;
КонецЕсли;

Выгрузка через ПКО (ссылочные объекты)

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


Если Источник.ПометкаУдаления Тогда
    Отказ = Истина;
КонецЕсли;

Важное предупреждение: Будьте осторожны с Отказ = Истина в ПКО. Если этот объект является обязательным реквизитом для другого объекта, в базе-приемнике может возникнуть «битая ссылка» (объект не будет создан, а ссылка на него останется пустой или ненайденной).

Заполнение реквизитов, отсутствующих в источнике (на примере УПП -> Бухгалтерия)

Рассмотрим конкретный кейс: при переносе справочника ДоговорыКонтрагентов из УПП в Бухгалтерию КОРП выясняется, что в приемнике есть реквизит ОплатаВВалюте (тип Булево), а в источнике его нет. По умолчанию программа может заполнять его некорректно, что ломает логику отображения на форме.

Разберем способы решения этой задачи:

1. Использование «Значения по умолчанию»

В настройках ПКС (Правила конвертации свойства) для реквизита ОплатаВВалюте можно оставить поле «Источник» пустым, а в колонке «Значение по умолчанию» просто указать Ложь. Это самый простой способ, не требующий написания кода.

2. Программная установка в ПКС

Если логика сложнее (например, значение зависит от валюты договора), используем обработчик Перед выгрузкой для конкретного свойства (ПКС):


// Если валюта не рубли, то оплата в валюте = Истина
Если Источник.ВалютаВзаиморасчетов.Код = "643" Тогда
    Значение = Ложь;
Иначе
    Значение = Истина;
КонецЕсли;

3. Использование обработчика «При загрузке» в ПКО

Иногда удобнее определить значение уже в базе-приемнике. В обработчике При загрузке правила ПКО можно напрямую обратиться к объекту приемника:


// Объект — это уже созданный/найденный объект в приемнике
Объект.ОплатаВВалюте = Ложь;

Разница между Объект и Источник

Для начинающих разработчиков в КД 2.1 часто возникает путаница в терминологии. Проясним ситуацию:

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

Рекомендации по поиску объектов

В обсуждении упоминался поиск по наименованию: НайтиПоНаименованию("РогаИКопыта"). Посмотрим, почему это считается «плохим тоном» в разработке 1С. Наименования — вещь нестабильная, бухгалтер может добавить лишний пробел или кавычку, и синхронизация сломается.

Как делать правильно:

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

← На главную