При постоянной работе с обменами между различными базами данных часто возникает необходимость выполнять не полную выгрузку, а дозагрузку отдельных справочников или документов (например, информации по физическим лицам). В стандартной обработке «Универсальный обмен данными в формате XML» для этого приходится вручную снимать и ставить флажки в дереве Правил Выгрузки Данных (ПВД). Если информационных баз много, ручная настройка каждый раз отнимает много времени и увеличивает риск ошибки.
Рассмотрим, как заложить логику выборочной выгрузки непосредственно в сами правила обмена (XML-файл), не меняя код обработки и не создавая отдельные внешние файлы.
Проанализируем, почему нельзя просто снять или поставить галочки в дереве ПВД программно из кода правил обмена. Дерево ПВД строится обработкой «Универсальный обмен данными» в момент загрузки XML-файла правил. Код из обработчиков самих правил начинает исполняться только после того, как пользователь нажимает кнопку «Выгрузить данные».
Изменение элементов формы обработки напрямую из XML-файла правил не предусмотрено архитектурой Конвертации Данных 2.х. Однако вместо визуального снятия флажков мы можем использовать программную отмену обработки лишних ПВД непосредственно в момент выгрузки.
Выясним основной принцип решения задачи. В Конвертации Данных предусмотрен механизм работы с параметрами. Если в правилах создан параметр, обработка «Универсальный обмен данными» автоматически выводит его на вкладку «Параметры выгрузки». Пользователю достаточно выбрать нужный режим из списка, после чего алгоритмы правил сами отключат выполнение ненужных ПВД.
Разберем по шагам порядок настройки такого механизма в конфигурации «Конвертация данных 2.х»:
РежимВыгрузки. В качестве типа данных зададим строку или список значений с вариантами (например, ПолнаяВыгрузка и ТолькоФизЛица).ПолнаяВыгрузка.Посмотрим на пример кода, который необходимо прописать в обработчике «Перед обработкой» для ПВД, выгружающих ненужные объекты при частичной дозагрузке:
Если Параметры.РежимВыгрузки = "ТолькоФизЛица" Тогда
Отказ = Истина;
КонецЕсли;
Установка значения Отказ = Истина; в обработчике «Перед обработкой» полностью отменяет выборку данных из информационной базы по данному ПВД. Это предотвращает лишнюю нагрузку на сервер базы данных и ускоряет процесс выгрузки.
Если правил выгрузки данных много, прописывать условия в каждом ПВД вручную неудобно. Рассмотрим более удобный способ — вынос логики управления в глобальный обработчик правил «Перед выгрузкой данных».
В обработчике «Перед выгрузкой данных» мы можем проанализировать переданные параметры и заполнить служебную структуру или массив, к которому затем будут обращаться ПВД. Посмотрим на пример реализации:
// Алгоритм в обработчике "Перед выгрузкой данных"
Параметры.Вставить("ОтключатьЛишниеПВД", (Параметры.РежимВыгрузки = "ТолькоФизЛица"));
После этого в обработчике «Перед обработкой» нужных ПВД достаточно написать короткую проверку:
Если Параметры.ОтключатьЛишниеПВД Тогда
Отказ = Истина;
КонецЕсли;
Для задач дозагрузки узкого спектра данных (например, только физических лиц) существует альтернативный вариант: создание отдельного ПВД с способом выборки данных «Произвольный алгоритм».
Разберем, как это работает:
ДозагрузкаФизЛиц и режимом выборки Произвольный алгоритм.ВыгрузитьПоПравилу().РежимВыгрузки, как было описано выше.Таким образом, использование параметров обмена и свойства Отказ = Истина; в обработчиках ПВД позволяет гибко управлять составом выгружаемых данных через интерфейс стандартной обработки без необходимости модифицировать внешние файлы и вручную переключать флажки.