Как настроить сканирование весового товара с префиксом производителя (46...) в 1С:КА 2 и ERP?

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

При переходе со старых конфигураций (например, КА 1.1 или УПП) на современные решения на базе управляемых форм (1С:Комплексная автоматизация 2, 1С:ERP, 1С:Управление Торговлей 11), многие специалисты сталкиваются с изменением логики работы торгового оборудования. Одной из неочевидных проблем становится обработка штрихкодов весовых товаров, которые поступают от поставщиков.

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

Суть проблемы: Стандарты GS1 против Реальности

Давайте сначала разберемся в теории. Согласно стандартам GS1 (международная организация, занимающаяся вопросами стандартизации учета и штрихового кодирования), структура штрихкода EAN-13 строго регламентирована:

  1. Префиксы стран (например, 460-469 для России): Используются для идентификации штучной продукции. Вес в таких кодах обычно не кодируется.
  2. Внутренние префиксы (20-29): Выделены специально для внутреннего использования предприятиями (In-Store codes). Именно здесь разрешено кодировать вес или цену товара.

Типовые конфигурации 1С (КА 2, ERP) разработаны в строгом соответствии с этими стандартами. Если система видит штрихкод, начинающийся на 46..., она воспринимает его как GTIN штучного товара и ищет точное совпадение в регистре ШтрихкодыНоменклатуры. Если система видит префикс из диапазона 20-29 (настраивается в НСИ), она понимает, что это весовой товар, и запускает алгоритм извлечения веса.

Ситуация на практике: Поставщики (особенно мясной, рыбной и сырной продукции) часто нарушают это правило. Они печатают этикетки с префиксом 46 (зарегистрированным на них как на производителя), но структуру кода делают весовой. Например:

46 60217 01854 8

Где:

При сканировании такого кода 1С:КА 2 пытается найти товар с полным штрихкодом 4660217018548. Естественно, она его не находит (или находит, если вы завели именно этот вес как штуку, но следующий кусок весом 1.855 кг уже не найдется).

Анализ задачи и варианты решения

Мы не можем изменить этикетки поставщика (товар уже пришел). Нам нужно научить систему извлекать вес из таких "неправильных" штрихкодов. Рассмотрим несколько подходов, от простых "хаков" до профессиональной настройки.

Решение №1: Метод подмены префикса (на уровне обработки ТСД)

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

Предположим, у нас в настройках НСИ (НСИ и администрирование — Номенклатура — Настройки создания — Настройка префиксов внутренних штрихкодов) указано, что весовой товар начинается с префикса 21.

Наш алгоритм действий будет следующим:

  1. Получаем штрихкод от сканера или ТСД.
  2. Пробуем найти этот штрихкод в регистре "как есть".
  3. Если точного совпадения нет, проверяем, не является ли он весовым кодом от поставщика (например, начинается на 46 и имеет определенную длину).
  4. Если условие выполняется, программно меняем первые две цифры 46 на 21.
  5. Передаем измененный код в типовой алгоритм разбора весового товара.

В этом случае, код 4660217018548 превращается в 2160217018548. Система видит префикс 21, понимает, что это весовой товар, извлекает код номенклатуры 60217 и вес 1.854.

Важно: Для работы этого метода в регистре ШтрихкодыНоменклатуры для данного товара должен быть записан штрихкод без веса с префиксом 21. То есть, вы должны создать запись вида 216021700000К (где нули — это место под вес). В КА 2 штрихкод весового товара обычно хранится в виде шаблона или короткого кода PLU, но суть остается прежней: система должна знать, что товар 60217 связан с этой номенклатурой.

Рассмотрим пример кода, который можно внедрить в обработку события сканирования (или в обработку обслуживания ТСД при работе с маркировкой):


