Загрузка номенклатуры в информационные базы 1С из файлов формата Excel — одна из самых частых задач при запуске новой системы или обновлении каталога товаров из интернет-магазина. Если импорт простой номенклатуры без дополнительных разрезов учета обычно не вызывает затруднений, то загрузка позиций с характеристиками (такими как цвет, размер, объем, материал) часто ставит в тупик даже опытных специалистов. Проанализируем, почему так происходит, и разберем по шагам, как решить эту задачу как стандартными, так и программными методами.
Прежде чем перейти к практике, разберем структуру данных в 1С. В типовых конфигурациях (например, «Управление торговлей» ред. 10.3 или ред. 11) связь номенклатуры и характеристик реализована через механизм подчиненных справочников и регистров сведений:
Справочники.ХарактеристикиНоменклатуры). Каждая характеристика жестко привязана к своему владельцу (конкретному товару или виду номенклатуры) и имеет текстовое наименование (например, «Красная, XL»).РегистрСведений.ЗначенияСвойствОбъектов (в старых редакциях) или табличная часть дополнительных реквизитов (в новых редакциях на управляемых формах). Именно здесь хранится информация о том, что характеристика «Красная, XL» состоит из свойства «Цвет» со значением «Красный» и свойства «Размер» со значением «XL».Из-за такой разветвленной структуры обычная «плоская» таблица Excel не может быть загружена за одно простое сопоставление колонок. Ниже мы детально рассмотрим три наиболее эффективных способа загрузки этих данных.
Выясним, как загрузить данные, используя стандартную обработку «Загрузка данных из табличного документа». Этот способ отлично подходит для старых конфигураций на обычных формах (например, УТ 10.3, УПП 1.3, Розница 1.0) и не требует написания кода. Мы разобьем импорт на несколько логических этапов.
Шаг 1. Подготовка исходного файла Excel
Для успешного сопоставления наш файл должен содержать четкую структуру. Предположим, у нас есть следующие колонки:
Шаг 2. Загрузка справочника «Номенклатура»
Прежде чем создавать характеристики, необходимо загрузить в базу сами товары. Откроем обработку «Загрузка данных из табличного документа», выберем режим загрузки в справочник Номенклатура, сопоставим колонки А и B с реквизитами «Артикул» и «Наименование», после чего выполним загрузку элементов.
Шаг 3. Первый проход: Создание элементов характеристик
Теперь создадим пустые оболочки характеристик и свяжем их с товарами. Настроим обработку следующим образом:
ХарактеристикиНоменклатуры (или Характеристики номенклатуры).Шаг 4. Второй проход: Заполнение значений свойств
Чтобы отчеты и подбор в документах работали корректно, заполним свойства в регистре сведений. Настроим обработку:
ЗначенияСвойствОбъектов.Таким образом, за два-три последовательных прохода мы полностью перенесем всю структуру данных в базу 1С.
Рассмотрим более продвинутый вариант. В стандартной обработке «Загрузка данных из табличного документа» у каждого поля есть настройка способа поиска. Если выбрать вариант «Вычислить», мы получим возможность написать собственный код на встроенном языке 1С. Это позволит автоматически создавать и связывать всю цепочку данных за один единственный проход файла Excel.
Проанализируем пример кода, который можно прописать в поле поиска характеристики:
// Получаем текстовые данные из текущей строки файла Excel
ИмяНоменклатуры = ТекущаяСтрока["НаименованиеТовара"];
АртикулТовара = ТекущаяСтрока["Артикул"];
ИмяХарактеристики = ТекущаяСтрока["Характеристика"];
// Выполняем поиск номенклатуры-владельца в базе данных
СсылкаНоменклатуры = Справочники.Номенклатура.НайтиПоАртикулу(АртикулТовара);
Если НЕ ЗначениеЗаполнено(СсылкаНоменклатуры) Тогда
СсылкаНоменклатуры = Справочники.Номенклатура.НайтиПоНаименованию(ИмяНоменклатуры);
КонецЕсли;
Если ЗначениеЗаполнено(СсылкаНоменклатуры) Тогда
// Ищем, создана ли уже такая характеристика для этого товара
СсылкаХарактеристики = Справочники.ХарактеристикиНоменклатуры.НайтиПоНаименованию(ИмяХарактеристики, Истина, , СсылкаНоменклатуры);
// Если характеристики еще нет, создаем ее программно прямо во время импорта
Если НЕ ЗначениеЗаполнено(СсылкаХарактеристики) Тогда
НоваяХарактеристика = Справочники.ХарактеристикиНоменклатуры.СоздатьЭлемент();
НоваяХарактеристика.Владелец = СсылкаНоменклатуры;
НоваяХарактеристика.Наименование = ИмяХарактеристики;
Попытка
НоваяХарактеристика.Записать();
СсылкаХарактеристики = НоваяХарактеристика.Ссылка;
// Здесь же можно сразу программно заполнить регистр сведений "ЗначенияСвойствОбъектов"
// Для каждого свойства (например, Цвет, Размер) создаем запись в регистре
МенеджерЗаписи = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Объект = СсылкаХарактеристики;
МенеджерЗаписи.Свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Размер");
МенеджерЗаписи.Значение = ТекущаяСтрока["РазмерЗначение"];
МенеджерЗаписи.Записать();
Исключение
ОбщегоНазначения.СообщитьИнформацию("Ошибка создания характеристики: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Результат = СсылкаХарактеристики;
Иначе
Результат = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
КонецЕсли;
Использование этого кода позволяет полностью исключить ручную рутину и загрузить сложнейшие файлы со множеством характеристик в автоматическом режиме за несколько секунд.
Если вы работаете в современных конфигурациях на управляемых формах и платформе 1С 8.3, процесс существенно упростился благодаря встроенному помощнику. Разберем, как им пользоваться:
При импорте характеристик программисты и аналитики часто сталкиваются со скрытыми проблемами. Выделим ключевые моменты, которые необходимо контролировать:
Штрихкоды, обязательно указывая в измерениях и ссылку на номенклатуру, и ссылку на конкретную характеристику.Таким образом, мы детально изучили методы загрузки номенклатуры с характеристиками из таблиц Excel. Выбор конкретного способа зависит от вашей конфигурации 1С и регулярности задачи: для разового переноса вполне достаточно стандартного двухпроходного метода, а для регулярного обновления каталога лучше использовать встроенный современный помощник или написать скрипт автосоздания через механизм «Вычислить».