Добавить в корзинуПозвонить
Найти в Дзене

Загрузка номенклатуры контрагентов в УТ 11, КА 2, ERP 2

Представьте ситуацию: поставщик присылает Excel-файл на 3 000 позиций со своими артикулами, своими единицами измерения и своими названиями. Вам нужно всё это загрузить в 1С, сопоставить с вашей номенклатурой и при этом не сойти с ума. Знакомо? Тогда эта статья для вас. Загрузка номенклатуры контрагентов — одна из самых частых задач в проектах на УТ 11, КА 2 и ERP 2. Казалось бы, в платформе есть механизм соответствия номенклатуры контрагентов, всё должно работать из коробки. Но на практике каждый второй проект упирается в нюансы: нестандартные форматы файлов, дублирование позиций, неправильные единицы измерения, отсутствие штрихкодов. Разберём всё по порядку — от теории до рабочего кода. В 1С:УТ 11, КА 2 и ERP 2 есть специальный механизм — «Номенклатура контрагентов». Это таблица соответствий: артикул поставщика → ваша номенклатура. Хранится в регистре сведений «Номенклатура контрагентов» и позволяет автоматически подставлять вашу номенклатуру при вводе документов от поставщика. Зачем
Оглавление
Загрузка номенклатуры 1С
Загрузка номенклатуры 1С

Загрузка номенклатуры контрагентов в УТ 11, КА 2, ERP 2: полный разбор с кодом и примерами

Представьте ситуацию: поставщик присылает Excel-файл на 3 000 позиций со своими артикулами, своими единицами измерения и своими названиями. Вам нужно всё это загрузить в 1С, сопоставить с вашей номенклатурой и при этом не сойти с ума. Знакомо? Тогда эта статья для вас.

Загрузка номенклатуры контрагентов — одна из самых частых задач в проектах на УТ 11, КА 2 и ERP 2. Казалось бы, в платформе есть механизм соответствия номенклатуры контрагентов, всё должно работать из коробки. Но на практике каждый второй проект упирается в нюансы: нестандартные форматы файлов, дублирование позиций, неправильные единицы измерения, отсутствие штрихкодов. Разберём всё по порядку — от теории до рабочего кода.

Зачем вообще нужна номенклатура контрагентов и как она устроена

В 1С:УТ 11, КА 2 и ERP 2 есть специальный механизм — «Номенклатура контрагентов». Это таблица соответствий: артикул поставщика → ваша номенклатура. Хранится в регистре сведений «Номенклатура контрагентов» и позволяет автоматически подставлять вашу номенклатуру при вводе документов от поставщика.

Зачем это нужно на практике? Вот реальный кейс: торговая компания работает с 15 поставщиками электроники. Каждый поставщик называет один и тот же товар по-своему. Samsung Galaxy S25 у одного поставщика — «Смартфон Samsung SM-S931B», у другого — «Samsung Galaxy S25 128Gb Black», у третьего вообще просто «S25/128/BLK». Без механизма соответствия номенклатуры менеджер при каждом приходе тратит 2-3 часа на ручное сопоставление — и это только по одному поставщику.

Механизм работает так:

  • В регистр сведений записывается связка: контрагент + артикул контрагента + ваша номенклатура + характеристика + единица измерения контрагента + коэффициент пересчёта
  • При загрузке документа (например, поступления товаров) система ищет артикул поставщика в этом регистре
  • Если находит — автоматически подставляет вашу номенклатуру
  • Если не находит — предлагает создать новое соответствие или выбрать вручную

Проблема в том, что этот регистр нужно сначала заполнить. И вот тут начинается самое интересное.

Штатные инструменты загрузки: что есть в коробке

Прежде чем писать код, давайте разберёмся, что предлагает 1С из коробки. В УТ 11, КА 2 и ERP 2 есть несколько способов заполнить соответствие номенклатуры контрагентов.

Ручное заполнение через карточку номенклатуры

В карточке номенклатуры есть закладка «Номенклатура контрагентов». Там можно вручную добавить артикулы от разных поставщиков. Подходит для небольшого количества позиций — скажем, до 50-100 штук. Если позиций больше, это превращается в пытку.

Загрузка через обработку «Загрузка данных из табличного документа»

Штатная обработка из состава конфигурации. Позволяет загружать данные в регистры сведений напрямую. Теоретически можно загрузить и номенклатуру контрагентов. На практике — нужно очень точно настроить колонки, и обработка не умеет автоматически создавать новую номенклатуру, если её нет в базе.

