Как передать список простых данных или параметров из 1С 7.7 в 1С 8.3 через Конвертацию данных 2.1?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

Выясним причину, почему возникает эта сложность, и проанализируем доступные способы передачи примитивных данных и коллекций из 7.7 в 8.3.

Выясним причину проблемы и ограничения платформы

Сложность передачи параметров объектов при выгрузке из «1С 7.7» обусловлена несколькими факторами:

  1. Ограничения обработки выгрузки v77exp.ert: Штатный механизм передачи параметров объектов через структуру ПараметрыОбъекта в КД 2.1 создавался с ориентиром на восьмую платформу. Обработка выгрузки для 7.7 по умолчанию не формирует в XML-файле узлы ЗначениеПараметра внутри объектовых узлов так, как это делает выгрузка в 8.x.
  2. Различие внутренних форматов сериализации: Объекты типов СписокЗначений и ТаблицаЗначений в «1С 7.7» и «1С 8.3» существенно отличаются по внутреннему устройству. Прямое сохранение значения через ЗначениеВСтрокуВнутр из версии 7.7 не распарсится встроенными средствами платформы 8.3.

Разберем подробнее варианты решения этой задачи.

Вариант 1. Использование любого текстового реквизита (комментария)

Самый простой и быстрый способ — упаковать передаваемые строки в одну текстовую строку с условным разделителем и передать её через служебный или неиспользуемый текстовый реквизит документа (например, через Комментарий).

Рассмотрим по шагам реализацию этого подхода:

  1. В источнике «1С 7.7» формируем список строковых значений и объединяем их в одну строку с разделителем (например, точкой с запятой ; или символом переноса строки).
  2. Записываем полученную строку в реквизит Комментарий или передаем через правило конвертации свойства (ПКС).
  3. При загрузке в «1С 8.3» в обработчике ПКО «После загрузки» извлекаем строку из реквизита приемника и разбираем её обратно в массив или список с помощью встроенной функции СтрРазделить().

Проанализируем пример кода для обработки строки на стороне «1С 8.3»:


// В обработчике "После загрузки" на стороне 8.3
СтрокаДанных = Объект.Комментарий;
МассивСтрок = СтрРазделить(СтрокаДанных, ";", Ложь);

Для Каждого ТекСтрока Из МассивСтрок Цикл
    // Выполняем требуемую обработку документа
КонецЦикла;

Вариант 2. Программное формирование XML-узла параметра в 7.7

Если изменять содержимое реквизитов объекта нежелательно, сформируем XML-узел параметра программно непосредственно в обработчике правил выгрузки на стороне 7.7.

Разберем по шагам алгоритм действий:

  1. В обработчике ПКО «При выгрузке» в 7.7 формируем текстовую строку с разделителями из списка значений.
  2. Работаем с текущим выгружаемым XML-узлом УзелОбъекта, вручную добавляя узел ЗначениеПараметра с атрибутами Имя и Тип="Строка".
  3. На стороне 8.3 стандартная обработка Универсальный обмен данными в формате XML автоматически прочтет этот тег и поместит параметр в структуру ПараметрыОбъекта.
  4. В обработчике ПКО «После загрузки» на стороне 8.3 считываем значение из ПараметрыОбъекта.Получить("ИмяПараметра") и обрабатываем его.

Вариант 3. Передача через ПКС с флагом «Передавать данные в параметр»

Посмотрим на ещё один удобный инструмент КД 2.1 — использование виртуального ПКС с передачей данных в параметр.

  1. В правиле конвертации объектов (ПКО) создаем новое виртуальное ПКС (без указания свойства источника и приемника).
  2. В свойствах этого ПКС устанавливаем флажок «Передавать данные в параметр» и указываем имя параметра.
  3. В обработчике ПКС «Перед выгрузкой» на стороне 7.7 формируем строку с разделителями и присваиваем значение переменной Значение.
  4. При загрузке в 8.3 данные автоматически окажутся в структуре ПараметрыОбъекта в обработчике «После загрузки».

Вариант 4. Передача коллекций через ПКГС

Если требуется передать данные в виде таблицы или списка строк, рассмотрим использование Правил конвертации группы свойств (ПКГС):

  1. В обработчике ПКГС «Перед обработкой» на стороне 7.7 создаем таблицу значений через СоздатьОбъект("ТаблицаЗначений") с колонкой строкового типа.
  2. Заполняем таблицу нужными строковыми значениями.
  3. Передаем созданную таблицу в предопределенную переменную КоллекцияОбъектов.
  4. На стороне 8.3 эти данные могут автоматически заполнить табличную часть приемника или обработаться программно без фактической записи в ТЧ документа.

Вариант 5. Использование временного файла или сериализация JSON/XML

Если передаваемые данные содержат сложные символы, затрудняющие разделение обычной строкой, разберем ещё два подхода:

Таким образом, мы рассмотрели все основные способы передачи служебных примитивных данных и списков строк из 1С 7.7 в 1С 8.3 при использовании Конвертации данных 2.1.

← На главную