Как реализовать поддержку нескольких префиксов весового товара в 1С:Управление торговлей 10.3

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

В типовой конфигурации «Управление торговлей 10.3» существует жесткое ограничение: для весового товара в настройках параметров учета можно задать только один префикс (обычно это цифра «2»). Однако в реальной практике, особенно при работе с продуктами питания (мясо, птица, деликатесы), поставщики часто присылают товар с собственными префиксами, такими как «23», «25», «27» или даже «29». Переклеивать этикетки на каждой упаковке при мелкооптовой торговле экономически нецелесообразно. В этой статье мы подробно разберем, как доработать систему для корректного распознавания штрихкодов с разными префиксами.

Анализ стандартного механизма обработки штрихкода

Для начала проанализируем, как 1С:УТ 10.3 понимает, что перед ней весовой товар. Основная логика сосредоточена в общем модуле РаботаСТорговымОборудованием (или в обработке обслуживания сканера, в зависимости от версии). Ключевым местом является функция ОбработатьВведенныйШтрихкод. Стандартный алгоритм выглядит примерно так:

  1. Проверяется тип штрихкода (должен быть EAN13).
  2. Проверяется соответствие первым двум символам (или первому символу «2» + префиксу из констант).
  3. Если проверка пройдена, штрихкод «разрезается»: одна часть интерпретируется как код товара, другая — как вес.

Проблема заключается в том, что если штрихкод начинается на «25», а в системе прописан префикс «1», 1С будет искать товар с полным штрихкодом «25...» в справочнике Штрихкоды, не обнаружит его и выдаст ошибку, так как не воспримет его как весовой.

Способ №1: Модификация логики проверки префикса

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

Рассмотрим пример кода, который нужно изменить:


// Стандартный код:
Если ЗначениеЗаполнено(мПрефиксВесовогоТовара)
    И ЗначениеЗаполнено(мДлинаКодаВесовогоТовара)
    И ТипШК = мEAN13
    И Лев(ШК, 2) = "2" + мПрефиксВесовогоТовара Тогда
    // Обработка весового товара
КонецЕсли;

Нам необходимо модифицировать его, чтобы проверка стала более гибкой. Проанализируем ситуацию: если мы закомментируем проверку второго символа, система начнет воспринимать все коды на «2» как весовые.


// Модифицированный код:
Если ТипШК = мEAN13 И Лев(ШК, 1) = "2" Тогда
    // Мы считаем, что любой код на "2" может быть весовым
    // Теперь нам нужно определить, какой именно это товар
    КодТовара = Сред(ШК, 3, мДлинаКодаВесовогоТовара);
    КоличествоТовара = Сред(ШК, 3 + мДлинаКодаВесовогоТовара, 10 - мДлинаКодаВесовогоТовара);
    // ... дальнейшая логика поиска ...
КонецЕсли;

Способ №2: Включение префикса в код номенклатуры

Если разные поставщики используют одинаковые внутренние коды для разных товаров (например, у одного «00123» — это филе, а у другого — грудка), возникнет коллизия. Выходом может стать включение префикса поставщика непосредственно в код, по которому мы ищем товар. Выясним, как это реализовать.

Мы можем изменить длину кода весового товара в настройках (например, установить 7 вместо 5). Тогда при разборе штрихкода 2500123... система возьмет не «00123», а «2500123». В этом случае в карточке номенклатуры в поле «Код» (или в специальный реквизит) мы записываем код вместе с префиксом завода.

Рассмотрим пример изменения кода для этого случая:


// Изменяем выделение сегментов штрихкода
// Вместо: КодТовара = Сред(ШК, 3, 5);
// Используем:
КодТовара = Сред(ШК, 1, мДлинаКодаВесовогоТовара); // Начинаем с 1-го символа, включая префикс
КоличествоТовара = Сред(ШК, 1 + мДлинаКодаВесовогоТовара, 10 - мДлинаКодаВесовогоТовара);

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

Способ №3: Реализация «Шаблонов штрихкодов»

Наиболее профессиональным и гибким решением является перенос механизма шаблонов из конфигурации «1С:Розница» в «Управление торговлей 10.3». Проанализируем, как это работает. Мы создаем справочник ШаблоныШтрихкодов, где для каждого правила указываем:

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

Предотвращение коллизий (важные рекомендации)

При использовании нескольких префиксов весового товара возникает риск пересечения со штучными товарами или внутренними штрихкодами (например, серийными номерами оборудования). Рассмотрим, как минимизировать риски:

  1. Реестр префиксов: Ведите в системе список разрешенных весовых префиксов. Не разрешайте программе обрабатывать код как весовой, если его префикс не занесен в этот «белый список».
  2. Приоритет поиска: Сначала всегда пытайтесь найти штрихкод в регистре сведений Штрихкоды как штучный. Если точного совпадения нет — только тогда переходите к алгоритму разбора весового кода.
  3. Использование PLU: Чтобы не «мусорить» в основных кодах номенклатуры (которые могут быть нужны для синхронизации с бухгалтерией), добавьте в карточку товара дополнительный реквизит ВесовойКодПоставщика. Ищите товар именно по этому полю при разборе весового штрихкода.

Работа с нестандартными форматами (GS1-128)

Если вы работаете с крупными агрохолдингами, они могут использовать формат GS1-128 (Code 128). В таких штрихкодах префиксов в классическом понимании EAN-13 нет, но используются идентификаторы применения (AI). Например, вес обычно следует за кодом (310x). Для обработки таких кодов стандартная функция ОбработатьВведенныйШтрихкод не подойдет вовсе — потребуется написание полноценного парсера, который будет искать вхождение идентификатора веса в длинной строке сканирования.

Подведем итог: несмотря на ограничения 1С:УТ 10.3, задача решается небольшим изменением кода в модуле обработки торгового оборудования. Выбор способа зависит от сложности вашей складской логики и количества поставщиков с нестандартной маркировкой.

← На главную