Как загрузить номенклатуру с дополнительными реквизитами из Excel в 1С:УНФ 3.0?

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет Торговля и дистрибуция
← На главную

Перенос объектов 1С и загрузка данных из внешних файлов — одна из самых частых задач при внедрении или обновлении базы данных 1С:Управление нашей фирмой (УНФ) 3.0. Особую сложность вызывает перенос не только базовых полей (наименование, артикул, цена), но и дополнительных реквизитов, которые в УНФ тесно связаны с категориями номенклатуры. В этой статье мы подробно разберем, как эффективно решить эту задачу, используя как стандартные инструменты, так и программные методы.

Способ 1. Использование встроенного помощника «Загрузка данных из файла»

Прежде чем приступать к написанию собственного кода или покупке дорогостоящих обработок, проанализируем возможности современной платформы 1С:Предприятие 8.3 и конфигурации УНФ 3.0. В состав Библиотеки стандартных подсистем (БСП), на которой построена УНФ, входит мощный механизм загрузки.

Разберем по шагам, как воспользоваться штатным средством:

  1. Перейдем в раздел Компания — Администрирование — Обслуживание (или сразу через меню «Все функции/Функции для технического специалиста» найдем обработку ЗагрузкаДанныхИзФайла).
  2. Выберем объект для загрузки: Справочник «Номенклатура».
  3. Подготовим файл Excel. Важно понимать, что дополнительные реквизиты в УНФ часто назначаются для конкретных Категорий номенклатуры. Чтобы система «увидела» колонки с доп. реквизитами, рекомендуется сначала загрузить (или создать вручную) категории, а затем в файле загрузки номенклатуры обязательно указать колонку «Категория», учитывая отображение по всей иерархии.
  4. На этапе сопоставления колонок нажмем кнопку настройки. Если доп. реквизит является общим для всей номенклатуры или вы указали категорию, система позволит выбрать соответствующее поле из списка.

Важный нюанс: Если ваш дополнительный реквизит имеет тип «Дополнительное значение» (выпадающий список), штатный помощник умеет автоматически создавать новые значения, если их еще нет в базе. Это избавляет от необходимости предварительного заполнения словарей.

Способ 2. Программная загрузка дополнительных реквизитов

Если штатный механизм не подходит (например, требуется сложная логика очистки данных или специфический поиск), используя генератор структуры метаданных, рассмотрим, как программно работать с доп. реквизитами. В УНФ 3.0 они хранятся в табличной части ДополнительныеРеквизиты каждого объекта номенклатуры.

Проанализируем структуру этой табличной части. Она содержит два основных поля: Свойство (ссылка на План видов характеристик ДополнительныеРеквизитыИСведения) и Значение.

Рассмотрим пример кода для записи дополнительного реквизита в объект номенклатуры:


// Предположим, у нас уже есть ссылка на номенклатуру и мы получили объект для редактирования
ОбъектНоменклатура = СсылкаНаНоменклатуру.ПолучитьОбъект();

// Находим нужное свойство по наименованию (лучше искать по ГУИД или коду)
СвойствоСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Цвет (Номенклатура)");

Если Не СвойствоСсылка.Пустая() Тогда
    // Ищем, есть ли уже такая строка в ТЧ
    СтрокаРеквизита = ОбъектНоменклатура.ДополнительныеРеквизиты.Найти(СвойствоСсылка, "Свойство");
    
    Если СтрокаРеквизита = Неопределено Тогда
        СтрокаРеквизита = ОбъектНоменклатура.ДополнительныеРеквизиты.Добавить();
        СтрокаРеквизита.Свойство = СвойствоСсылка;
    КонецЕсли;
    
    // Устанавливаем значение (учитывайте тип данных свойства!)
    СтрокаРеквизита.Значение = "Красный"; 
    
    ОбъектНоменклатура.Записать();
КонецЕсли;

При написании собственной обработки загрузки, как упоминалось в обсуждении на форуме, важно уделить внимание типизации. Если доп. реквизит — это ссылка на «Дополнительное значение», то в поле Значение нельзя просто записать строку «Красный». Нужно сначала найти или создать элемент в справочнике ЗначенияСвойствОбъектов, владельцем которого является наше Свойство.

Способ 3. Использование внешних универсальных обработок

Рассмотрим ситуацию, когда писать свой код некогда, а штатный функционал кажется неудобным. В сообществе 1С популярны решения вроде «Загрузка данных из табличного документа». Однако, как верно подметили участники форума, старые версии этой обработки (созданные под обычные формы) не поддерживают работу с табличными частями дополнительных реквизитов напрямую.

Выделим ключевые критерии выбора готовой обработки для УНФ 3.0:

Проблема «грязных» данных и символов

Выясним причину, по которой многие загрузки завершаются ошибкой. При работе с Excel-файлами от разных поставщиков мы часто сталкиваемся с нечитаемыми символами, лишними пробелами или невидимыми знаками переноса строки. Проанализируем, как минимизировать риск ошибок:

1. Очистка данных: Перед записью в базу обязательно используйте функцию СокрЛП() и, при необходимости, регулярные выражения для удаления спецсимволов.

2. Использование SpreadsheetDocument: При программном чтении файлов .xlsx лучше использовать встроенный объект 1С ТабличныйДокумент, загружая в него файл методом Прочитать(). Это работает быстрее, чем через COM-объект Excel, и стабильнее на серверных ОС (включая Linux).

Рекомендации по архитектуре загрузки

Проанализировав опыт участников обсуждения, мы можем составить «золотой стандарт» процесса загрузки:

  1. Сопоставление категорий: Сначала убедимся, что в УНФ созданы категории. Дополнительные реквизиты в УНФ — это не просто поля, они «принадлежат» категории. Если вы загрузите номенклатуру без категории, ее доп. реквизиты могут быть не видны в карточке товара, даже если они физически записаны в ТЧ.
  2. Поиск дублей: Всегда настраивайте поиск не только по наименованию, но и по Артикулу или Штрихкоду. Это позволит обновлять данные при повторных загрузках, а не создавать новые карточки.
  3. Логирование: Ваша обработка должна выводить протокол: сколько строк обработано, сколько создано, и в каких строках возникли ошибки (например, «Не удалось преобразовать значение '10.5 кг' в число»).

В заключение отметим, что для разовой загрузки в УНФ 3.0 вполне достаточно штатного помощника, если предварительно настроить категории и свойства. Для регулярной работы лучше один раз инвестировать время (от 3 до 8 часов, как оценивают эксперты) в создание расширения, которое будет учитывать специфику ваших файлов и бизнес-логику компании.

← На главную