При переходе с платформы 1С 7.7 на 1С 8.3 часто возникает необходимость изменить структуру хранения данных. Распространенный случай — конвертация системного перечисления из версии 7.7 в полноценный справочник версии 8.3 (например, перенос типов контрагентов, филиалов или статусов). Разберем подробнее, с какими сложностями можно столкнуться при настройке правил в конфигурации «Конвертация данных 2» (КД 2) и как их правильно решить.
В платформе 1С 7.7 перечисления не являются самостоятельными таблицами базы данных, как справочники или документы. Это создает нюансы при выгрузке:
Источник: В Правилах конвертации свойств (ПКС) при пустом источнике переменная Источник ссылается на сам родительский объект (например, на выгружаемый справочник «Контрагенты»), а не на значение перечисления.Строка(Источник) возвращает представление (синоним) значения, а метод Источник.Идентификатор() — его имя в конфигураторе.Проанализируем основные способы настройки конвертации, которые позволяют корректно сформировать элементы справочника-приемника.
Это наиболее простой вариант, когда элемент справочника-приемника создается по требованию, в момент выгрузки ссылающегося на него объекта.
Рассмотрим порядок настройки правил:
— Источник: Перечисление.ИмяПеречисления
— Приемник: Справочник.ИмяСправочника
Наименование:
— Источник: не заполняем (оставляем пустым);
— Приемник: Наименование;
— Устанавливаем флаг «Поиск».
Значение = Строка(Источник);
Если справочник в 8.3 имеет обязательные для заполнения реквизиты, их значения также можно передать в обработчике ПКС или сформировать дополнительно.
Если требуется передать дополнительную информацию при выгрузке ссылки или сформировать реквизиты приемника по сложной логике, вызовем обработку с помощью объекта СписокЗначений (для 1С 7.7).
В ПКО справочника-приемника создаем ПКС для реквизитов Наименование, Код и ПометкаУдаления. Для них отмечаем флаг «Получать из входящих данных». В источнике эти ПКС остаются пустыми.
В ПКО родительского объекта (например, при выгрузке контрагента) перед выгрузкой реквизита перечисления формируем структуру данных:
ВходящиеДанные = СоздатьОбъект("СписокЗначений");
ВходящиеДанные.Установить("Наименование", Строка(Источник.Филиал));
ВходящиеДанные.Установить("ПометкаУдаления", 0);
ВходящиеДанные.Установить("Код", "");
В этом случае при выгрузке контрагента обработчик передает готовый набор свойств в ПКО создания справочника.
Чтобы выгрузить абсолютно все значения перечисления 7.7 в справочник 8.3 (даже если эти значения еще не использованы ни в одном документе или справочнике), обычное ПВД не подойдет. Потребуется написать алгоритм обхода метаданных.
Создадим Правило выгрузки данных (ПВД), установим способ выборки «Произвольный алгоритм» и в обработчике «Обслуживание ПВД / Перед выгрузкой» укажем следующий код:
Переч = Метаданные.Перечисление("ВашеПеречисление");
Для К = 1 По Переч.Значение() Цикл
ЗначениеНаименование = Переч.Значение(К).Представление();
ВыгрузитьПоПравилу(, , ЗначениеНаименование, , "Перечисление_В_Справочник");
КонецЦикла;
Здесь "Перечисление_В_Справочник" — это точное имя созданного ПКО. При таком подходе обработчик выполнит перебор всех значений перечисления из метаданных 7.7 и выгрузит их в приемник.
Если при выгрузке или загрузке данные не появляются в 8.3, проанализируем следующие моменты:
Наименование.ЭтоГруппа = Ложь.