Работа с весовым товаром в 1С:Управление торговлей 11 часто подкидывает сложные задачи, особенно когда поставщики используют разные стандарты маркировки. Типичная ситуация: для одной группы товаров вес зашит после 7-го символа, а для другой — после 13-го. В этой статье мы подробно разберем, как «научить» систему распознавать такие коды, настроим префиксы и рассмотрим варианты программной доработки для нестандартных случаев.
Прежде всего, проанализируем структуру стандартного весового штрихкода формата EAN-13. Как правило, он строится по шаблону 2NPPPPPPMMMMZ, где:
Однако на практике поставщики могут присылать товар с длинными кодами (например, Code-128 или GS1-128), где вес может находиться в середине или в конце строки. Рассмотрим, как с этим работать.
Если ваши «мясные» штрихкоды соответствуют стандарту EAN-13 и начинаются с цифры 2, мы можем использовать типовой механизм 1С. Выполним следующие шаги в интерфейсе «Такси»:
Разберем пример: если мы завели товар с кодом 91152 и настроили префикс веса, то при сканировании кода 2291152050779 система автоматически определит:
91152.5,077 кг.Когда стандартных настроек недостаточно (например, если вес идет после 13-го знака или код слишком длинный), нам потребуется вмешаться в программный код обработки события сканирования. В 1С:УТ 11 за это часто отвечает функционал в модулях, связанных с Библиотекой подключаемого оборудования (БПО).
Проанализируем ситуацию, когда нам нужно различать «курицу» и «мясо» по длине кода или начальным цифрам. Мы можем использовать функции работы со строками Лев(), Сред() и Прав(). Рассмотрим пример алгоритма, который можно внедрить в обработку сканирования:
// Пример логики разбора весового штрихкода
Штрихкод = "0120105021715000"; // Пример длинного кода
Если СтрДлина(Штрихкод) > 13 Тогда
// Предполагаем, что это "курица"
// Код товара (первые 5 знаков)
КодТовара = Лев(Штрихкод, 5);
// Вес товара (с 12 по 16 знак, 5 цифр)
СтрокаВеса = Сред(Штрихкод, 12, 5);
Вес = Число(СтрокаВеса) / 1000; // перевод в кг
ИначеЕсли Лев(Штрихкод, 1) = "2" Тогда
// Стандартный весовой EAN-13 (мясо)
КодТовара = Сред(Штрихкод, 3, 5);
СтрокаВеса = Сред(Штрихкод, 8, 5);
Вес = Число(СтрокаВеса) / 1000;
КонецЕсли;
Эту логику необходимо интегрировать в процедуру обработки внешнего события от сканера штрихкодов. В УТ 11.2 это часто делается в модуле МенеджерОборудованияКлиент или в специализированных обработках обслуживания (например, СерверТО).
Если вы планируете использовать ТСД с программным обеспечением (например, Mobile Smarts от Клеверенс или DataMobile), задачу по разделению штрихкода лучше перенести на сторону мобильного устройства. Выясним причину, почему это эффективно: ТСД может обработать строку «на лету» и передать в 1С уже готовый объект с разделенными полями (Номенклатура и Количество).
В настройках ПО ТСД создаются шаблоны штрихкодов:
22XXXXXMMMMMZ.GS1-128.Рассмотрим подробнее ситуацию с длинными «куриными» кодами. Скорее всего, они соответствуют стандарту GS1-128. В таких кодах используются специальные префиксы — идентификаторы применения:
(01) — GTIN (код товара).(3103) — вес нетто в кг (с тремя знаками после запятой).(15) — срок годности.Если ваш поставщик присылает штрихкод вида 01XXXXXXXXXXXXXX3103015000, то 3103 подсказывает системе, что следующие 6 цифр — это вес. Использование регулярных выражений (RegExp) в 1С позволит вам создать универсальный парсер, который будет искать эти вхождения независимо от общей длины строки.
Чтобы система работала стабильно, придерживайтесь следующего плана действий:
Шаг 1: Сбор образцов. Получите от поставщиков распечатки всех вариантов штрихкодов. Важно понимать не только где вес, но и как кодируется сам товар (артикул, код или штрихкод упаковки).
Шаг 2: Создание SKU. В карточке номенклатуры в 1С убедитесь, что код, указанный в штрихкоде (например, те самые 5-7 цифр), внесен в поле «Код» или используется как SKU в регистре штрихкодов. Если 1С не сможет найти товар по «обрезанному» коду, вес подтянуть не получится.
Шаг 3: Тестирование префиксов. Начните с настройки префиксов в НСИ и администрирование. Если большинство кодов начинаются на «2», это решит 80% задач без программирования.
Шаг 4: Доработка обработки «СерверТО». Если у вас старая версия УТ 11.2, обратитесь к программисту для модификации функции ОбработатьШтрихкоды. В ней нужно прописать условие: «Если длина строки равна X и начинается с Y — извлечь вес из позиции Z».
Таким образом, мы видим, что проблема решаема как стандартными средствами настройки префиксов, так и путем небольшой кастомизации логики разбора строки. Главное — четко определить правила, по которым каждый поставщик кодирует информацию в строке штрихкода.