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

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

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

Особенности работы с перечислениями 1С 7.7 в КД 2

В платформе 1С 7.7 перечисления не являются самостоятельными таблицами базы данных, как справочники или документы. Это создает нюансы при выгрузке:

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

Проанализируем основные способы настройки конвертации, которые позволяют корректно сформировать элементы справочника-приемника.

Способ 1. Настройка ПКО со строковым преобразованием в ПКС

Это наиболее простой вариант, когда элемент справочника-приемника создается по требованию, в момент выгрузки ссылающегося на него объекта.

Рассмотрим порядок настройки правил:

  1. Создаем Правило конвертации объектов (ПКО):

    — Источник: Перечисление.ИмяПеречисления

    — Приемник: Справочник.ИмяСправочника

  2. В настройках ПКО устанавливаем флаг «Автоматически генерировать код если не задан» (так как в перечислении нет кода, платформа 8.3 должна сформировать его автоматически).
  3. Добавляем Правило конвертации свойств (ПКС) для реквизита Наименование:

    — Источник: не заполняем (оставляем пустым);

    — Приемник: Наименование;

    — Устанавливаем флаг «Поиск».

  4. В обработчике события «Перед выгрузкой» данного ПКС прописываем код:

Значение = Строка(Источник);

Если справочник в 8.3 имеет обязательные для заполнения реквизиты, их значения также можно передать в обработчике ПКС или сформировать дополнительно.

Способ 2. Использование входящих и исходящих данных

Если требуется передать дополнительную информацию при выгрузке ссылки или сформировать реквизиты приемника по сложной логике, вызовем обработку с помощью объекта СписокЗначений (для 1С 7.7).

В ПКО справочника-приемника создаем ПКС для реквизитов Наименование, Код и ПометкаУдаления. Для них отмечаем флаг «Получать из входящих данных». В источнике эти ПКС остаются пустыми.

В ПКО родительского объекта (например, при выгрузке контрагента) перед выгрузкой реквизита перечисления формируем структуру данных:


ВходящиеДанные = СоздатьОбъект("СписокЗначений");
ВходящиеДанные.Установить("Наименование", Строка(Источник.Филиал));
ВходящиеДанные.Установить("ПометкаУдаления", 0);
ВходящиеДанные.Установить("Код", "");

В этом случае при выгрузке контрагента обработчик передает готовый набор свойств в ПКО создания справочника.

Способ 3. Выгрузка всех значений перечисления через произвольное ПВД

Чтобы выгрузить абсолютно все значения перечисления 7.7 в справочник 8.3 (даже если эти значения еще не использованы ни в одном документе или справочнике), обычное ПВД не подойдет. Потребуется написать алгоритм обхода метаданных.

Создадим Правило выгрузки данных (ПВД), установим способ выборки «Произвольный алгоритм» и в обработчике «Обслуживание ПВД / Перед выгрузкой» укажем следующий код:


Переч = Метаданные.Перечисление("ВашеПеречисление");
Для К = 1 По Переч.Значение() Цикл
    ЗначениеНаименование = Переч.Значение(К).Представление();
    ВыгрузитьПоПравилу(, , ЗначениеНаименование, , "Перечисление_В_Справочник");
КонецЦикла;

Здесь "Перечисление_В_Справочник" — это точное имя созданного ПКО. При таком подходе обработчик выполнит перебор всех значений перечисления из метаданных 7.7 и выгрузит их в приемник.

Чек-лист для проверки при возникновении ошибок

Если при выгрузке или загрузке данные не появляются в 8.3, проанализируем следующие моменты:

  1. Обновление файла правил в 7.7: После каждого изменения правил в КД 2 необходимо заново сохранять файл правил XML и перезагружать его в обработку выгрузки 7.7.
  2. Настройка автокода: Убедитесь, что в ПКО справочника-приемника включена автогенерация кода или код передается программно. Если код пустой и автонумерация отключена, 8.3 отклонит запись элемента.
  3. Флаги поиска: Для корректного поиска и предотвращения дублирования элементов флаг «Поиск» должен стоять на реквизите Наименование.
  4. Иерархия справочника: Если справочник-приемник в 8.3 является иерархическим, убедитесь, что при выгрузке передается реквизит ЭтоГруппа = Ложь.
← На главную