При переходе на новые версии конфигураций (например, при обновлении с 1С:Розница 1.0 на редакцию 2.2 или 2.3) пользователи часто сталкиваются с неприятной ситуацией. Товар в базе есть, штрихкод к нему привязан и отображается в карточке номенклатуры, ручной поиск по коду работает безупречно, но при попытке считать этот же штрихкод сканером на рабочем месте кассира (РМК) или в документе поступления программа выдает ошибку «Штрихкод не найден» или предлагает создать новую номенклатуру. При этом штрихкоды, сгенерированные самой программой 1С, считываются и распознаются без каких-либо проблем.
В этой статье мы подробно разберем, почему возникает это противоречие, как именно программа 1С технически обрабатывает входящие данные со сканера штрихкодов, и пошагово настроим систему так, чтобы любые штрихкоды поставщиков распознавались корректно.
Давайте проанализируем поведение системы. Если мы вводим штрихкод вручную в поле поиска, 1С выполняет прямой поиск по строковому значению в регистре сведений РегистрСведений.ШтрихкодыНоменклатуры. Запрос отрабатывает напрямую, находит точное совпадение букв и цифр, после чего товар добавляется в корзину или документ.
Однако при работе со сканером штрихкодов срабатывает совершенно другой механизм. Сканер отправляет аппаратное событие в драйвер торгового оборудования 1С. Программа перехватывает это событие через функцию ОбработкаВнешнегоСобытия и запускает специализированный алгоритм предварительного разбора (парсинга) полученной строки. Именно на этом этапе и кроется проблема. Если штрихкод начинается с определенных цифр, система не ищет его целиком в базе данных, а пытается «расшифровать» его структуру, предполагая, что перед нами весовой или фасованный товар.
Чтобы понять, почему программа ведет себя подобным образом, обратимся к международному стандарту маркировки товаров GS1 (EAN-13). Согласно правилам этого стандарта, диапазон префиксов штрихкодов от 20 до 29 выделен под так называемую ограниченную дистрибуцию (Restricted Distribution). Это означает следующее:
20...29 и наклеивают их на обычные штучные товары (например, на комнатные растения, канцелярию, хозтовары).Когда такой штучный товар поступает к вам в магазин, его штрихкод (например, начинающийся с 21... или 23...) вступает в жесткий технический конфликт со стандартными настройками парсинга в 1С:Розница.
Давайте разберем по шагам, как именно программный код 1С анализирует входящую информацию от сканера штрихкодов. В типовых конфигурациях заложена жесткая математическая модель разбора весовых штрихкодов формата EAN-13, которая выглядит следующим образом:
2 + П + ЧЧЧЧЧ + ВВВВВ + К
Где каждый символ несет строго определенную смысловую нагрузку:
1 (для весового товара) и 3 (для штучного фасованного товара).Рассмотрим конкретный пример. Сканер считывает оригинальный штучный штрихкод поставщика, нанесенный на этикетку товара: 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 и 3 соответственно.8 и 9. Это переведет обработку весовых алгоритмов на диапазоны 28... и 29....Важное примечание: Настоятельно не рекомендуется полностью очищать эти поля или оставлять их пустыми. При обновлении конфигурации или сбросе кэша программа 1С может автоматически восстановить дефолтные значения (1 и 3), и проблема вернется снова. Установка неиспользуемых цифр — самый надежный и стабильный способ.
Если в вашем магазине есть весовой отдел и вы используете весы самообслуживания или фасовочные комплексы, просто так отключить префиксы нельзя. Нам необходимо развести конфликтующие диапазоны штрихкодов поставщиков и ваших собственных весовых товаров.
Для этого выполним следующие действия:
21 (то есть на весах настроен префикс 21 или префикс весового товара в 1С равен 1).7 (диапазон штрихкодов станет 27...).21 на 27.После проведения этих манипуляций ваши весы будут генерировать этикетки, начинающиеся на 27.... Программа 1С при сканировании таких этикеток будет безошибочно распознавать их как весовые и корректно рассчитывать массу товара. В то же время штрихкоды сторонних производителей, начинающиеся на 21 и 23, перестанут подпадать под правила разбора веса и будут считываться как обычные штучные товары.
Если у вас большая база данных и вы хотите быстро выявить все потенциально проблемные позиции номенклатуры, воспользуемся специализированным инструментом, который появился в современных релизах 1С:Розница (начиная с версии 2.3.9 и выше).
Для этого выполним следующие действия:
21 или 23 при стандартных настройках).Этот инструмент позволяет оперативно оценить масштаб проблемы и принять решение об изменении префиксов или перемаркировке внутренних товаров без необходимости ручного перебора карточек номенклатуры.