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

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

При переходе на новые версии конфигураций (например, при обновлении с 1С:Розница 1.0 на редакцию 2.2 или 2.3) пользователи часто сталкиваются с неприятной ситуацией. Товар в базе есть, штрихкод к нему привязан и отображается в карточке номенклатуры, ручной поиск по коду работает безупречно, но при попытке считать этот же штрихкод сканером на рабочем месте кассира (РМК) или в документе поступления программа выдает ошибку «Штрихкод не найден» или предлагает создать новую номенклатуру. При этом штрихкоды, сгенерированные самой программой 1С, считываются и распознаются без каких-либо проблем.

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

Анализируем симптомы и выявляем скрытую причину

Давайте проанализируем поведение системы. Если мы вводим штрихкод вручную в поле поиска, 1С выполняет прямой поиск по строковому значению в регистре сведений РегистрСведений.ШтрихкодыНоменклатуры. Запрос отрабатывает напрямую, находит точное совпадение букв и цифр, после чего товар добавляется в корзину или документ.

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

Стандарты штрихкодирования GS1 и зона «внутреннего использования»

Чтобы понять, почему программа ведет себя подобным образом, обратимся к международному стандарту маркировки товаров GS1 (EAN-13). Согласно правилам этого стандарта, диапазон префиксов штрихкодов от 20 до 29 выделен под так называемую ограниченную дистрибуцию (Restricted Distribution). Это означает следующее:

Когда такой штучный товар поступает к вам в магазин, его штрихкод (например, начинающийся с 21... или 23...) вступает в жесткий технический конфликт со стандартными настройками парсинга в 1С:Розница.

Как технически происходит разбор штрихкода в 1С

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

2 + П + ЧЧЧЧЧ + ВВВВВ + К

Где каждый символ несет строго определенную смысловую нагрузку:

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


// Упрощенная схема работы обработчика штрихкодов в 1С:Розница
Если Лев(СчитанныйШтрихкод, 1) = "2" Тогда
    ПрефиксВторогоУровня = Сред(СчитанныйШтрихкод, 2, 1);
    
    Если ПрефиксВторогоУровня = ПрефиксВесовогоТовара Тогда
        // Система считает, что перед ней весовой штрихкод!
        КодТовараPLU = Сред(СчитанныйШтрихкод, 3, 5); // Выделяет "07130"
        ВесГраммы    = Число(Сред(СчитанныйШтрихкод, 8, 5)); // Выделяет "01053" (1кг 53г)
        
        // Поиск в базе данных идет НЕ по всему штрихкоду "2107130010539",
        // а по короткому коду номенклатуры "07130"!
        НайденныйТовар = Справочники.Номенклатура.НайтиПоКоду(КодТовараPLU);
        
        Если НЕ ЗначениеЗаполнено(НайденныйТовар) Тогда
            ВызватьИсключение "Номенклатура с кодом " + КодТовараPLU + " не найдена!";
        КонецЕсли;
    КонецЕсли;
КонецЕсли;

Поскольку штрихкод начинается на 21 (где 1 — дефолтный весовой префикс), программа мгновенно прекращает стандартный поиск по полному коду. Она отбрасывает часть цифр, интерпретируя их как вес (1 кг 53 грамма), и пытается найти в справочнике Номенклатура товар с коротким кодом 07130. Разумеется, под таким кодом в вашей базе ничего нет, либо зарегистрирован совершенно иной товар. Кассир видит сообщение об ошибке, хотя в карточке нужного товара честно прописан полный штрихкод 2107130010539.

Решаем проблему: Пошаговая настройка 1С:Розница

Выяснив причину поведения программы, мы можем легко устранить этот конфликт. Для этого нам нужно изменить префиксы весового и фасованного товара в настройках базы данных. Рассмотрим два возможных сценария решения проблемы в зависимости от специфики вашего магазина.

Сценарий А. В магазине не продается весовой товар

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

Разберем процесс настройки по шагам:

  1. Перейдите в раздел меню Администрирование.
  2. Выберите пункт Настройки номенклатуры.
  3. Раскройте группу настроек Штрихкодирование.
  4. Найдите параметры Префикс штрихкода весового товара (2X) и Префикс штучного фасованного товара (2Y). По умолчанию там будут установлены цифры 1 и 3 соответственно.
  5. Измените эти значения на редкие цифры, которые гарантированно не встречаются в начале штрихкодов ваших поставщиков. Мы рекомендуем установить значения 8 и 9. Это переведет обработку весовых алгоритмов на диапазоны 28... и 29....
  6. Сохраните изменения.

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

Сценарий Б. В магазине используются весы с печатью этикеток

Если в вашем магазине есть весовой отдел и вы используете весы самообслуживания или фасовочные комплексы, просто так отключить префиксы нельзя. Нам необходимо развести конфликтующие диапазоны штрихкодов поставщиков и ваших собственных весовых товаров.

Для этого выполним следующие действия:

  1. Проанализируем структуру штрихкодов ваших весовых этикеток. Как правило, весы печатают этикетки с префиксом 21 (то есть на весах настроен префикс 21 или префикс весового товара в 1С равен 1).
  2. Перейдите в Администрирование -> Настройки номенклатуры -> Штрихкодирование и измените Префикс штрихкода весового товара (2X), например, на цифру 7 (диапазон штрихкодов станет 27...).
  3. Откройте утилиту настройки ваших весов (драйвер весов или редактор шаблонов этикеток на компьютере) и измените префикс печати штрихкода в самих весах с 21 на 27.
  4. Выполните полную выгрузку товаров в весы из 1С.

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

Использование инструмента «Анализ штрихкодов» для диагностики базы

Если у вас большая база данных и вы хотите быстро выявить все потенциально проблемные позиции номенклатуры, воспользуемся специализированным инструментом, который появился в современных релизах 1С:Розница (начиная с версии 2.3.9 и выше).

Для этого выполним следующие действия:

  1. Перейдите в раздел Администрирование, далее выберите Настройка номенклатуры.
  2. В группе Штрихкодирование нажмите на гиперссылку Анализ штрихкодов.
  3. В открывшейся форме система автоматически просканирует весь регистр сведений штрихкодов и сопоставит его с текущими настройками весовых префиксов.
  4. Программа выделит цветом все записи штучных товаров, чьи штрихкоды начинаются на конфликтующие префиксы (например, на 21 или 23 при стандартных настройках).

Этот инструмент позволяет оперативно оценить масштаб проблемы и принять решение об изменении префиксов или перемаркировке внутренних товаров без необходимости ручного перебора карточек номенклатуры.

← На главную