Почему в 1С:Розница 2.2 сканер считывает товары, но не находит дисконтные карты и карты сотрудников?

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

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

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

Анализ механизма парсинга штрихкодов в конфигурации

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

Рассмотрим алгоритм обработки входящего штрихкода формата EAN-13:

  1. Диапазон кодов: Внутренние штрихкоды предприятия традиционно начинаются с цифры 2. С этой же цифры обычно начинаются штрихкоды фасованной продукции, весового товара, а также информационных карт (дисконтных, бонусных, регистрационных).
  2. Приоритет разбора весовых шаблонов: При получении 13-значного штрихкода система в первую очередь сопоставляет его начальные цифры с константами ПрефиксШтрихкодаВесовогоТовара и ПрефиксШтрихкодаШтучногоФасованногоТовара.
  3. Ошибочное расщепление кода: Если первые цифры штрихкода карты совпали с настроенным в системе префиксом (например, 21 или 23), алгоритм программы считает, что кассир отсканировал весовой или фасованный товар. Строка принудительно расщепляется по схеме: Префикс (2 знака) + SKU номенклатуры (5 знаков) + Вес/Количество (5 знаков) + Контрольный символ.
  4. Сбой поиска: Программа пытается найти номенклатуру по выделенной подстроке SKU. Естественно, такого товара в базе нет, парсер завершает работу с ошибкой, а до поиска в справочнике карт дело даже не доходит.

Главная сложность заключается в том, что проверка префиксов весовых и фасованных товаров выполняется алгоритмами 1С всегда, если в константах заданы их значения по умолчанию, даже если флаг весового учета снят в настройках программы.

Почему сканер не передает данные в окно по Alt+F7

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

Если торговое оборудование подключено через встроенный драйвер 1С:NativeApi или работает в режиме эмуляции COM-порта, сканер генерирует системное событие платформы ВнешнееСобытие. Модальное окно ручного ввода не способно перехватывать такие события драйвера — оно ожидает клавиатурный поток. При корректной работе системы открывать это окно для сканера не требуется: считывание бэйджа сотрудника или карты скидок должно происходить прямо в основном окне РМК.

Способ 1. Изменение префиксов весового товара в константах базы

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

Рассмотрим порядок действий по шагам:

  1. Перейдем в раздел «Администрирование» — «Настройки номенклатуры» — группа «Штрихкодирование».
  2. Проверим поля: Префикс штрихкода весового товара и Префикс штучного фасованного товара.
  3. Если эти поля скрыты, значит, отключена соответствующая функциональная опция. Чтобы получить доступ к настройкам, временно установим флаг «Весовой товар» в разделе номенклатуры, после чего поля станут видимыми.
  4. Установим в префиксах значения, которые не используются в организации (например, 98 или 99).
  5. Сохраним изменения и отключим признак весового товара обратно (если он не требуется).
  6. Альтернативный вариант: открыть главное меню, выбрать «Функции для технического специалиста» (или «Все функции»), перейти в раздел «Константы» и напрямую отредактировать значения констант ПрефиксШтрихкодаВесовогоТовара и ПрефиксШтрихкодаШтучногоФасованногоТовара.

После корректировки префиксов система перестанет расщеплять штрихкоды карт, и поиск в РМК начнет работать штатно.

Способ 2. Проверка настроек справочника «Виды дисконтных карт»

Если изменение префиксов не помогло, проанализируем параметры самих информационных карт. При переносе данных из предыдущих версий конфигураций структура карт могла перенестись некорректно.

  1. Откроем раздел «Маркетинг» — справочник «Виды дисконтных карт».
  2. Откроем нужный вид карты и перейдем на вкладку настроек штрихкодирования.
  3. Убедимся, что для данного вида карты указан правильный шаблон: длина кода (например, 13 символов) и диапазон номеров. Если фактический штрихкод не укладывается в заданный шаблон, подсистема лояльности проигнорирует внешнее событие сканера.

Способ 3. Программная корректировка логики поиска через расширение

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

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

Посмотрим на пример реализации перехвата штрихкода:


&Вместо("ОбработатьШтрихкод")
Функция Расш1_ОбработатьШтрихкод(ДанныеШтрихкода)

    Штрихкод = ДанныеШтрихкода.Штрихкод;
    
    // Проверяем наличие считанного штрихкода среди информационных карт
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |   ИнформационныеКарты.Ссылка КАК Карта
        |ИЗ
        |   Справочник.ИнформационныеКарты КАК ИнформационныеКарты
        |ГДЕ
        |   ИнформационныеКарты.КодКарты = &Штрихкод";
        
    Запрос.УстановитьПараметр("Штрихкод", Штрихкод);
    РезультатЗапроса = Запрос.Выполнить();
    
    Если НЕ РезультатЗапроса.Пустой() Тогда
        // Код принадлежит карте: передаем напрямую в алгоритм обработки карт,
        // минуя разбор шаблонов весовых и штучных товаров
        Возврат ОбработатьКартуПользователя(Штрихкод);
    КонецЕсли;

    // Если карта не обнаружена, продолжаем стандартный типовой разбор
    Возврат ПродолжитьВызов(ДанныеШтрихкода);

КонецФункции

Использование предварительной проверки позволяет полностью исключить ложное срабатывание весового парсера и сохраняет стабильность работы кассового узла при любых префиксах.

← На главную