Во время разработки и отладки правил обмена в конфигурации «1С:Конвертация данных 2.1» часто возникает задача проверить корректность переноса конкретного объекта. Выгружать весь справочник целиком (особенно если речь идет о большой номенклатурной базе) нерационально и занимает слишком много времени. Разберем основные причины, почему в обработке выгрузки могут отсутствовать интерактивные отборы, и рассмотрим практические способы выгрузки ровно одного элемента справочника.
Проанализируем две основные ситуации, когда в обработке V8Exchan83.epf (или встроенной обработке УниверсальныйОбменДаннымиXML) пропадает возможность интерактивно настроить фильтр по элементам:
Рассмотрим самый быстрый и удобный способ для разовой отладки, который не требует изменения состава ПВД или структуры выборки данных. В обработчике события ПередВыгрузкой соответствующего Правила конвертации объектов (ПКО) устанавливается проверка условия.
Посмотрим на пример кода в ПКО для справочника Номенклатура:
Если Источник.Код <> "00-00000001" Тогда
Отказ = Истина;
КонецЕсли;
При таком подходе платформа перебирает элементы, но конвертирует и записывает в файл обмена только тот объект, чей код совпал с заданным. Все остальные объекты отсекаются параметром Отказ = Истина.
Разберем вариант, когда необходимо выгрузить ограниченное число записей (например, первые N элементов) с использованием параметров правил обмена. Для этого в ПВД настраивается произвольная выборка данных через запрос.
Выполним следующие шаги:
Отладка (числовой тип).ПередОбработкой пропишем формирование текста запроса с учетом переданного параметра:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ";
Если Параметры.Свойство("Отладка") И Параметры.Отладка <> 0 Тогда
Запрос.Текст = Запрос.Текст + " ПЕРВЫЕ " + Строка(Параметры.Отладка);
КонецЕсли;
Запрос.Текст = Запрос.Текст + "
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
ВыборкаДанных = Запрос.Выполнить().Выгрузить();
В обработке выгрузки на вкладке параметров указываем значение 1 для параметра Отладка, после чего выгружаем данные. Будет обработан только один элемент.
Если требуется выгрузить один конкретный объект по его ссылке или коду без написания больших запросов, используем прямую передачу массива ссылок в переменную ВыборкаДанных обработчика ПередОбработкой в ПВД:
ВыборкаДанных = Новый Массив;
НайденныйЭлемент = Справочники.Номенклатура.НайтиПоКоду("00-00000001");
Если ЗначениеЗаполнено(НайденныйЭлемент) Тогда
ВыборкаДанных.Добавить(НайденныйЭлемент);
КонецЕсли;
После выполнения данного кода обработка сформирует файл обмена исключительно для указанного элемента и связанных с ним данных, требуемых правилами конвертации.
Проанализируем еще один гибкий метод — вызов глобальной функции выгрузки конкретного объекта. Этот способ удобен, когда стандартные ПВД полностью отключаются, а выгрузка инициируется из глобального обработчика ПослеЗагрузкиПравилОбмена или специального алгоритма:
СсылкаНаОбъект = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", "АРТ-10025");
Если ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
ВыгрузитьПоПравилу(СсылкаНаОбъект, , , , "Номенклатура");
КонецЕсли;
Здесь пятым параметром передается имя нужного ПКО ("Номенклатура"), по которому объект конвертируется в XML со всеми зависимыми свойствами.
При переносе одиночного элемента номенклатуры из конфигураций с простой структурой (например, Розница 1.0) в конфигурации со сложным учетом единиц (Управление торговлей 2.3 / 10.3) важно учитывать разницу метаданных:
БазоваяЕдиницаИзмерения обычно ссылается на классификатор (Справочник.КлассификаторЕдиницИзмерения).ЕдиницаХраненияОстатков ссылается на подчиненный справочник (Справочник.ЕдиницыИзмерения), владельцем которого является сама номенклатура.Чтобы корректно заполнить базовую единицу значением по умолчанию («шт»), в правиле конвертации свойства (ПКС) БазоваяЕдиницаИзмерения в обработчике ПередВыгрузкой можно задать поиск по общероссийскому классификатору (код 796):
Значение = "796"; // Код штуки в классификаторе ОКЕИ
При этом в ПКО для классификатора единиц измерения поиск настраивается по коду, что обеспечивает корректное сопоставление данных даже при выгрузке единичного объекта.