Как передать виртуальный реквизит при выгрузке из 1С 8 в 1С 7.7 через Конвертацию данных

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

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

Если при обмене «1С 8 → 1С 8» для таких целей предусмотрен механизм ПараметрыОбъекта, то при выгрузке в 1С 7.7 данный механизм не поддерживается штатной обработкой загрузки V77Imp.ert и форматом обмена для «семерки». Принимающая сторона может считывать данные через типовой обработчик либо разбирать XML-файл обмена с помощью собственного парсера, ожидая увидеть дополнительное значение внутри стандартного узла <Свойство>.

Разберем основные практические способы добавления виртуальных реквизитов в правила конвертации данных.

Способ 1. Добавление виртуального реквизита в метаданные приемника внутри КД

Проанализируем самый чистый и удобный способ, не требующий изменения файла конфигурации 1С 7.7 (1Cv7.MD) или ручной правки XML-правил. Вся структура метаданных в конфигурации «Конвертация данных 2» хранится в обычных прикладных справочниках, которые можно свободно дополнять вручную.

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

  1. Откроем в базе «Конвертации данных» справочник описания метаданных конфигурации-приемника: Конфигурации → [Конфигурация 7.7] → Объекты метаданных → Справочники → [Нужный справочник].
  2. В табличной части списка свойств (реквизитов) справочника вручную добавим новую строку: укажем имя реквизита (например, ИмяРодителяСтрокой), его синоним и выберем примитивный тип данных (Строка).
  3. Перейдем в соответствующее Правило конвертации объекта (ПКО) и создадим новое Правило конвертации свойства (ПКС).
  4. Поле Источник оставим пустым, а в поле Приемник выберем только что созданное виртуальное свойство.
  5. В обработчике ПКС «Перед выгрузкой» напишем алгоритм вычисления значения:

Значение = Источник.ДоговорВладелец.Наименование;

При выполнении обработки УниверсальныйОбменДаннымиXML на стороне 1С 8 в результирующем файле будет сформирован стандартный XML-узел:


<Свойство Имя="ИмяРодителяСтрокой" Тип="Строка">
    <Значение>Основной договор</Значение>
</Свойство>

Этот узел может быть легко прочитан кастомным алгоритмом разбора на стороне 1С 7.7, а при использовании типовой обработки V77Imp.ert он будет просто проигнорирован, не вызывая критических ошибок загрузки.

Способ 2. Прямая запись узла в XML-поток через обработчик ПКО

Рассмотрим альтернативный способ, когда нет возможности редактировать метаданные в КД. В этом случае мы можем напрямую дописать нужный узел XML в выходной поток в момент выгрузки объекта.

В правиле конвертации объекта (ПКО) в обработчике «После выгрузки» доступен объект записи XML через переменную ФайлОбмена. Сформируем узел свойства программно:


Если ЗначениеЗаполнено(Источник.ДоговорВладелец) Тогда
    ФайлОбмена.ЗаписатьНачалоЭлемента("Свойство");
    ФайлОбмена.ЗаписатьАтрибут("Имя", "ИмяРодителяСтрокой");
    ФайлОбмена.ЗаписатьАтрибут("Тип", "Строка");
    
    ФайлОбмена.ЗаписатьНачалоЭлемента("Значение");
    ФайлОбмена.ЗаписатьТекст(Строка(Источник.ДоговорВладелец.Наименование));
    ФайлОбмена.ЗаписатьКонецЭлемента(); // Значение
    
    ФайлОбмена.ЗаписатьКонецЭлемента(); // Свойство
КонецЕсли;

Такой подход обеспечивает гибкость, однако требует строгого соблюдения синтаксиса и структуры XML-документа, чтобы не нарушить валидность файла обмена.

Способ 3. Передача данных через глобальную таблицу соответствий

Если передача виртуальных свойств непосредственно внутри объекта нежелательна, выясним, как передать эти данные в составе глобальных параметров обмена. Глобальные параметры штатно поддерживаются форматом выгрузки 1С 7.7.

Разберем реализацию:

  1. В обработчике «Перед выгрузкой данных» создадим таблицу соответствий в глобальной структуре Параметры:

Параметры.Вставить("ТаблицаРодителей", Новый ТаблицаЗначений);
Параметры.ТаблицаРодителей.Колонки.Добавить("КодЭлемента", Новый ОписаниеТипов("Строка"));
Параметры.ТаблицаРодителей.Колонки.Добавить("ИмяРодителя", Новый ОписаниеТипов("Строка"));
  1. В ПКО нужного справочника в обработчике «После выгрузки» заполним эту таблицу данными:

Если ЗначениеЗаполнено(Источник.ДоговорВладелец) Тогда
    НоваяСтрока = Параметры.ТаблицаРодителей.Добавить();
    НоваяСтрока.КодЭлемента = Источник.Код;
    НоваяСтрока.ИмяРодителя = Строка(Источник.ДоговорВладелец.Наименование);
КонецЕсли;
  1. При загрузке на стороне 1С 7.7 считываем таблицу соответствий из секции параметров один раз и используем ее для иерархической привязки элементов справочника.

Важные правила и ограничения

При работе с виртуальными свойствами следует учитывать следующие особенности:

  1. Типы данных: для виртуальных реквизитов рекомендуется использовать только примитивные типы данных (Строка, Число, Дата, Булево). Использование ссылочных типов потребует создания правил сопоставления ссылок, которые завершатся ошибкой из-за отсутствия целевого объекта в метаданных 1С 7.7.
  2. Поведение типовой загрузки 7.7: штатный обработчик V77Imp.ert пропускает узлы <Свойство>, имена которых не найдены в метаданных конфигурации 1С 7.7, поэтому добавление виртуальных свойств полностью безопасно.
  3. Использование исходящих данных: если расчет значения сложный и требует запроса, значение для виртуального ПКС можно передавать через структуру ИсходящиеДанные из обработчика ПКО «Перед выгрузкой», установив в ПКС флаг «Получить из входящих данных».
← На главную