При работе с инструментом «1С:Конвертация данных 2.1» (КД 2.1) разработчики часто сталкиваются с ситуацией, когда созданный в правилах параметр, несмотря на установленные флажки «Передавать при выгрузке» и «При загрузке», упорно не желает попадать в результирующий XML-файл. Это создает серьезные препятствия, если логика загрузки в базе-приемнике опирается на эти значения. В этой статье мы подробно разберем, почему так происходит, и изучим несколько способов решения проблемы: от организационных до чисто программных.
Для начала разберем, как технически работает передача параметров в формате обмена КД 2.1. Когда мы настраиваем параметры на соответствующей вкладке в конфигурации «Конвертация данных», мы ожидаем, что в начале XML-файла выгрузки появится узел ЗначениеПараметра. Этот узел должен содержать имя параметра и его значение.
Однако существует важный нюанс: за формирование этого узла отвечает не сама «Конвертация», а обработка выгрузки, которая читает ваши правила. Проанализируем основные причины «исчезновения» данных:
Как показывает практика, самой частой причиной проблемы является использование встроенных в старые конфигурации средств обмена. Рассмотрим пошагово, как это исправить:
Если вы обнаружили, что в XML-файле отсутствует узел ЗначениеПараметра, первым делом откажитесь от встроенного механизма выгрузки. Вместо него воспользуйтесь внешней обработкой V8Ex2_0.epf (Универсальный обмен данными в формате XML), которая идет в комплекте с вашей версией «Конвертации данных».
Почему это помогает? Внешняя обработка всегда обновляется вместе с КД и содержит наиболее полный код для работы со всеми узлами правил, включая параметры, алгоритмы и запросы. Выясним, помогло ли это: откройте сформированный файл любым текстовым редактором. Если в начале файла появился блок с именами ваших параметров, значит, причина была именно в устаревшем коде встроенного механизма обмена.
Рассмотрим ситуацию, когда параметр должен заполняться программно, а не интерактивно пользователем. Выясним, где лучше всего писать код для установки значения Параметры.ВашеИмяПараметра.
Посмотрим на пример из практики: иногда установка значения в обработчике ПередВыгрузкойДанных не срабатывает для записи в файл, так как заголовок XML уже начал формироваться. В таком случае эффективным решением будет перенос кода в обработчик «После загрузки правил обмена». Это событие происходит на стороне выгрузки сразу после того, как правила были прочитаны в память, но до начала какой-либо записи в файл.
Пример кода для инициализации параметра:
// В обработчике "После загрузки правил обмена"
Параметры.Вставить("ИмяНужногоПараметра", "ЗначениеСтрокой");
Если стандартные методы не помогают (например, при специфической интеграции в планы обмена), проанализируем более продвинутый способ. Мы можем принудительно добавить параметр в коллекцию обработки. Рассмотрим пример реализации в обработчике ПередВыгрузкойДанных:
// Программное добавление параметра в таблицу настроек обработки
НовыйПараметр = ТаблицаНастройкиПараметров.Добавить();
НовыйПараметр.Имя = "УникальноеИмяПараметра";
НовыйПараметр.Наименование = "Отображаемое Имя";
НовыйПараметр.ПередаватьПараметрПриВыгрузке = Истина;
// Допустим, берем значение из константы
НовыйПараметр.Значение = Константы.НастройкаОбмена.Получить();
После такой манипуляции обработка «увидит» параметр как созданный пользователем в диалоге и гарантированно отправит его в поток XML.
Разберем ситуацию, когда нам нужно передать не просто строку, а целую ТаблицаЗначений. Проанализируем пример кода, который часто вызывает затруднения:
// Попытка передать таблицу через параметры
Параметры.Вставить("СписокСотрудников", Новый ТаблицаЗначений);
Параметры.СписокСотрудников.Колонки.Добавить("Сотрудник");
// Заполнение данными...
Важный момент: Объекты типа ТаблицаЗначений напрямую в параметры КД 2.1 через XML передаются плохо, так как они не являются простыми типами. Если вам необходимо передать таблицу, рассмотрите следующие варианты:
ЗначениеВСтрокуВнутр(ТЗ) на стороне выгрузки и ЗначениеИзСтрокиВнутр(Параметры.ТЗ) на стороне загрузки.Подводя итог, если передача параметра не срабатывает, выполните следующие шаги:
Во-первых, проверьте наличие узла ЗначениеПараметра в самом XML-файле. Если его там нет — проблема на стороне Выгрузки (старая обработка или не тот обработчик события). Если узел в файле есть, но в базе-приемнике значение пустое — проблема на стороне Загрузки (параметр не определен в правилах на вкладке «Параметры» или очищается в обработчике ПриЗагрузке).
Во-вторых, всегда убеждайтесь, что в КД на вкладке параметров у нужной строки стоят обе галочки: «Передавать при выгрузке» и «При загрузке». Без них обработка обмена может игнорировать программно установленные значения.
Мы проанализировали основные причины сбоев при передаче параметров. Использование актуальных внешних обработок и правильный выбор событий для инициализации данных позволяют решить 99% проблем в Конвертации данных 2.1.