Загрузка через EDI и электронный документооборот

Если поставщик работает через EDI (СФЕРА, Synerdocs и т.д.), соответствие может формироваться автоматически при первом обмене. Это идеальный вариант для крупных сетей и производителей, но доступен далеко не всем.

Загрузка через механизм «Помощник сопоставления номенклатуры»

В ERP 2 и КА 2 есть встроенный помощник сопоставления — он появляется при загрузке документов через обмен данными. Умеет искать соответствия по артикулу, наименованию, штрихкоду. Неплохой инструмент, но требует настройки и не всегда справляется с «грязными» данными от поставщиков.

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

Структура данных: что нужно знать перед написанием кода

Прежде чем лезть в конфигуратор, разберёмся со структурой регистра сведений «Номенклатура контрагентов». Это периодический регистр с независимой периодичностью.

Основные измерения регистра:

  • Контрагент — ссылка на справочник «Контрагенты»
  • АртикулКонтрагента — строка, артикул товара в системе поставщика

Ресурсы регистра:

  • Номенклатура — ссылка на справочник «Номенклатура»
  • Характеристика — ссылка на справочник «Характеристики номенклатуры»
  • ЕдиницаИзмерения — ссылка на классификатор единиц измерения
  • Коэффициент — число, коэффициент пересчёта единиц
  • НаименованиеКонтрагента — строка, как контрагент называет этот товар

Важный момент: в УТ 11 и КА 2 структура регистра может немного отличаться от ERP 2 — особенно в части характеристик и дополнительных реквизитов. Всегда проверяйте структуру в конкретной конфигурации через «Конфигуратор → Регистры сведений → НоменклатураКонтрагентов».

Пишем обработку загрузки: пошаговый разбор кода

Разберём создание обработки для загрузки номенклатуры контрагентов из Excel-файла. Обработка будет:

  • Читать Excel через табличный документ
  • Искать номенклатуру по артикулу или наименованию
  • При необходимости создавать новые позиции номенклатуры
  • Записывать соответствие в регистр сведений
  • Формировать протокол загрузки

Форма обработки и основная процедура

Начнём с клиентской процедуры, которая запускает загрузку:

&НаКлиенте
Процедура ЗагрузитьДанные(Команда)
    ОчиститьСообщения();

    Если НЕ ЗначениеЗаполнено(Объект.Контрагент) Тогда
        Сообщить("Укажите контрагента!", СтатусСообщения.Важное);
        Возврат;
    КонецЕсли;

    Если НЕ ЗначениеЗаполнено(Объект.ИмяФайла) Тогда
        Сообщить("Укажите файл для загрузки!", СтатусСообщения.Важное);
        Возврат;
    КонецЕсли;

    ЗагрузитьДанныеНаСервере();
