При переходе со старых конфигураций (например, КА 1.1 или УПП) на современные решения на базе управляемых форм (1С:Комплексная автоматизация 2, 1С:ERP, 1С:Управление Торговлей 11), многие специалисты сталкиваются с изменением логики работы торгового оборудования. Одной из неочевидных проблем становится обработка штрихкодов весовых товаров, которые поступают от поставщиков.
В этой статье мы подробно разберем ситуацию, когда весовой товар имеет штрихкод формата EAN-13, начинающийся с цифр, отличных от стандартного диапазона для внутреннего использования (20–29), и научимся правильно обрабатывать такие коды без нарушения логики типовой конфигурации.
Давайте сначала разберемся в теории. Согласно стандартам GS1 (международная организация, занимающаяся вопросами стандартизации учета и штрихового кодирования), структура штрихкода EAN-13 строго регламентирована:
Типовые конфигурации 1С (КА 2, ERP) разработаны в строгом соответствии с этими стандартами. Если система видит штрихкод, начинающийся на 46..., она воспринимает его как GTIN штучного товара и ищет точное совпадение в регистре ШтрихкодыНоменклатуры. Если система видит префикс из диапазона 20-29 (настраивается в НСИ), она понимает, что это весовой товар, и запускает алгоритм извлечения веса.
Ситуация на практике: Поставщики (особенно мясной, рыбной и сырной продукции) часто нарушают это правило. Они печатают этикетки с префиксом 46 (зарегистрированным на них как на производителя), но структуру кода делают весовой. Например:
46 60217 01854 8
Где:
46 — префикс страны;60217 — код товара (артикул);01854 — вес (1 кг 854 г);8 — контрольное число.При сканировании такого кода 1С:КА 2 пытается найти товар с полным штрихкодом 4660217018548. Естественно, она его не находит (или находит, если вы завели именно этот вес как штуку, но следующий кусок весом 1.855 кг уже не найдется).
Мы не можем изменить этикетки поставщика (товар уже пришел). Нам нужно научить систему извлекать вес из таких "неправильных" штрихкодов. Рассмотрим несколько подходов, от простых "хаков" до профессиональной настройки.
Этот метод был предложен в ходе обсуждения проблемы и является наиболее быстрым способом адаптации без глубокого вмешательства в ядро конфигурации 1С. Идея заключается в том, чтобы "обмануть" алгоритм разбора штрихкода, подставив ему ожидаемый префикс весового товара.
Предположим, у нас в настройках НСИ (НСИ и администрирование — Номенклатура — Настройки создания — Настройка префиксов внутренних штрихкодов) указано, что весовой товар начинается с префикса 21.
Наш алгоритм действий будет следующим:
46 на 21.В этом случае, код 4660217018548 превращается в 2160217018548. Система видит префикс 21, понимает, что это весовой товар, извлекает код номенклатуры 60217 и вес 1.854.
Важно: Для работы этого метода в регистре ШтрихкодыНоменклатуры для данного товара должен быть записан штрихкод без веса с префиксом 21. То есть, вы должны создать запись вида 216021700000К (где нули — это место под вес). В КА 2 штрихкод весового товара обычно хранится в виде шаблона или короткого кода PLU, но суть остается прежней: система должна знать, что товар 60217 связан с этой номенклатурой.
Рассмотрим пример кода, который можно внедрить в обработку события сканирования (или в обработку обслуживания ТСД при работе с маркировкой):
// Функция обработки штрихкода, полученного от ТСД
Функция ОбработатьШтрихкодОтТСД(Штрихкод, МассивШтрихкодов) Экспорт
// 1. Пытаемся найти точное совпадение
НайденнаяНоменклатура = НайтиНоменклатуруПоШтрихкоду(Штрихкод);
Если НайденнаяНоменклатура <> Неопределено Тогда
Возврат НайденнаяНоменклатура;
КонецЕсли;
// 2. Если не нашли, проверяем гипотезу о весовом товаре поставщика
// Допустим, мы знаем, что проблемные коды начинаются с "46" и имеют длину 13
Если СтрДлина(Штрихкод) = 13 И Лев(Штрихкод, 2) = "46" Тогда
// Формируем "виртуальный" внутренний штрихкод
// Заменяем "46" на "21" (или другой ваш префикс весового товара)
ШтрихкодАдаптированный = "21" + Сред(Штрихкод, 3);
// Повторная попытка поиска уже с новым кодом
// Здесь сработает типовой механизм разбора весового товара 1С
ДанныеТовара = РазборШтрихкодаПоШаблону(ШтрихкодАдаптированный);
Если ДанныеТовара.Вес > 0 Тогда
// Если разбор прошел успешно и вес извлечен
Возврат ДанныеТовара;
КонецЕсли;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Преимущества метода:
Недостатки и риски:
Более профессиональным и безопасным подходом является перенос логики разбора штрихкода "на край" — то есть непосредственно на Терминал Сбора Данных (ТСД). Современное программное обеспечение для ТСД (DataMobile, Cleverence, Mobile SMARTS) позволяет настраивать шаблоны штрихкодов с использованием регулярных выражений.
В этом случае мы настраиваем ТСД так, чтобы он сам понимал структуру "неправильного" кода, что особенно важно при формировании транспортной упаковки маркируемого товара.
Алгоритм настройки (общий принцип):
^46(\d{5})(\d{5})(\d)$.\d{5}) -> Артикул/Код поиска товара.\d{5}) -> Вес (обычно требуется указать делитель, например 1000, чтобы получить кг).При таком подходе в 1С вообще не приходит странный штрихкод. В 1С поступает документ, в котором уже заполнено количество. Это самый надежный способ, так как он не требует модификации кода конфигурации 1С и позволяет гибко настраивать правила для разных поставщиков.
Если у вас нет умного ПО на ТСД, а подмена префикса кажется опасной, можно реализовать полноценный парсер в 1С. Для этого необходимо найти модуль, отвечающий за обработку данных от подключаемого оборудования (обычно это модули МенеджерОборудованияКлиент или специализированные обработки драйверов).
Логика разработки будет следующей:
46....Примерная логика разбора строки:
// Пример прямого разбора строки EAN-13 с весом
// Структура: П П Т Т Т Т Т В В В В В К
// П - префикс, Т - код товара, В - вес, К - контр. число
Префикс = Лев(Штрихкод, 2);
КодТовара = Сред(Штрихкод, 3, 5);
ВесСтрока = Сред(Штрихкод, 8, 5); // Обычно вес в граммах
Попытка
ВесЧисло = Число(ВесСтрока) / 1000; // Переводим в кг
// Далее ищем товар по КодТовара (это может быть PLU код)
// ... логика поиска товара ...
Исключение
// Ошибка преобразования
КонецПопытки;
При переходе на КА 2 или ERP важно провести аудит всех типов штрихкодов, поступающих на склад. Если вы обнаружили весовые товары с префиксами поставщиков (46, 40 и т.д.), не пытайтесь просто загрузить их в регистр штрихкодов — это сделает их штучными.
Лучшая практика: Используйте возможности программного обеспечения ТСД для предварительного разбора (парсинга) таких кодов, а также настройте вывод веса и объема товаров в документах. Это избавит 1С от необходимости гадать, что за код пришел, и снизит нагрузку на систему. Для решения второй задачи можно использовать расширение для автоматического расчета и вывода веса и объема товаров в документах УТ 11 и КА 2.
Допустимая практика: Использование метода подмены префикса на "21" (или другой внутренний) на входе в 1С. Это работает стабильно. Метод требует внимательности при ведении базы, чтобы избежать дублирования внутренних кодов.