При организации обмена данными между платформами «1С:Предприятие 8» и «1С:Предприятие 7.7» с использованием конфигурации «Конвертация данных 2.1» (КД 2) разработчики часто сталкиваются с архитектурными ограничениями формата выгрузки. Одной из типичных задач является передача сопутствующей служебной информации по объекту — например, наименования группы-родителя, вычисляемого статуса или служебных признаков, которых физически нет в метаданных конфигурации 1С 7.7.
Если при обмене «1С 8 → 1С 8» для таких целей предусмотрен механизм ПараметрыОбъекта, то при выгрузке в 1С 7.7 данный механизм не поддерживается штатной обработкой загрузки V77Imp.ert и форматом обмена для «семерки». Принимающая сторона может считывать данные через типовой обработчик либо разбирать XML-файл обмена с помощью собственного парсера, ожидая увидеть дополнительное значение внутри стандартного узла <Свойство>.
Разберем основные практические способы добавления виртуальных реквизитов в правила конвертации данных.
Проанализируем самый чистый и удобный способ, не требующий изменения файла конфигурации 1С 7.7 (1Cv7.MD) или ручной правки XML-правил. Вся структура метаданных в конфигурации «Конвертация данных 2» хранится в обычных прикладных справочниках, которые можно свободно дополнять вручную.
Выполним следующую последовательность шагов:
ИмяРодителяСтрокой), его синоним и выберем примитивный тип данных (Строка).
Значение = Источник.ДоговорВладелец.Наименование;
При выполнении обработки УниверсальныйОбменДаннымиXML на стороне 1С 8 в результирующем файле будет сформирован стандартный XML-узел:
<Свойство Имя="ИмяРодителяСтрокой" Тип="Строка">
<Значение>Основной договор</Значение>
</Свойство>
Этот узел может быть легко прочитан кастомным алгоритмом разбора на стороне 1С 7.7, а при использовании типовой обработки V77Imp.ert он будет просто проигнорирован, не вызывая критических ошибок загрузки.
Рассмотрим альтернативный способ, когда нет возможности редактировать метаданные в КД. В этом случае мы можем напрямую дописать нужный узел XML в выходной поток в момент выгрузки объекта.
В правиле конвертации объекта (ПКО) в обработчике «После выгрузки» доступен объект записи XML через переменную ФайлОбмена. Сформируем узел свойства программно:
Если ЗначениеЗаполнено(Источник.ДоговорВладелец) Тогда
ФайлОбмена.ЗаписатьНачалоЭлемента("Свойство");
ФайлОбмена.ЗаписатьАтрибут("Имя", "ИмяРодителяСтрокой");
ФайлОбмена.ЗаписатьАтрибут("Тип", "Строка");
ФайлОбмена.ЗаписатьНачалоЭлемента("Значение");
ФайлОбмена.ЗаписатьТекст(Строка(Источник.ДоговорВладелец.Наименование));
ФайлОбмена.ЗаписатьКонецЭлемента(); // Значение
ФайлОбмена.ЗаписатьКонецЭлемента(); // Свойство
КонецЕсли;
Такой подход обеспечивает гибкость, однако требует строгого соблюдения синтаксиса и структуры XML-документа, чтобы не нарушить валидность файла обмена.
Если передача виртуальных свойств непосредственно внутри объекта нежелательна, выясним, как передать эти данные в составе глобальных параметров обмена. Глобальные параметры штатно поддерживаются форматом выгрузки 1С 7.7.
Разберем реализацию:
Параметры:
Параметры.Вставить("ТаблицаРодителей", Новый ТаблицаЗначений);
Параметры.ТаблицаРодителей.Колонки.Добавить("КодЭлемента", Новый ОписаниеТипов("Строка"));
Параметры.ТаблицаРодителей.Колонки.Добавить("ИмяРодителя", Новый ОписаниеТипов("Строка"));
Если ЗначениеЗаполнено(Источник.ДоговорВладелец) Тогда
НоваяСтрока = Параметры.ТаблицаРодителей.Добавить();
НоваяСтрока.КодЭлемента = Источник.Код;
НоваяСтрока.ИмяРодителя = Строка(Источник.ДоговорВладелец.Наименование);
КонецЕсли;
При работе с виртуальными свойствами следует учитывать следующие особенности:
Строка, Число, Дата, Булево). Использование ссылочных типов потребует создания правил сопоставления ссылок, которые завершатся ошибкой из-за отсутствия целевого объекта в метаданных 1С 7.7.V77Imp.ert пропускает узлы <Свойство>, имена которых не найдены в метаданных конфигурации 1С 7.7, поэтому добавление виртуальных свойств полностью безопасно.ИсходящиеДанные из обработчика ПКО «Перед выгрузкой», установив в ПКС флаг «Получить из входящих данных».