Как ограничить количество выгружаемых элементов в 1С:Конвертация данных при отладке правил?

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

При разработке и тестировании правил обмена данными в среде «1С:Конвертация данных 2.1» (КД) разработчики часто сталкиваются с серьезной проблемой производительности. Если в базе-источнике содержатся сотни тысяч элементов (например, справочник Номенклатура, насчитывающий 400 000 позиций), то процесс выгрузки для проверки одной мелкой ошибки может занимать несколько часов. Ждать завершения полной выгрузки крайне неэффективно.

Для ускорения процесса тестирования критически важно научиться ограничивать объем выгружаемых данных. В этой статье мы подробно разберем, как выгрузить не весь массив информации, а лишь небольшую репрезентативную выборку (например, 100–200 элементов). Мы проанализируем различные подходы — от быстрого изменения настроек в пользовательском режиме до программного управления выборкой непосредственно в правилах обмена.

Способ 1. Произвольный алгоритм в ПВД с использованием ограничения ПЕРВЫЕ

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

Давайте разберем по шагам, как настроить этот механизм в конфигурации «Конвертация данных»:

  1. Откройте нужные правила обмена в настройках КД и перейдите на вкладку «Правила выгрузки данных» (ПВД).
  2. Найдите ПВД для вашего объекта (например, для справочника Номенклатура или документа ЗаказКлиента).
  3. В поле «Способ выборки» вместо значения Стандартная выборка выберите «Произвольный алгоритм».
  4. Перейдите к обработчику события «Перед обработкой». Здесь мы напишем код, который ограничит выборку с помощью конструкции языка запросов ПЕРВЫЕ.

Рассмотрим пример кода для обработчика «Перед обработкой» в ПВД:


// Отменяем стандартную автоматическую выборку объектов платформой
Отказ = Истина; 

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

РезультатЗапроса = Запрос.Выполнить();

// Если выборка не пуста, запускаем выгрузку каждого элемента по правилу
Если Не РезультатЗапроса.Пустой() Тогда
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
        
        // Передаем ссылку на конкретный объект в универсальный метод выгрузки
        // Указываем имя ПКО (Правило конвертации объектов), по которому нужно обработать элемент
        ВыгрузитьПоПравилу(Выборка.Ссылка, , , , "Номенклатура");
        
    КонецЦикла;
КонецЕсли;

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

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

Способ 2. Интерактивная настройка отборов в обработке выгрузки

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

Выясним, как настроить быстрый отбор непосредственно перед запуском выгрузки в режиме «1С:Предприятие»:

  1. Запустите обработку УниверсальныйОбменДаннымиXML в базе-источнике и загрузите файл правил обмена.
  2. Перейдите на вкладку «Таблица правил выгрузки».
  3. Найдите строку с правилом выгрузки нужного вам объекта (например, справочника номенклатуры).
  4. В колонке настройки отборов (крайняя правая часть строки) дважды кликните для настройки условий.
  5. Задайте жесткий отбор, который существенно сузит выборку:
    • Вместо условия Равно используйте вид сравнения В группе и укажите конкретную небольшую папку (группу номенклатуры), в которой находится всего несколько десятков товаров.
    • Или используйте вид сравнения В списке, куда вручную подберите 10–15 различных карточек номенклатуры (включая простые товары, услуги, позиции с характеристиками и сериями для максимальной полноты теста).

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

Способ 3. Выгрузка «только по ссылкам» (с отключением ПВД)

Очень часто справочник Номенклатура сам по себе не является главным объектом переноса — он мигрирует в базу-приемник как сопутствующая аналитика в составе документов (например, в табличных частях накладных, заказов или спецификаций).

Если вы отлаживаете именно перенос документов, то выгружать весь справочник номенклатуры абсолютно бессмысленно. Мы можем настроить выгрузку связанных справочников исключительно «по ссылкам».

