В типовой конфигурации «Управление торговлей 10.3» существует жесткое ограничение: для весового товара в настройках параметров учета можно задать только один префикс (обычно это цифра «2»). Однако в реальной практике, особенно при работе с продуктами питания (мясо, птица, деликатесы), поставщики часто присылают товар с собственными префиксами, такими как «23», «25», «27» или даже «29». Переклеивать этикетки на каждой упаковке при мелкооптовой торговле экономически нецелесообразно. В этой статье мы подробно разберем, как доработать систему для корректного распознавания штрихкодов с разными префиксами.
Для начала проанализируем, как 1С:УТ 10.3 понимает, что перед ней весовой товар. Основная логика сосредоточена в общем модуле РаботаСТорговымОборудованием (или в обработке обслуживания сканера, в зависимости от версии). Ключевым местом является функция ОбработатьВведенныйШтрихкод. Стандартный алгоритм выглядит примерно так:
EAN13).Проблема заключается в том, что если штрихкод начинается на «25», а в системе прописан префикс «1», 1С будет искать товар с полным штрихкодом «25...» в справочнике Штрихкоды, не обнаружит его и выдаст ошибку, так как не воспримет его как весовой.
Разберем самый простой вариант доработки. Мы можем изменить условие проверки в функции ОбработатьВведенныйШтрихкод, чтобы система считала весовым любой штрихкод, начинающийся на цифру «2» (согласно стандарту EAN для внутреннего использования предприятиями), игнорируя конкретный префикс из настроек.
Рассмотрим пример кода, который нужно изменить:
// Стандартный код:
Если ЗначениеЗаполнено(мПрефиксВесовогоТовара)
И ЗначениеЗаполнено(мДлинаКодаВесовогоТовара)
И ТипШК = мEAN13
И Лев(ШК, 2) = "2" + мПрефиксВесовогоТовара Тогда
// Обработка весового товара
КонецЕсли;
Нам необходимо модифицировать его, чтобы проверка стала более гибкой. Проанализируем ситуацию: если мы закомментируем проверку второго символа, система начнет воспринимать все коды на «2» как весовые.
// Модифицированный код:
Если ТипШК = мEAN13 И Лев(ШК, 1) = "2" Тогда
// Мы считаем, что любой код на "2" может быть весовым
// Теперь нам нужно определить, какой именно это товар
КодТовара = Сред(ШК, 3, мДлинаКодаВесовогоТовара);
КоличествоТовара = Сред(ШК, 3 + мДлинаКодаВесовогоТовара, 10 - мДлинаКодаВесовогоТовара);
// ... дальнейшая логика поиска ...
КонецЕсли;
Если разные поставщики используют одинаковые внутренние коды для разных товаров (например, у одного «00123» — это филе, а у другого — грудка), возникнет коллизия. Выходом может стать включение префикса поставщика непосредственно в код, по которому мы ищем товар. Выясним, как это реализовать.
Мы можем изменить длину кода весового товара в настройках (например, установить 7 вместо 5). Тогда при разборе штрихкода 2500123... система возьмет не «00123», а «2500123». В этом случае в карточке номенклатуры в поле «Код» (или в специальный реквизит) мы записываем код вместе с префиксом завода.
Рассмотрим пример изменения кода для этого случая:
// Изменяем выделение сегментов штрихкода
// Вместо: КодТовара = Сред(ШК, 3, 5);
// Используем:
КодТовара = Сред(ШК, 1, мДлинаКодаВесовогоТовара); // Начинаем с 1-го символа, включая префикс
КоличествоТовара = Сред(ШК, 1 + мДлинаКодаВесовогоТовара, 10 - мДлинаКодаВесовогоТовара);
Важный нюанс: при такой реализации шанс ошибки снижается, так как мы идентифицируем товар по полной строке, предоставленной поставщиком, включая его специфический префикс.
Наиболее профессиональным и гибким решением является перенос механизма шаблонов из конфигурации «1С:Розница» в «Управление торговлей 10.3». Проанализируем, как это работает. Мы создаем справочник ШаблоныШтрихкодов, где для каждого правила указываем:
При сканировании программа должна перебирать все шаблоны из справочника. Если считанный штрихкод соответствует маске шаблона (например, начинается на нужные цифры и имеет нужную длину), то система разбирает его по правилам этого конкретного шаблона. Это позволяет работать с абсолютно любыми форматами этикеток без изменения программного кода при появлении нового поставщика.
При использовании нескольких префиксов весового товара возникает риск пересечения со штучными товарами или внутренними штрихкодами (например, серийными номерами оборудования). Рассмотрим, как минимизировать риски:
Штрихкоды как штучный. Если точного совпадения нет — только тогда переходите к алгоритму разбора весового кода.ВесовойКодПоставщика. Ищите товар именно по этому полю при разборе весового штрихкода.Если вы работаете с крупными агрохолдингами, они могут использовать формат GS1-128 (Code 128). В таких штрихкодах префиксов в классическом понимании EAN-13 нет, но используются идентификаторы применения (AI). Например, вес обычно следует за кодом (310x). Для обработки таких кодов стандартная функция ОбработатьВведенныйШтрихкод не подойдет вовсе — потребуется написание полноценного парсера, который будет искать вхождение идентификатора веса в длинной строке сканирования.
Подведем итог: несмотря на ограничения 1С:УТ 10.3, задача решается небольшим изменением кода в модуле обработки торгового оборудования. Выбор способа зависит от сложности вашей складской логики и количества поставщиков с нестандартной маркировкой.