КонецПроцедуры
Теперь серверная процедура, которая делает основную работу:
&НаСервере
Процедура ЗагрузитьДанныеНаСервере()

    // Читаем файл Excel в табличный документ
    ТабДок = Новый ТабличныйДокумент;

    Попытка
        ТабДок.Прочитать(Объект.ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
    Исключение
        Сообщить("Ошибка чтения файла: " + ОписаниеОшибки(), СтатусСообщения.Важное);
        Возврат;
    КонецПопытки;

    КолонкаАртикул = Объект.НомерКолонкиАртикул;
    КолонкаНаименование = Объект.НомерКолонкиНаименование;
    КолонкаЕдиница = Объект.НомерКолонкиЕдиница;
    НачальнаяСтрока = Объект.НачальнаяСтрока;

    СчётчикУспех = 0;
    СчётчикОшибок = 0;
    СчётчикСоздано = 0;

    Для НомСтр = НачальнаяСтрока По ТабДок.ВысотаТаблицы Цикл

        АртикулКонтрагента = СокрЛП(ТабДок.ПолучитьОбласть(НомСтр, КолонкаАртикул).ТекущаяОбласть.Текст);
        НаименованиеКонтрагента = СокрЛП(ТабДок.ПолучитьОбласть(НомСтр, КолонкаНаименование).ТекущаяОбласть.Текст);

        Если АртикулКонтрагента = "" Тогда
            Продолжить;
        КонецЕсли;

        // Ищем номенклатуру
        НайденнаяНоменклатура = НайтиНоменклатуру(АртикулКонтрагента, НаименованиеКонтрагента);

        Если НайденнаяНоменклатура = Неопределено И Объект.СоздаватьНоменклатуру Тогда
            НайденнаяНоменклатура = СоздатьНоменклатуру(НаименованиеКонтрагента, АртикулКонтрагента);
            СчётчикСоздано = СчётчикСоздано + 1;
        КонецЕсли;

        Если НайденнаяНоменклатура <> Неопределено Тогда
            ЗаписатьСоответствие(Объект.Контрагент, АртикулКонтрагента, НаименованиеКонтрагента, НайденнаяНоменклатура);
            СчётчикУспех = СчётчикУспех + 1;
        Иначе
            Сообщить("Строка " + НомСтр + ": не найдена номенклатура для артикула " + АртикулКонтрагента);
            СчётчикОшибок = СчётчикОшибок + 1;
        КонецЕсли;

    КонецЦикла;

    Сообщить("Загрузка завершена. Успешно: " + СчётчикУспех + ", создано: " + СчётчикСоздано + ", ошибок: " + СчётчикОшибок);

КонецПроцедуры

Функция поиска номенклатуры

Самая важная часть — поиск существующей номенклатуры. Ищем сначала по артикулу, потом по наименованию — это даёт лучший результат на практике:

&НаСервере
Функция НайтиНоменклатуру(АртикулКонтрагента, НаименованиеКонтрагента)

    // Сначала ищем по артикулу
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 1
    | Номенклатура.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    | Номенклатура.Артикул = &Артикул
    | И НЕ Номенклатура.ПометкаУдаления";

    Запрос.УстановитьПараметр("Артикул", АртикулКонтрагента);
    РезультатЗапроса = Запрос.Выполнить();

    Если НЕ РезультатЗапроса.Пустой() Тогда
        Возврат РезультатЗапроса.Выгрузить()[0].Ссылка;
    КонецЕсли;

    // Если не нашли по артикулу — ищем по наименованию
    Запрос.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 1
    | Номенклатура.Ссылка КАК Ссылка
    |ИЗ
    | Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    | Номенклатура.Наименование ПОДОБНО &Наименование
    | И НЕ Номенклатура.ПометкаУдаления";

    Запрос.УстановитьПараметр("Наименование", "%" + НаименованиеКонтрагента + "%");
    РезультатЗапроса = Запрос.Выполнить();

    Если НЕ РезультатЗапроса.Пустой() Тогда
        Возврат РезультатЗапроса.Выгрузить()[0].Ссылка;
    КонецЕсли;

    Возврат Неопределено;

КонецФункции

Функция записи соответствия в регистр

Теперь самое главное — запись в регистр сведений «Номенклатура контрагентов»:

&НаСервере
Процедура ЗаписатьСоответствие(Контрагент, АртикулКонтрагента, НаименованиеКонтрагента, Номенклатура)

    МенеджерЗаписи = РегистрыСведений.НоменклатураКонтрагентов.СоздатьМенеджерЗаписи();
    МенеджерЗаписи.Контрагент = Контрагент;
    МенеджерЗаписи.АртикулКонтрагента = АртикулКонтрагента;
    МенеджерЗаписи.Номенклатура = Номенклатура;
    МенеджерЗаписи.НаименованиеКонтрагента = НаименованиеКонтрагента;
    МенеджерЗаписи.Период = ТекущаяДата();

    Попытка
        МенеджерЗаписи.Записать(Истина);
    Исключение
        Сообщить("Ошибка записи соответствия для артикула " + АртикулКонтрагента + ": " + ОписаниеОшибки());
    КонецПопытки;

КонецПроцедуры

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

Типичные грабли и как их обойти

За годы практики накопился целый зоопарк проблем, с которыми сталкиваются при загрузке номенклатуры контрагентов. Разберём самые болезненные.

Проблема 1: «Грязные» артикулы от поставщиков

Поставщики — люди творческие. Один и тот же артикул может выглядеть как «ABC-123», «ABC 123», «abc123», «АВС-123» (с русскими буквами!) и «ABC–123» (с длинным тире). Перед поиском всегда нормализуйте артикул:

Функция НормализоватьАртикул(Артикул)

    // Убираем пробелы по краям
    Результат = СокрЛП(Артикул);

    // Переводим в верхний регистр
    Результат = ВРег(Результат);

    // Убираем двойные пробелы
    Пока Найти(Результат, " ") > 0 Цикл
        Результат = СтрЗаменить(Результат, " ", " ");
    КонецЦикла;

    // Заменяем длинное тире на обычный дефис
    Результат = СтрЗаменить(Результат, "–", "-");
    Результат = СтрЗаменить(Результат, "—", "-");

    Возврат Результат;

КонецФункции

Проблема 2: Единицы измерения и коэффициенты

Поставщик продаёт товар в упаковках по 12 штук, а у вас в базе единица измерения — штука. Если не указать коэффициент пересчёта, при загрузке документов количество будет в 12 раз больше реального. Реальный случай из практики: компания загрузила 500 позиций без коэффициентов, провела приёмку, а потом обнаружила расхождение с реальным складом на сумму около 2,3 млн рублей. Пришлось всё перепроводить вручную.

Поэтому в форме обработки обязательно предусмотрите колонку для единицы измерения контрагента и коэффициента. А в регистр пишите так:

МенеджерЗаписи.ЕдиницаИзмерения = НайтиЕдиницуИзмерения(НаименованиеЕдиницы);
МенеджерЗаписи.Коэффициент = ?(Коэффициент = 0, 1, Коэффициент);

Проблема 3: Характеристики номенклатуры

В УТ 11 и ERP 2 активно используются характеристики номенклатуры. Например, «Футболка» может иметь характеристики «Размер: S», «Размер: M», «Размер: L». Поставщик может присылать каждый размер отдельным артикулом, а у вас в базе это одна номенклатура с разными характеристиками.

Для таких случаев нужно расширить логику поиска и добавить в регистр заполнение поля «Характеристика». Это усложняет обработку, но без этого корректная автоподстановка работать не будет.

Проблема 4: Дубли в справочнике номенклатуры

Классика жанра: в базе есть «Болт М8х40» и «Болт М8*40», «Труба ПВХ 50мм» и «Труба ПВХ D50». Поиск по наименованию находит первый попавшийся вариант, который может оказаться неверным. Перед массовой загрузкой обязательно проводите дедупликацию справочника номенклатуры. Иначе соответствия будут записаны неправильно, и потом придётся разбираться, почему при приёмке подставляется не тот товар.

Особенности для ERP 2 и КА 2: на что обратить внимание

ERP 2 и КА 2 — конфигурации более сложные, чем УТ 11. Есть несколько важных отличий, которые влияют на загрузку номенклатуры контрагентов.

Расширенная аналитика и виды номенклатуры

В ERP 2 есть понятие «Вид номенклатуры» — это группировка по типу товара с настройками учёта. При создании новой номенклатуры через обработку обязательно указывайте вид номенклатуры, иначе новый элемент создастся с пустым видом, что потом вызовет проблемы при проведении документов.

Функция СоздатьНоменклатуру(Наименование, Артикул)

    НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
    НовыйЭлемент.Наименование = Наименование;
    НовыйЭлемент.Артикул = Артикул;
    НовыйЭлемент.ВидНоменклатуры = Объект.ВидНоменклатуры; // Берём из параметров обработки
    НовыйЭлемент.ЕдиницаИзмерения = Объект.ЕдиницаИзмеренияПоУмолчанию;
    НовыйЭлемент.СтавкаНДС = Объект.СтавкаНДС;

    Попытка
        НовыйЭлемент.Записать();
        Возврат НовыйЭлемент.Ссылка;
    Исключение
        Сообщить("Ошибка создания номенклатуры '" + Наименование + "': " + ОписаниеОшибки());
        Возврат Неопределено;
    КонецПопытки;

КонецФункции

Сегменты номенклатуры и ценообразование

В ERP 2 номенклатура может быть включена в ценовые сегменты, которые влияют на автоматическое ценообразование. Если вы массово создаёте новую номенклатуру, не забудьте потом добавить её в нужные сегменты. Иначе новые товары не попадут в прайс-листы и цены для них не будут рассчитываться автоматически.

Производительность при больших объёмах

Если нужно загрузить 10 000+ позиций, построчная запись через менеджер записи будет работать медленно — примерно 500-800 записей в минуту. Для больших объёмов используйте наборы записей:

НаборЗаписей = РегистрыСведений.НоменклатураКонтрагентов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Контрагент.Установить(Контрагент);

// Заполняем набор из подготовленной таблицы значений
Для Каждого СтрокаТЗ Из ТаблицаДляЗаписи Цикл
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Контрагент = Контрагент;
    НоваяЗапись.АртикулКонтрагента = СтрокаТЗ.Артикул;
    НоваяЗапись.Номенклатура = СтрокаТЗ.Номенклатура;
    НоваяЗапись.НаименованиеКонтрагента = СтрокаТЗ.Наименование;
    НоваяЗапись.Период = ТекущаяДата();
КонецЦикла;

НаборЗаписей.Записать();

Набор записей работает в 5-10 раз быстрее построчной записи — особенно заметно на объёмах от 5 000 позиций. Правда, здесь есть нюанс: набор записей с отбором по контрагенту при записи сначала удалит все старые записи по этому контрагенту, а потом запишет новые. Поэтому убедитесь, что в таблице для записи есть все актуальные данные, а не только новые строки.

Практический кейс: загрузка 4 500 позиций для дистрибьютора

Расскажу о реальном проекте (детали изменены). Дистрибьютор строительных материалов, работает на ERP 2. Три основных поставщика, каждый присылает прайс-лист раз в неделю. Суммарно — около 4 500 активных позиций номенклатуры.

До автоматизации процесс выглядел так:

  • Менеджер получает Excel от поставщика
  • Вручную ищет каждую позицию в 1С
  • Создаёт документ поступления, вбивая всё руками
  • На обработку одного прайса уходило 3-4 часа
  • Три поставщика × 4 часа = 12 часов в неделю только на ввод данных

После внедрения обработки загрузки:

  • Первоначальная загрузка соответствий заняла 2 дня (с проверкой и ручным разбором несопоставленных позиций)
  • Теперь обновление прайса занимает 15-20 минут: загрузил файл, проверил несопоставленные позиции, нажал «Загрузить»
  • Экономия: около 10 часов в неделю, или 40 часов в месяц
  • При стоимости рабочего времени менеджера 800 рублей в час — это 32 000 рублей экономии ежемесячно
  • Обработка окупилась за первый месяц использования

Отдельно стоит отметить качество данных: раньше при ручном вводе ошибки в количестве или номенклатуре случались примерно в 3-5% документов. После автоматизации — ноль ошибок по вине человеческого фактора при вводе.

Что делать, если соответствие не находится: организация ручной разборки

Никакой алгоритм не даст 100% сопоставления с первого раза. Особенно если у поставщика нет артикулов, а только наименования, и эти наименования написаны с ошибками или сокращениями. Хорошая обработка должна не просто падать с ошибкой, а формировать список несопоставленных позиций для ручной разборки.

Оптимальный сценарий работы:

  • Обработка загружает всё, что смогла сопоставить автоматически
  • Несопоставленные позиции выводятся в отдельную таблицу на форме
  • Пользователь видит артикул и наименование от поставщика, рядом — поле для выбора номенклатуры из базы
  • После ручного сопоставления нажимает «Записать выбранные» — и эти позиции тоже попадают в регистр
  • В следующий раз эти позиции уже найдутся автоматически

Такой подход позволяет за 2-3 итерации загрузки достичь 95-98% автоматического сопоставления. Оставшиеся 2-5% — это обычно новые позиции, которых ещё нет в базе.

Итоги: когда делать самому, а когда звать специалиста

Загрузка номенклатуры контрагентов — задача вполне решаемая своими силами, если у вас есть базовые навыки разработки в 1С. Типичная обработка пишется за 8-16 часов, включая тестирование. Это если у вас простой случай: один поставщик, стандартный Excel, без характеристик и сложных единиц измерения.

Когда лучше привлечь специалиста:

  • Много поставщиков с разными форматами файлов — нужна универсальная обработка с настраиваемым маппингом колонок
  • Используются характеристики номенклатуры — логика усложняется в несколько раз
  • Нужна интеграция с EDI или порталом поставщика — это уже полноценный интеграционный проект
  • База сильно кастомизирована — стандартные решения могут не подойти
  • Объём данных более 50 000 позиций — нужна оптимизация производительности

Стоимость разработки такой обработки у опытного специалиста — от 15 000 до 60 000 рублей в зависимости от сложности. Звучит как деньги, но если посчитать, сколько часов в месяц тратится на ручной ввод данных — окупаемость обычно составляет 1-3 месяца.

Главное правило: не экономьте на первоначальной настройке соответствий. Потраченные один раз 2-3 дня на качественную загрузку сэкономят сотни часов в будущем. И не забывайте поддерживать регистр в актуальном состоянии — когда поставщик меняет артикулы или добавляет новые позиции, нужно оперативно обновлять соответствия.

Если вам нужна помощь с загрузкой номенклатуры контрагентов, разработкой обработки под ваш формат данных или любой другой задачей в 1С — заходите на koderion.ru. Это биржа проверенных специалистов по 1С: можно найти разработчика под конкретную задачу, сравнить цены и отзывы, и не тратить время на поиск через сарафанное радио. Задачи берутся в работу быстро — большинство специалистов откликаются в течение нескольких часов.