Переход с классических конфигураций, таких как Управление торговлей 10.3, на современные решения вроде УТ 11.5 часто сопряжен с архитектурными сложностями — для этого есть решение для переноса справочников и документов из УТ 10.3 в УТ 11. Одной из самых частых задач является перенос данных, которые в старой базе хранились как жестко заданные реквизиты справочников, а в новой базе должны стать дополнительными реквизитами. В этой статье мы разберем, как правильно настроить правила конвертации данных (КД 2.1) для реализации этой задачи, используя типовые правила выгрузки данных из УТ 10.3 в УТ 11.5.
В конфигурациях на платформе 1С 8.2 (УТ 10.3) дополнительные сведения могли храниться либо в виде явных реквизитов справочника (например, ОсновнойВидДеятельности), либо в регистре сведений ЗначенияСвойствОбъектов. В современных конфигурациях на базе БСП (Библиотека стандартных подсистем), к которым относится УТ 11.5, механизм работы со свойствами изменился. Теперь они хранятся в табличной части ДополнительныеРеквизиты самого объекта (Контрагента, Номенклатуры и т.д.). Часто для упрощения процесса используется технический перенос основных справочников из УТ 10.3 в УТ 11.5, позволяющий сохранить базовую информацию перед глубокой кастомизацией — есть перенос справочников, остатков и документов при переходе на УТ 11.5.
Рассмотрим ситуацию: нам нужно перенести значение реквизита ВидДеятельности из карточки контрагента в УТ 10.3 в одноименный дополнительный реквизит в УТ 11.5.
Этот метод считается классическим для Конвертации данных 2.1. Поскольку в источнике (УТ 10.3) у нас нет табличной части ДополнительныеРеквизиты, нам нужно создать ее виртуально в процессе выгрузки. Проанализируем шаги реализации.
Шаг 1. Создание группы ПКС
В ПКО справочника Контрагенты создадим группу Правила Конвертации Свойств (ПКС). В качестве приемника для этой группы укажем табличную часть ДополнительныеРеквизиты. Поле «Источник» оставим пустым.
Шаг 2. Формирование виртуальной таблицы в обработчике «Перед выгрузкой»
В обработчике ПередВыгрузкой созданной группы ПКС нам необходимо инициализировать переменную КоллекцияОбъектов. Это должна быть таблица значений, структура которой повторяет структуру ТЧ ДополнительныеРеквизиты в приемнике. Разберем пример кода:
// Создаем структуру ТЧ приемника
ТаблицаДопРеквизитов = Новый ТаблицаЗначений;
ТаблицаДопРеквизитов.Колонки.Добавить("Свойство");
ТаблицаДопРеквизитов.Колонки.Добавить("Значение");
ТаблицаДопРеквизитов.Колонки.Добавить("ТекстоваяСтрока"); // Если используется в приемнике
// Заполняем строку данными из основного реквизита источника
Если ЗначениеЗаполнено(Источник.ОсновнойВидДеятельности) Тогда
НоваяСтрока = ТаблицаДопРеквизитов.Добавить();
// Поле Свойство пока оставим пустым или заполним строковым идентификатором
НоваяСтрока.Свойство = "ВидДеятельности";
НоваяСтрока.Значение = Источник.ОсновнойВидДеятельности;
КонецЕсли;
// Передаем таблицу в механизм КД
КоллекцияОбъектов = ТаблицаДопРеквизитов;
Шаг 3. Настройка подчиненных ПКС
Внутри группы ПКС создадим два правила для реквизитов Свойство и Значение.
Для ПКС Свойство в обработчике ПередВыгрузкой укажем логику поиска нужного элемента ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения в приемнике.
Для ПКС Значение ситуация сложнее, так как это поле имеет составной тип. Выясним, как передать тип правильно. В обработчике ПередВыгрузкой этого ПКС проанализируем тип значения:
Если ТипЗнч(ОбъектКоллекции.Значение) = Тип("СправочникСсылка.ВидыДеятельности") Тогда
ИмяПКО = "ВидыДеятельности";
ИначеЕсли ТипЗнч(ОбъектКоллекции.Значение) = Тип("Строка") Тогда
ИмяПКО = ""; // Для примитивных типов ПКО не нужно
КонецЕсли;
Рассмотрим более современный подход, который минимизирует риск нарушения целостности кэша дополнительных реквизитов в УТ 11.5. Мы можем передать данные через ПараметрыОбъекта и программно записать их при загрузке. Это особенно удобно для реализации кастомных сценариев переноса данных из старой УТ 10.3 в новые архитектуры.
Настройка выгрузки:
ДопРеквизит_ВидДеятельности.ПередВыгрузкой ПКО запишем: Параметры.Вставить("ДопРеквизит_ВидДеятельности", Источник.ОсновнойВидДеятельности);Настройка загрузки (в приемнике):
В обработчике ПослеЗагрузки ПКО нам нужно найти ссылку на дополнительный реквизит и записать значение. Проанализируем ситуацию: в УТ 11.5 для работы со свойствами рекомендуется использовать программный интерфейс БСП.
// Пытаемся найти свойство в базе-приемнике
СвойствоСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Вид деятельности (Контрагенты)");
Если Не СвойствоСсылка.Пустая() И ПараметрыОбъекта <> Неопределено Тогда
ЗначениеВидаДеятельности = ПараметрыОбъекта.Получить("ДопРеквизит_ВидДеятельности");
Если ЗначениеЗаполнено(ЗначениеВидаДеятельности) Тогда
// Ищем строку в ТЧ или добавляем новую
СтрокаДопРеквизита = Объект.ДополнительныеРеквизиты.Найти(СвойствоСсылка, "Свойство");
Если СтрокаДопРеквизита = Неопределено Тогда
СтрокаДопРеквизита = Объект.ДополнительныеРеквизиты.Добавить();
СтрокаДопРеквизита.Свойство = СвойствоСсылка;
КонецЕсли;
СтрокаДопРеквизита.Значение = ЗначениеВидаДеятельности;
КонецЕсли;
КонецЕсли;
1. Привязка к Наборам свойств
В УТ 11.5 недостаточно просто заполнить табличную часть. Важно, чтобы переносимое свойство было включено в соответствующий НаборДополнительныхРеквизитовИСведений (например, «Справочник "Контрагенты"»). Например, при работе со справочником контрагентов стоит помнить, что структура папок покупателей из УТ 10.3 может быть перенесена в Бизнес-регионы, что также потребует корректной настройки наборов свойств.
2. Особенности поиска свойств
Поиск по наименованию (НайтиПоНаименованию) в обработчиках — это «плохой тон», так как пользователь может изменить имя реквизита. Рассмотрим более надежный способ — использование GUID. Выясним уникальный идентификатор созданного свойства в УТ 11.5 и используем его:
СвойствоСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.ПолучитьСсылку(Новый УникальныйИдентификатор("ваш-guid-свойства"));
3. Типы данных «Дополнительное значение»
Если в УТ 11.5 ваш дополнительный реквизит имеет тип «Дополнительное значение», это означает, что значениями являются элементы специального подчиненного справочника ЗначенияСвойствОбъектов. Если ваша задача включает не только реквизиты, но и полную выгрузку остатков и документов с учетом характеристик и серий, то правильная типизация доп. реквизитов станет критически важной для корректного отображения данных в отчетах.
Мы рассмотрели два основных подхода к переносу дополнительных реквизитов. Первый способ (через КоллекцияОбъектов) более универсален для КД 2.1 и позволяет переносить сразу множество свойств одной таблицей. Второй способ (через ПослеЗагрузки) дает больше контроля и позволяет использовать встроенные механизмы конфигурации-приемника. В сложных случаях, когда требуется, например, выгрузка остатков и цен номенклатуры из УТ 10.3 в УТ 11.5 через COM (поможет обработка выгрузки остатков и цен из УТ 10.3 в УТ 11.5 через COM), данные методы могут комбинироваться для достижения максимальной точности переноса.