При загрузке данных из внешних файлов Excel с помощью стандартной обработки «Загрузка данных из табличного документа» (с диска ИТС) пользователи 1С:Управление нашей фирмой (УНФ) часто сталкиваются со следующей проблемой: сами элементы справочника ХарактеристикиНоменклатуры создаются с нужными наименованиями (например, «S, Красный»), однако табличная часть дополнительных реквизитов остается пустой. В результате наименование характеристики есть, а составляющие её свойства (цвет, размер) не привязаны.
Разберем, почему так происходит, как устроена хранение свойств в конфигурации и какими способами можно программно или штатно решить эту задачу.
Выясним, почему универсальная обработка с ИТС не может корректно зафиксировать свойства характеристики:
ДополнительныеРеквизиты справочника ХарактеристикиНоменклатуры. Универсальная обработка загрузки без специальной настройки не умеет адресовать и сопоставлять данные для этой табличной части.ЗначенияСвойствОбъектов. Для каждой характеристики важно отслеживать тип её владельца:
КатегорииНоменклатуры.Номенклатура.Если характеристики уже созданы или их загрузка происходит в собственном алгоритме, заполнение дополнительных реквизитов необходимо выполнять через вызов экспортных процедур библиотеки стандартных подсистем (БСП) и модулей 1С:УНФ.
Рассмотрим пример кода, который вызывается при обработке и записи объекта характеристики:
// Перед записью характеристики вызывается проверка заполнения свойств
Отказ = Ложь;
КатегорииНоменклатурыСервер.ПроверкаЗаполненияСвойстПерезЗаписью(ХарактеристикаОбъект, Отказ);
Если Не Отказ Тогда
// Записываем объект характеристики
ХарактеристикаОбъект.Записать();
ХарактеристикаСсылка = ХарактеристикаОбъект.Ссылка;
// Формируем массив структур с дополнительными реквизитами
МассивСтруктур = Новый Массив;
СтруктураСвойства = Новый Структура;
СтруктураСвойства.Вставить("Свойство", ДопРеквизит); // Ссылка из ПВХ "Дополнительные реквизиты и сведения"
СтруктураСвойства.Вставить("Значение", ЗначениеДопРеквизита); // Ссылка из справочника "Значения свойств объектов"
МассивСтруктур.Добавить(СтруктураСвойства);
// Записываем значения свойств у объекта через штатную подсистему
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(ХарактеристикаСсылка, МассивСтруктур);
КонецЕсли;
Проанализируем ключевые шаги приведенного алгоритма:
КатегорииНоменклатурыСервер.ПроверкаЗаполненияСвойстПерезЗаписью выполняет проверки на обязательность и корректность состава доп. реквизитов для данного владельца.УправлениеСвойствами.ЗаписатьСвойстваУОбъекта гарантирует корректную запись данных в табличную часть ДополнительныеРеквизиты с учетом всех логических связей системы.Если нет возможности дорабатывать код загрузки, рекомендуем воспользоваться встроенным в 1С:УНФ механизмом импорта данных:
ЗначенияСвойствОбъектов и заполнит табличную часть характеристики.