Разберем этот изящный алгоритм настройки:

  1. В конфигурации «Конвертация данных» перейдите к списку Правил выгрузки данных (ПВД).
  2. Полностью снимите флаг активности (флажок выгрузки) у правила для справочника Номенклатура. Это заблокирует его самостоятельную выгрузку.
  3. В ПВД нужного документа (например, РеализацияТоваровУслуг) настройте отбор на 1-2 конкретных тестовых документа, которые содержат интересующие вас позиции номенклатуры.
  4. Запустите обмен. Механизм КД обработает выбранные документы, обнаружит ссылки на номенклатуру в табличной части «Товары», автоматически обратится к соответствующему Правилу конвертации объектов (ПКО) для номенклатуры и перенесет только те элементы, которые физически присутствуют в этих документах.

Таким образом, вместо 400 000 элементов справочника вы выгрузите ровно те 5–10 позиций, которые требуются для тестирования бизнес-логики проведения документов. Скорость выгрузки при этом возрастет в сотни раз.

Способ 4. Программная передача параметров и выгрузка списка объектов

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

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

Посмотрим на пример кода внешней обработки, которая инициирует выгрузку конкретного списка документов:


// Создаем экземпляр обработки обмена данными
ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбработкаОбмена.РежимОбмена = "Выгрузка";
ОбработкаОбмена.ИмяФайлаПравилОбмена = ПутьКФайлуПравил;
ОбработкаОбмена.ИмяФайлаОбмена = ПутьКФайлуДанных;

// Обязательно загружаем правила перед заполнением параметров
ОбработкаОбмена.ЗагрузитьПравилаОбмена();

// Формируем список документов для тестирования
СписокТестовыхДокументов = Новый Массив;
СписокТестовыхДокументов.Добавить(СсылкаНаПервыйДокумент);
СписокТестовыхДокументов.Добавить(СсылкаНаВторойДокумент);

// Добавляем параметр "МассивДокументов" в таблицу настройки параметров обработки
НоваяСтрокаПараметров = ОбработкаОбмена.ТаблицаНастройкиПараметров.Добавить();
НоваяСтрокаПараметров.Имя = "МассивДокументов";
НоваяСтрокаПараметров.Наименование = "Массив документов для тестирования";
НоваяСтрокаПараметров.Значение = СписокТестовыхДокументов;

// Запускаем выгрузку
ОбработкаОбмена.ВыполнитьВыгрузку();

Теперь проанализируем, как поймать этот параметр внутри правил обмена. В КД в ПВД соответствующего документа в обработчике «Перед обработкой» пишем следующий код:


// Отключаем стандартный перебор всех документов в базе
Отказ = Истина;

// Проверяем заполненность нашего параметра, переданного программно
Если Параметры.Свойство("МассивДокументов") И ТипЗнч(Параметры.МассивДокументов) = Тип("Массив") Тогда
    
    ПКО = Неопределено;
    пУзелСсылки = Неопределено;
    
    // Перебираем переданные документы и выгружаем их по правилу
    Для Каждого ТекущийДокумент Из Параметры.МассивДокументов Цикл
        
        // Логируем процесс выгрузки для визуального контроля
        Сообщить("Выгружается тестовый объект: " + Строка(ТекущийДокумент));
        
        // Вызываем выгрузку по конкретному правилу конвертации (ПКО)
        ВыгрузитьПоПравилу(ТекущийДокумент, , , , "РеализацияТоваровУслуг", пУзелСсылки, , ПКО);
        
    КонецЦикла;
    
КонецЕсли;

Этот подход незаменим при организации автоматического тестирования или интеграции обмена в регулярные регламентные процедуры, когда состав выгружаемых данных постоянно меняется и зависит от внешних факторов.

Способ 5. Использование механизма планов обмена (Регистрация изменений)

Если вы хотите протестировать правила в условиях, максимально приближенных к реальной боевой эксплуатации («exchange-like» режим), используйте стандартный механизм регистрации изменений на узлах планов обмена.

Разберем этот процесс по шагам:

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

Важные рекомендации по ускорению выгрузки

Выясним, почему процесс выгрузки может занимать много времени даже при небольшом количестве объектов, и как это исправить:

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

← На главную