В работе с конфигурацией 1С:Розница 2.3.6.27 (и смежных релизах) пользователи часто сталкиваются со странным поведением системы: товар прекрасно отображается в справочнике номенклатуры, его штрихкод виден в регистрах, однако при попытке продать этот товар через рабочее место кассира (РМК) система выдает ошибку "Товар не найден". Особенно часто это проявляется в распределенных информационных базах (РИБ) и касается специфических форматов, таких как EAN8.
В рамках этой статьи мы подробно разберем, почему возникает данная проблема, проанализируем механизмы поиска в современном РМК и выработаем пошаговую инструкцию по восстановлению работоспособности системы. Рассмотрим ситуацию глазами технического специалиста и пользователя, столкнувшегося с этим сбоем.
Начиная с версии 2.3, интерфейс РМК в "1С:Рознице" был существенно переработан. Одним из ключевых изменений стало использование механизмов полнотекстового поиска для ускорения подбора товаров. В отличие от обычного списка номенклатуры в разделе НСИ, который обращается к базе данных напрямую через запросы, РМК может полагаться на предварительно построенный индекс.
Выясним причину сбоя: если индекс полнотекстового поиска поврежден или не был обновлен после синхронизации в подчиненном узле РИБ, РМК "не знает" о существовании новых штрихкодов, хотя физически в таблицах базы данных они присутствуют. Разберем, как исправить эту ситуацию:
После завершения переиндексации обязательно проверим поиск в РМК. Если товар начал находиться, значит, проблема заключалась в механизме кэширования поисковых данных.
Проанализируем ситуацию, когда штрихкоды EAN13 считываются корректно, а EAN8 игнорируются. Это связано с алгоритмами нормализации строки, которые применяются в коде РМК. В релизе 2.3.6.27 механизмы обработки ввода со сканера стали более строго валидировать длину входящей последовательности символов.
Иногда система пытается привести любой короткий код к формату EAN13, дополняя его ведущими нулями (например, превращая "12345670" в "0000012345670"). Если в регистре Штрихкоды запись хранится без этих нулей, сопоставление не сработает. Рассмотрим программный аспект: в общих модулях, отвечающих за работу с торговым оборудованием (например, МенеджерОборудованияВызовСервера), функции поиска могут иметь разные ветки исполнения для ручного ввода и для события сканера.
Почему помогает перезапись штрихкода вручную? При открытии формы номенклатуры и повторном сохранении штрихкода (удаление и создание заново) срабатывает обработчик события ПриЗаписи, который нормализует данные и записывает их в регистр в том виде, который текущий релиз конфигурации считает эталонным. Это "проталкивает" данные в индекс поиска и обновляет внутренние идентификаторы.
Проверим настройки самого рабочего места. В "Рознице 2.3" появились Профили РМК, которые позволяют гибко настраивать поведение интерфейса. Посмотрим на параметры поиска:
Для диагностики этого момента воспользуемся тестом подключаемого оборудования. Перейдем в Администрирование — Подключаемое оборудование, выберем сканер и нажмем Тест устройства. Отсканируем проблемный EAN8. Если в поле "Результат" мы видим лишние символы или пробелы, необходимо перенастроить сам сканер или параметры его драйвера в 1С.
В распределенных базах данных часто возникает ситуация "зависания" локального кэша платформы. Даже если обмен данными прошел успешно и в регистре сведений Штрихкоды появилась нужная запись, программный код может обращаться к устаревшим данным, хранящимся в сеансе пользователя.
Разберем шаги по очистке кэша для исправления этой проблемы:
/ClearCache в дополнительных параметрах запуска информационной базы.Если вышеперечисленные методы не помогли, нам, как программистам, необходимо локализовать место, где "теряется" штрихкод. Рассмотрим, какие методы следует проанализировать в конфигураторе.
Основная точка входа при сканировании в РМК — это процедура обработки внешнего события. Нам нужно найти место, где вызывается поиск номенклатуры. Обычно это функции, использующие РегистрыСведений.Штрихкоды.НайтиПоШтрихкоду() или специализированные методы в общем модуле ШтрихкодыУзловСервер.
Посмотрим на пример логики, которую можно проверить в отладке:
// Пример упрощенной логики поиска, которую стоит проверить
ДанныеШтрихкода = РегистрыСведений.Штрихкоды.СоздатьКлючЗаписи(Новый Структура("Штрихкод", СчитанныйШтрихкод));
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Штрихкоды.Владелец КАК Номенклатура,
| Штрихкоды.Характеристика КАК Характеристика,
| Штрихкоды.Упаковка КАК Упаковка
|ИЗ
| РегистрСведений.Штрихкоды КАК Штрихкоды
|ГДЕ
| Штрихкоды.Штрихкод = &Штрихкод";
Запрос.УстановитьПараметр("Штрихкод", СчитанныйШтрихкод);
Результат = Запрос.Выполнить();
Если в консоли запросов этот код находит товар, а в РМК — нет, значит, проблема в надстройках над поиском (например, в расширениях или в использовании индекса ППД вместо прямого запроса к таблице). Также проанализируем тип данных переменной СчитанныйШтрихкод. В некоторых релизах некорректно обрабатываются типы Строка и наличие в них невидимых символов (символов переноса строки CR/LF).
Подводя итог, если ваша 1С:Розница 2.3.6.27 перестала видеть штрихкоды, выполните следующие действия в указанном порядке:
EAN8.Следование этим шагам позволит вам восстановить процесс продаж и избежать простоев на кассовых узлах.