При интеграции систем на базе 1С:Предприятие (например, при переносе данных из УТ 10.3 в УТ 11) часто возникает задача: выгрузить не весь массив справочника, а строго один конкретный объект по нажатию кнопки прямо из его формы. При этом логика трансформации данных уже описана в правилах конвертации (КД 2.0 / 2.1).
Попытка просто вручную открывать типовую обработку УниверсальныйОбменДаннымиXML или постоянно перезаписывать файл правил является неудобной и нетехнологичной. Разберем основные архитектурные и программные способы реализации точечной выгрузки одного объекта.
Проанализируем наиболее универсальный подход для постоянной работы. Вместо генерации локальных файлов и ручного отслеживания изменений целесообразно задействовать стандартный план обмена.
Разберем по шагам, как это работает:
ОбменДанными.ЗарегистрироватьИзменения().Посмотрим на пример кода регистрации элемента на служебном узле:
УзелОбмена = ПланыОбмена.ОбменУправлениеТорговлей103УправлениеТорговлей11.НайтиПоКоду("ТОЧЕЧНЫЙ");
Если ЗначениеЗаполнено(УзелОбмена) Тогда
ОбменДанными.ЗарегистрироватьИзменения(УзелОбмена, Ссылка);
Сообщить("Элемент успешно зарегистрирован к выгрузке.");
КонецЕсли;
Если требуется получить именно отдельный файл выгрузки на диске по кнопке, можно программно инициализировать обработку УниверсальныйОбменДаннымиXML, применить правила и наложить точечный отбор через ПостроительОтчета.
Разберем по шагам данный алгоритм:
ЗагрузитьПравилаОбмена().ТаблицаПравилВыгрузки и отключаем все правила, установив Включить = 0.Включить = 1).ИспользоватьОтбор = Истина в строке ПВД, задаем путь к файлу выгрузки и вызываем метод ВыполнитьВыгрузку().Посмотрим на пример программной реализации:
ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбработкаОбмена.ИмяФайлаПравилОбмена = "C:\Rules\ExchangeRules.xml";
ОбработкаОбмена.ЗагрузитьПравилаОбмена();
// Отключаем все правила выгрузки
Для Каждого СтрокаПВД Из ОбработкаОбмена.ТаблицаПравилВыгрузки.Строки Цикл
СтрокаПВД.Включить = 0;
КонецЦикла;
// Ищем правило для нужного справочника
СтрокаНоменклатура = ОбработкаОбмена.ТаблицаПравилВыгрузки.Строки.Найти("Номенклатура", "Имя");
Если СтрокаНоменклатура <> Неопределено Тогда
СтрокаНоменклатура.Включить = 1;
// Формируем отбор через ПостроительОтчета
Построитель = Новый ПостроительОтчета;
Построитель.Текст = "ВЫБРАТЬ _.* ИЗ Справочник.Номенклатура КАК _ {ГДЕ _.Ссылка.* КАК ПолеОтбора}";
Отбор = Построитель.Отбор.Добавить("ПолеОтбора");
Отбор.ВидСравнения = ВидСравнения.Равно;
Отбор.Значение = Ссылка;
Отбор.Использование = Истина;
СтрокаНоменклатура.НастройкиПостроителя = Построитель.ПолучитьНастройки();
СтрокаНоменклатура.ИспользоватьОтбор = Истина;
КонецЕсли;
ОбработкаОбмена.ИмяФайлаДанных = "C:\Exchange\ExportObject.xml";
ОбработкаОбмена.ВыполнитьВыгрузку();
Рассмотрим альтернативный способ, когда есть возможность отредактировать сами правила обмена в конфигурации «Конвертация данных 2.1». Этот метод позволяет избежать динамического конструирования построителя отчета в коде формы.
Разберем процесс настройки:
ВыгрузитьПоПравилу().Параметры.Код в обработчике ПВД в правилах обмена:
Если Параметры.Свойство("ВыгружаемыйОбъект") И ЗначениеЗаполнено(Параметры.ВыгружаемыйОбъект) Тогда
ВыгрузитьПоПравилу(Параметры.ВыгружаемыйОбъект, , , , "Номенклатура");
КонецЕсли;
Код кнопки в форме объекта в базе УТ 10.3:
ОбработкаОбмена = Обработки.УниверсальныйОбменДаннымиXML.Создать();
ОбработкаОбмена.ИмяФайлаПравилОбмена = "C:\Rules\ExchangeRules.xml";
ОбработкаОбмена.ЗагрузитьПравилаОбмена();
// Передаем ссылку в параметры правил
ОбработкаОбмена.Параметры.Вставить("ВыгружаемыйОбъект", ЭтотОбъект.Ссылка);
ОбработкаОбмена.ИмяФайлаДанных = "C:\Exchange\ExportObject.xml";
ОбработкаОбмена.ВыполнитьВыгрузку();
Проанализируем частые проблемы, возникающие при точечной выгрузке объектов по правилам КД 2:
HTTPСоединение, либо воспользоваться подключением через COMConnector.