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

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

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

Причины отсутствия отборов в «Универсальном обмене данными в формате XML»

Проанализируем две основные ситуации, когда в обработке V8Exchan83.epf (или встроенной обработке УниверсальныйОбменДаннымиXML) пропадает возможность интерактивно настроить фильтр по элементам:

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

Способ 1. Ограничение выгрузки через «Отказ» в ПКО «Перед выгрузкой»

Рассмотрим самый быстрый и удобный способ для разовой отладки, который не требует изменения состава ПВД или структуры выборки данных. В обработчике события ПередВыгрузкой соответствующего Правила конвертации объектов (ПКО) устанавливается проверка условия.

Посмотрим на пример кода в ПКО для справочника Номенклатура:


Если Источник.Код <> "00-00000001" Тогда
    Отказ = Истина;
КонецЕсли;

При таком подходе платформа перебирает элементы, но конвертирует и записывает в файл обмена только тот объект, чей код совпал с заданным. Все остальные объекты отсекаются параметром Отказ = Истина.

Способ 2. Ограничение выборки через параметр и ПВД

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

Выполним следующие шаги:

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

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ";

Если Параметры.Свойство("Отладка") И Параметры.Отладка <> 0 Тогда
    Запрос.Текст = Запрос.Текст + " ПЕРВЫЕ " + Строка(Параметры.Отладка);
КонецЕсли;

Запрос.Текст = Запрос.Текст + "
|   Номенклатура.Ссылка КАК Ссылка
|ИЗ
|   Справочник.Номенклатура КАК Номенклатура";

ВыборкаДанных = Запрос.Выполнить().Выгрузить();

В обработке выгрузки на вкладке параметров указываем значение 1 для параметра Отладка, после чего выгружаем данные. Будет обработан только один элемент.

Способ 3. Передача конкретной ссылки в коллекцию «ВыборкаДанных»

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


ВыборкаДанных = Новый Массив;
НайденныйЭлемент = Справочники.Номенклатура.НайтиПоКоду("00-00000001");

Если ЗначениеЗаполнено(НайденныйЭлемент) Тогда
    ВыборкаДанных.Добавить(НайденныйЭлемент);
КонецЕсли;

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

Способ 4. Программный вызов «ВыгрузитьПоПравилу»

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


СсылкаНаОбъект = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", "АРТ-10025");

Если ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
    ВыгрузитьПоПравилу(СсылкаНаОбъект, , , , "Номенклатура");
КонецЕсли;

Здесь пятым параметром передается имя нужного ПКО ("Номенклатура"), по которому объект конвертируется в XML со всеми зависимыми свойствами.

Особенности переноса связанных реквизитов (на примере единиц измерения)

При переносе одиночного элемента номенклатуры из конфигураций с простой структурой (например, Розница 1.0) в конфигурации со сложным учетом единиц (Управление торговлей 2.3 / 10.3) важно учитывать разницу метаданных:

  1. В базе-приемнике реквизит БазоваяЕдиницаИзмерения обычно ссылается на классификатор (Справочник.КлассификаторЕдиницИзмерения).
  2. Реквизит ЕдиницаХраненияОстатков ссылается на подчиненный справочник (Справочник.ЕдиницыИзмерения), владельцем которого является сама номенклатура.

Чтобы корректно заполнить базовую единицу значением по умолчанию («шт»), в правиле конвертации свойства (ПКС) БазоваяЕдиницаИзмерения в обработчике ПередВыгрузкой можно задать поиск по общероссийскому классификатору (код 796):

Значение = "796"; // Код штуки в классификаторе ОКЕИ

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

← На главную