В процессе автоматизации розничной торговли часто возникает специфическая проблема: сканер штрихкода корректно считывает данные в список номенклатуры или в обычную накладную, но при попытке добавить тот же самый товар в Рабочем месте кассира (РМК) ничего не происходит. Особенно часто это проявляется, когда штрихкод товара начинается с цифры «0». В данной статье мы подробно разберем, почему это происходит и как настроить систему для корректной работы.
Первым делом выясним, почему в списке номенклатуры поиск работает, а в РМК — нет. В обычном справочнике или документе 1С часто использует «умный» поиск по подстроке или стандартные механизмы позиционирования. Если вы сканируете код 04607025433637, система может найти его, даже если часть символов будет интерпретирована иначе.
Однако в РМК используется специализированная процедура ОбработкаШтрихкодов. Поиск здесь идет строго по регистру сведений ШтрихкодыНоменклатуры. Здесь важна идеальная точность: если в базе код записан как 4607025433637 (13 знаков), а сканер передает 04607025433637 (14 знаков), точного совпадения не будет, и товар не добавится в корзину.
Рассмотрим ситуацию с точки зрения стандартов. Штрихкоды, начинающиеся с нуля, часто относятся к американскому стандарту UPC-A (12 цифр). Чтобы сделать его совместимым с европейским EAN-13, к нему в начало добавляется ведущий ноль.
Проанализируем работу торгового оборудования. В настройках драйвера 1С:Сканеры штрихкода (NativeApi) или в самом железе сканера часто включена опция "Convert UPC-A to EAN-13". Если эта опция активна, сканер принудительно добавляет ноль. Если же товар в базе заведен без этого нуля, поиск в РМК не сработает.
Что нужно сделать:
Разберем технический нюанс, который часто встречается в старых или кастомизированных релизах «Розницы». Иногда входящая строка со штрихкодом внутри программного кода ошибочно преобразуется в тип Число, а затем обратно в тип Строка. При математическом преобразовании строки «046...» в число ведущий ноль отсекается автоматически. В итоге система ищет «46...» вместо «046...».
Чтобы исключить это, нам потребуется отладчик. Проследим путь переменной Штрихкод в процедурах обработки внешнего события. Нам важно убедиться, что на всем пути от драйвера до запроса к базе данных значение остается строкой.
Если мы выяснили, что сканер всегда присылает лишний ноль, который мешает поиску, мы можем добавить небольшую проверку в код обработки. Посмотрим на пример функции, которая отсекает ведущий ноль, если он мешает идентификации товара:
// Пример обработки входящего штрихкода
Штрихкод = Данные.Штрихкод; // Получаем значение от драйвера
Если Лев(Штрихкод, 1) = "0" Тогда
// Проверяем, есть ли в базе код с нулем.
// Если не найден, пробуем искать без нуля
ШтрихкодБезНоля = Сред(Штрихкод, 2);
// Дальнейшая логика поиска товара...
КонецЕсли;
Однако более правильным подходом будет использование встроенных механизмов 1С по работе с торговым оборудованием. Рассмотрим, как можно модифицировать обработку, чтобы она была универсальной:
Штрихкод = Параметр;
НольВШк = Лев(Штрихкод, 1);
Если НольВШк = "0" Тогда
// Отсекаем только первый символ, если это ноль
Штрихкод = Сред(Штрихкод, 2);
КонецЕсли;
// Теперь передаем очищенный код в стандартный поиск
РезультатПоиска = ОбработкаТабличнойЧастиТовары.НайтиПоШтрихкоду(Штрихкод);
Выясним, как данные хранятся в самой базе. Перейдем в регистр сведений Штрихкоды (или ШтрихкодыНоменклатуры в зависимости от версии).
Важные моменты для проверки:
04607025433637 имеет длину 14 символов (GTIN-14). Если в базе он записан как 13-значный (EAN-13), поиск по точному соответствию не пройдет.СокрЛП() при записи кодов.Строка, а не число.Если вы не хотите менять программный код, можно решить проблему «на берегу» — в настройках самого сканера. Почти все современные сканеры (Symbol, Zebra, Honeywell, Honeywell) поддерживают программирование через управляющие штрихкоды из инструкции.
Попробуйте следующие варианты:
Мы проанализировали ситуацию и выяснили, что отсутствие реакции РМК на штрихкод с нулем чаще всего связано либо с разницей в длине строки (13 символов в базе против 14 от сканера), либо с некорректными префиксами в настройках драйвера 1С. Для решения проблемы рекомендуется либо привести все штрихкоды в базе к единому формату (например, всегда 13 знаков), либо добавить в код обработки РМК условие на отсечение ведущего нуля, если поиск по полному коду не дал результата.
Помните, что в 1С:Розница РМК — это критически важный узел, и любые изменения в коде должны быть протестированы на различных типах товаров, чтобы не нарушить работу с обычными EAN-13 и внутренними штрихкодами магазина (начинающимися, например, на 20 или 29).