Как настроить поиск товара по неполному весовому штрихкоду в 1С?

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

При обмене электронными накладными с поставщиками нередко возникает ситуация: в документе передается усеченный штрихкод из 7–8 цифр, а на физической упаковке нанесен полный 13-значный штрихкод стандарта EAN-13. При попытке сосканировать товар сканером система не может найти позицию в базе данных. Выясним причину такого поведения программы и разберем варианты решения задачи.

Анализ структуры штрихкода и причины проблемы

Штрихкоды, начинающиеся с префиксов диапазона 20–29 (например, 22), по международным стандартам GS1 выделены для внутренней маркировки весовой и штучной фасованной продукции. В таких кодах зашифрован не только сам товар, но и переменные параметры каждой упаковки.

Рассмотрим типовую структуру весового кода формата EAN-13:

  1. Префикс весового товара (2 знака): указывает системе, что штрихкод содержит вес или стоимость (например, 22).
  2. Код товара или PLU (5–6 знаков): уникальный идентификатор номенклатуры в учетной системе поставщика.
  3. Вес или фасовка (4–5 знаков): переменное значение фактического веса упаковки в граммах.
  4. Контрольный символ (1 знак): контрольная цифра, рассчитываемая по алгоритму Modulo 10 для проверки корректности считывания.

Поставщик не знает заранее вес каждой конкретной упаковки, отправляемой клиенту, поэтому в файлах электронных накладных указывает только базовую часть: префикс и артикул/код (те самые 7–8 знаков вида 22020151). Если записать эти неполные данные в регистр напрямую, сканер штрихкода при чтении физической этикетки выдаст все 13 цифр и не найдет соответствия.

Тип EAN-8 в данном случае неприменим, так как у стандарта EAN-8 собственное контрольное число, рассчитываемое по первым 7 знакам. Попытка записать 7–8 знаков как EAN-8 приведет к ошибке формата или невозможности считать код стандартным сканером.

Решение 1. Нормализация штрихкода при загрузке накладных

Самый правильный и надежный путь в типовых конфигурациях — приводить входящий неполный штрихкод к стандартному шаблону весового товара 1С. В типовых решениях (УТ, УТП, ERP, Комплексная автоматизация) весовые товары хранятся в регистре сведений Штрихкоды (или ШтрихкодыНоменклатуры) с нулевым блоком веса.

Разберем алгоритм по шагам:

  1. При загрузке строки накладной от поставщика определяем, что штрихкод начинается с весового префикса (например, 22).
  2. Дополняем значащую часть нулями на месте блока веса до 12 символов. Например, строка 22020151 дополняется четырьмя нулями: 220201510000.
  3. Рассчитываем 13-й контрольный символ по стандартному алгоритму EAN-13 и сохраняем результирующую строку (например, 2202015100000) в регистр сведений Штрихкоды.
  4. В карточке номенклатуры устанавливаем признак Весовой, а в параметрах учета настраиваем префикс весового товара (22) и длину кода номенклатуры.

Посмотрим на пример функции расчета контрольного символа EAN-13 на встроенном языке 1С:


Функция РассчитатьКонтрольныйСимволEAN13(Код12) Экспорт
    ЧетСумма = 0;
    НечетСумма = 0;
    
    Для НомерСимвола = 1 По 12 Цикл
        Символ = Число(Сред(Код12, НомерСимвола, 1));
        Если НомерСимвола % 2 = 0 Тогда
            ЧетСумма = ЧетСумма + Символ;
        Иначе
            НечетСумма = НечетСумма + Символ;
        КонецЕсли;
    КонецЦикла;
    
    Итого = НечетСумма + ЧетСумма * 3;
    Остаток = Итого % 10;
    
    Если Остаток = 0 Тогда
        Возврат 0;
    Иначе
        Возврат 10 - Остаток;
    КонецЕсли;
КонецФункции

Когда кладовщик сканирует упаковку, типовой обработчик торгового оборудования 1С определяет префикс 22, извлекает вес для заполнения количества в строке документа, обнуляет блок веса в коде, пересчитывает контрольный символ и находит нужную позицию по нормализованному шаблону.

Решение 2. Программный поиск по начальной части штрихкода

Если длина значащей части у поставщика плавает (в одних позициях 7 знаков, а в других 8) или используются разные префиксы, типовая фиксированная настройка параметров учета не сможет корректно разобрать весь поток штрихкодов. В этом случае настраиваем поиск по подстроке в обработке внешнего события от торгового оборудования.

Проанализируем пример поискового запроса, который можно использовать в модуле формы или в процедуре ОбработатьШтрихкод:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 2
    |	Штрихкоды.Владелец КАК Номенклатура,
    |	Штрихкоды.ХарактеристикаНоменклатуры КАК Характеристика,
    |	Штрихкоды.Штрихкод КАК Штрихкод
    |ИЗ
    |	РегистрСведений.Штрихкоды КАК Штрихкоды
    |ГДЕ
    |	&СчитанныйШтрихкод ПОДОБНО Штрихкоды.Штрихкод + ""%""";

Запрос.УстановитьПараметр("СчитанныйШтрихкод", СчитанныйШК);
Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Количество() = 1 Тогда
    Выборка.Следующий();
    НоменклатураНайденная = Выборка.Номенклатура;
ИначеЕсли Выборка.Количество() > 1 Тогда
    // Если по префиксу нашлось несколько позиций, открываем окно уточнения пользователю
    Предупреждение("По начальным цифрам штрихкода найдено несколько товаров!");
КонецЕсли;

Такой подход позволяет хранить в регистре именно те 7 или 8 знаков, которые передал поставщик. Оператор ПОДОБНО сравнивает полученные 13 знаков со строкой из базы: если 13-значный код начинается на символы из регистра, номенклатура считается идентифицированной.

Решение 3. Использование механизма «Номенклатура контрагентов»

Если модификация обработчиков штрихкодов нежелательна, используем штатную подсистему соответствий номенклатуры контрагентов:

  1. Неполные строки штрихкода (7–8 цифр) записываются не в регистр штрихкодов, а в артикул или код товара поставщика в справочнике НоменклатураКонтрагентов.
  2. В карточке номенклатуры создается внутренний локальный штрихкод организации (полноценный EAN-13).
  3. При загрузке электронных накладных поиск и сопоставление номенклатуры выполняется по таблице номенклатуры контрагента.
  4. При приемке и отгрузке на складе сканирование и учет выполняются по полным штрихкодам без конфликта форматов.

Решение 4. Аппаратная фильтрация на сканере штрихкодов

Большинство современных 2D- и лазерных сканеров поддерживают технологию расширенного форматирования данных (ADF / Advanced Data Formatting). В памяти сканера можно задать правило:

  1. Проверить условие: штрихкод имеет длину 13 символов и начинается с префикса 22.
  2. Отрезать завершающие символы веса и контрольный знак, передавая в COM-порт или интерфейс эмуляции клавиатуры только первые 7 или 8 символов.

Важное ограничение: при аппаратной обрезке сканер передает только код номенклатуры, и 1С не сможет автоматически получить вес товара из упаковки — количество в документе придется проставлять вручную.

← На главную