// Функция обработки штрихкода, полученного от ТСД
Функция ОбработатьШтрихкодОтТСД(Штрихкод, МассивШтрихкодов) Экспорт
    
    // 1. Пытаемся найти точное совпадение
    НайденнаяНоменклатура = НайтиНоменклатуруПоШтрихкоду(Штрихкод);
    
    Если НайденнаяНоменклатура <> Неопределено Тогда
        Возврат НайденнаяНоменклатура;
    КонецЕсли;

    // 2. Если не нашли, проверяем гипотезу о весовом товаре поставщика
    // Допустим, мы знаем, что проблемные коды начинаются с "46" и имеют длину 13
    Если СтрДлина(Штрихкод) = 13 И Лев(Штрихкод, 2) = "46" Тогда
        
        // Формируем "виртуальный" внутренний штрихкод
        // Заменяем "46" на "21" (или другой ваш префикс весового товара)
        ШтрихкодАдаптированный = "21" + Сред(Штрихкод, 3);
        
        // Повторная попытка поиска уже с новым кодом
        // Здесь сработает типовой механизм разбора весового товара 1С
        ДанныеТовара = РазборШтрихкодаПоШаблону(ШтрихкодАдаптированный);
        
        Если ДанныеТовара.Вес > 0 Тогда
            // Если разбор прошел успешно и вес извлечен
            Возврат ДанныеТовара;
        КонецЕсли;
        
    КонецЕсли;
    
    Возврат Неопределено;

КонецФункции

Преимущества метода:

Недостатки и риски:

Решение №2: Использование шаблонов (Regular Expressions) в ПО терминала

Более профессиональным и безопасным подходом является перенос логики разбора штрихкода "на край" — то есть непосредственно на Терминал Сбора Данных (ТСД). Современное программное обеспечение для ТСД (DataMobile, Cleverence, Mobile SMARTS) позволяет настраивать шаблоны штрихкодов с использованием регулярных выражений.

В этом случае мы настраиваем ТСД так, чтобы он сам понимал структуру "неправильного" кода, что особенно важно при формировании транспортной упаковки маркируемого товара.

Алгоритм настройки (общий принцип):

  1. В настройках ПО создаем новый шаблон штрихкода.
  2. Задаем маску (Regex), например: ^46(\d{5})(\d{5})(\d)$.
  3. Указываем, какая группа цифр отвечает за идентификатор товара (артикул), а какая за вес (количество).
    • Группа 1 (\d{5}) -> Артикул/Код поиска товара.
    • Группа 2 (\d{5}) -> Вес (обычно требуется указать делитель, например 1000, чтобы получить кг).
  4. При сканировании ТСД сам разбирает строку и передает в 1С уже готовую структуру: {Товар: "Рыба", Количество: 1.854}.

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

Решение №3: Доработка логики в 1С (без подмены префикса)

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

Логика разработки будет следующей:

  1. Мы не меняем префикс, а честно анализируем код 46....
  2. Проверяем номенклатуру, соответствующую коду товара (цифры с 3 по 7 в штрихкоде).
  3. Если у найденной номенклатуры единица измерения — "кг" (или другая весовая), мы принудительно запускаем алгоритм выделения веса (цифры с 8 по 12).

Примерная логика разбора строки:


// Пример прямого разбора строки EAN-13 с весом
// Структура: П П Т Т Т Т Т В В В В В К
// П - префикс, Т - код товара, В - вес, К - контр. число

Префикс = Лев(Штрихкод, 2);
КодТовара = Сред(Штрихкод, 3, 5);
ВесСтрока = Сред(Штрихкод, 8, 5); // Обычно вес в граммах

Попытка
    ВесЧисло = Число(ВесСтрока) / 1000; // Переводим в кг
    // Далее ищем товар по КодТовара (это может быть PLU код)
    // ... логика поиска товара ...
Исключение
    // Ошибка преобразования
КонецПопытки;

Выводы и рекомендации

При переходе на КА 2 или ERP важно провести аудит всех типов штрихкодов, поступающих на склад. Если вы обнаружили весовые товары с префиксами поставщиков (46, 40 и т.д.), не пытайтесь просто загрузить их в регистр штрихкодов — это сделает их штучными.

Лучшая практика: Используйте возможности программного обеспечения ТСД для предварительного разбора (парсинга) таких кодов, а также настройте вывод веса и объема товаров в документах. Это избавит 1С от необходимости гадать, что за код пришел, и снизит нагрузку на систему. Для решения второй задачи можно использовать расширение для автоматического расчета и вывода веса и объема товаров в документах УТ 11 и КА 2.

Допустимая практика: Использование метода подмены префикса на "21" (или другой внутренний) на входе в 1С. Это работает стабильно. Метод требует внимательности при ведении базы, чтобы избежать дублирования внутренних кодов.

← На главную