Почему 1С:Розница не находит штрихкод, начинающийся на цифру 2, и как это исправить?

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

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

Суть проблемы и логика внутренних штрихкодов

Для начала проанализируем ситуацию: почему именно цифра «2» становится камнем преткновения? Согласно международному стандарту GS1, диапазон префиксов от 20 до 29 зарезервирован для внутреннего использования предприятиями (Local Use). Это означает, что производитель не может официально зарегистрировать такой штрихкод в глобальной ассоциации, и каждая организация вольна использовать его по своему усмотрению.

Разработчики 1С заложили в систему механизм, который автоматически распознает такие коды как «внутренние». Основное предназначение этих префиксов в ритейле — работа с весовым товаром. Когда система видит код, начинающийся, например, на «22», она перестает искать его целиком в общем списке и начинает «разбирать» его на составляющие: код товара (PLU) и вес (количество).

Разбор настроек префиксов в 1С:Розница

Если при сканировании штучного товара, имеющего штрихкод из диапазона 20–29, система его не находит, первым делом нам необходимо проверить настройки НСИ (Нормативно-справочной информации). Разберем по шагам, как это сделать:

  1. Перейдем в раздел Настройки.
  2. Выберем пункт Настройка НСИ и разделов.
  3. Откроем подраздел Номенклатура.
  4. Найдем пункт Настройка префиксов внутренних штрихкодов EAN13.

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

Решение: Если ваш магазин не использует весовые товары с печатью этикеток на весах в этом диапазоне, необходимо изменить тип с «Весовой» на Штучный или вовсе очистить настройки префиксов для этого диапазона.

Технический анализ: как 1С обрабатывает весовой штрихкод

Рассмотрим подробнее программную логику, которая срабатывает «под капотом». В модуле менеджера регистра ШтрихкодыНоменклатуры существует процедура ПреобразоватьВесовойШтрихкод. Давайте изучим примерный алгоритм её работы, чтобы понять, почему поиск обычного товара завершается неудачей:


Процедура ПреобразоватьВесовойШтрихкод(ТекШтрихкод, ПрефиксыВесовыхШтрихкодов) Экспорт
    Если СтрДлина(ТекШтрихкод.Штрихкод) = 13 // Проверка на стандарт EAN13
        И Лев(ТекШтрихкод.Штрихкод, 1) = "2" // Признак внутреннего штрихкода
        И ПрефиксыВесовыхШтрихкодов.Найти(Сред(ТекШтрихкод.Штрихкод, 2, 1)) <> Неопределено Тогда 
        
        // Система нашла префикс и считает, что товар ВЕСОВОЙ
        // Формат весового ШК: 2 + П + ЧЧЧЧЧ + BBBBB + K
        // П - Префикс, ЧЧЧЧЧ - код SKU, BBBBB - Вес, К - Контрольное число.

        КодТовара = Сред(ТекШтрихкод.Штрихкод, 3, 5);
        Вес = Число(Сред(ТекШтрихкод.Штрихкод, 8, 2)) + Число(Сред(ТекШтрихкод.Штрихкод, 10, 3)) / 1000;
        
        // Вместо поиска по ШК 2210931693013, система ищет товар по SKU "10931"
        ТекШтрихкод.Штрихкод = ПолучитьШтрихкодВесовогоТовараПоКоду(КодТовара, , Истина);
        ТекШтрихкод.Количество = ТекШтрихкод.Количество * Вес;
    КонецЕсли;
КонецПроцедуры

Как мы видим из кода, если настройка префикса установлена неверно, программа «разрезает» ваш полноценный 13-значный код. В результате вместо поиска в регистре Штрихкоды, она пытается найти номенклатуру по короткому коду SKU в регистре сведений Коды товаров SKU. Так как для штучного товара этот код часто не совпадает или не заполнен, 1С выдает сообщение о том, что товар не найден.

Диагностика с помощью отладчика

Рассмотрим ситуацию, когда настройки визуально кажутся верными, но поиск все равно не работает. В этом случае нам поможет отладка. Хотя процесс поиска в 1С:Розница завязан на механизме Оповещений и обработке внешних событий, что усложняет процесс, мы можем выделить ключевые точки остановки.

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

Проанализируем следующие моменты при отладке:

Проблемы при распределенных информационных базах (РИБ)

Выясним причину, если в центральном узле все работает корректно, а в магазине (периферийном узле) — нет. В случае использования РИБ настройки номенклатуры и префиксов передаются через миграцию данных. Если произошел сбой синхронизации или коллизия объектов, настройки в магазине могут отличаться от центральных.

В такой ситуации проверьте настройки непосредственно в «проблемной» базе магазина. Если они верны, попробуйте перерегистрировать изменения для данного узла по объекту Константы или НаборыЗначенийДоступа, которые могут отвечать за функциональные опции работы со штрихкодами.

Дополнительные факторы: оборудование и качество печати

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

  1. Настройка суффикса: Сканер должен быть настроен так, чтобы после считывания данных он посылал символ «Возврат каретки» (CR — код 13). Без этого 1С может не понять, что ввод данных завершен, и не инициировать процедуру поиска.
  2. Эмуляция COM-порта: Для наиболее стабильной работы в 1С рекомендуется переводить сканеры в режим эмуляции COM-порта с использованием драйвера «1С:Сканеры штрихкода». Это позволяет системе перехватывать событие сканирования в любой момент, независимо от того, где находится фокус ввода.
  3. Качество печати: Как отмечалось в обсуждении, иногда плохое качество печати приводит к тому, что сканер неверно распознает цифры (например, путает 8 и 0). Однако в нашем случае, когда проблема касается именно диапазона на «2», дело почти всегда в логике префиксов.

Итоги и рекомендации

Подведем итог нашему исследованию. Если в вашей базе 1С:Розница 2.2 не ищутся штрихкоды, начинающиеся на «2», выполните следующие действия:

Во-первых, проверьте настройки префиксов внутренних штрихкодов в разделе НСИ. Убедитесь, что для штучных товаров не включена обработка как для весовых.

Во-вторых, проверьте карточку товара. Если у товара ошибочно установлен признак «Весовой», система будет ожидать в штрихкоде информацию о весе, даже если глобальные настройки префиксов верны.

В-третьих, используйте отладку для контроля того, в каком виде штрихкод попадает в систему и какие преобразования он проходит до момента обращения к базе данных.

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

← На главную