При настройке обмена данными между информационными базами в конфигурации «1С:Конвертация данных 2.0» часто возникает задача выгружать документы не по всем организациям, а только по одной или нескольким выбранным. Разберем основные способы решения этой задачи, оценим их плюсы, минусы и особенности влияния на производительность и ссылочную целостность.
Самый простой и быстрый в реализации способ — использовать стандартный обработчик Перед выгрузкой в Правиле конвертации объектов (ПКО). В этом событии доступен контекст выгружаемого объекта через переменную Источник, а также специальный управляющий флаг Отказ.
Посмотрим на пример кода, который необходимо разместить в обработчике ПКО Перед выгрузкой:
Если ЗначениеЗаполнено(Источник.Организация)
И Источник.Организация <> Справочники.Организации.НайтиПоРеквизиту("ИНН", "7701234567") Тогда
Отказ = Истина;
КонецЕсли;
Если для обмена создан отдельный параметр конвертации (например, ОрганизацияОтбора), условие примет более универсальный вид:
Если ЗначениеЗаполнено(Параметры.ОрганизацияОтбора)
И Источник.Организация <> Параметры.ОрганизацияОтбора Тогда
Отказ = Истина;
КонецЕсли;
Разберем важный нюанс: при таком подходе платформа сначала физически считывает каждый документ из базы данных, передает его в алгоритм и только потом отменяет выгрузку. Если в базе содержится большой объем данных по другим организациям, этот метод может существенно замедлить процесс обмена.
Для оптимизации скорости обмена при больших объемах информации более эффективным решением является ограничение выборки непосредственно на уровне источника данных. Для этого переведем Правило выгрузки данных (ПВД) в режим Произвольный алгоритм.
Рассмотрим по шагам реализацию этого механизма:
Посмотрим на пример кода выборки в обработчике ПВД:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Реализация.Ссылка КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Реализация
|ГДЕ
| Реализация.Организация = &Организация
| И Реализация.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания";
Запрос.УстановитьПараметр("Организация", Параметры.ОрганизацияОтбора);
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ВыгрузитьПоПравилу(Выборка.Ссылка, , , , "РеализацияТоваровУслуг");
КонецЦикла;
Этот метод исключает лишнее чтение неподходящих объектов и кардинально ускоряет выполнение обмена.
Если обмен строится на основе планов обмена в типовых конфигурациях, фильтрацию целесообразно выполнять на этапе регистрации изменений. Для этого настраиваются Правила регистрации объектов (ПРО).
В ПРО можно задать отбор по организации прямо в модуле регистрации или обработчиках событий, что исключит попадание лишних ссылок в таблицу изменений узла плана обмена.
Если требуется разово или периодически выгружать данные без изменения самих правил обмена, можно использовать возможности типовой обработки Универсальный обмен данными в формате XML:
Организация.Проанализируем частую проблему: если в ПКО документа установлено Отказ = Истина, но на этот документ ссылается другой выгружаемый объект (например, счет-фактура или платежное поручение), документ-источник все равно может быть выгружен по ссылке для обеспечения целостности данных.
Чтобы полностью исключить выгрузку нежелательных объектов по ссылкам, необходимо в соответствующих Правилах конвертации свойств (ПКС) вышестоящих объектов включить признак Не выгружать объекты свойств по ссылкам либо предварительно очищать ссылочные поля в обработчиках событий.