Почему при сканировании марки в реализации 1С:Розница количество увеличивается сразу до 3?

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

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

Разберем механику проблемы

Прежде всего, проанализируем ситуацию: почему ошибка проявляется именно в документе реализации, а не в РМК? Ответ кроется в различных механизмах обработки событий торгового оборудования. В РМК используется специализированный «движок» обработки ввода, который жестко контролирует каждый считанный символ. В обычном же документе (оптовая отгрузка) задействуется стандартная Библиотека стандартных подсистем (БСП) и Библиотека интеграции с ГИС МТ (БИГИС).

Когда вы сканируете код DataMatrix, система должна выполнить несколько действий: опознать штрихкод, найти номенклатуру, проверить статус марки и добавить строку в таблицу. Если логика этих процессов дублируется, возникает «лишняя единица».

Шаг 1: Смена режима работы сканера (Keyboard vs COM)

Выясним наиболее вероятную причину — работу сканера в режиме эмуляции клавиатуры (Keyboard Wedge). Это самый «проблемный» режим для маркировки. Рассмотрим, что происходит «под капотом»:

  1. Сканер считывает марку и передает её в 1С как последовательность нажатий клавиш.
  2. Система реагирует на это как на ввод обычного линейного штрихкода. Обрабатывается событие ВнешнееСобытие или перехват ввода, и в документ добавляется 1 единица товара.
  3. Следом срабатывает механизм обработки маркировки, который анализирует DataMatrix. Из-за специфики кода в обычном документе этот механизм может не «увидеть», что строка уже создана, и инициирует добавление или обновление количества еще раз.

Решение: Нам необходимо перевести сканер в режим эмуляции COM-порта (VCP). Проанализируем, как это сделать:

В режиме COM-порта данные передаются единым пакетом, что исключает двойную интерпретацию события системой.

Шаг 2: Проверка патчей БИГИС (Библиотека интеграции с ГИС МТ)

Если перевод на COM-порт не помог, проанализируем версию конфигурации. В релизах «Розницы» версий 2.3.11–2.3.15 наблюдалась программная ошибка в процедурах обработки сканирования для документов оптовой торговли.

Система считывает код, ищет номенклатуру по GTIN (извлеченному из марки) и добавляет строку. Однако процедура проверки марки не «привязывается» корректно к текущей строке, а создает конфликт в оперативной памяти, из-за чего счетчик увеличивается некорректно.

Рассмотрим, что нужно сделать:

  1. Проверьте наличие установленных исправлений (патчей) в разделе Администрирование — Обслуживание — Обновление программы — Установленные исправления.
  2. Ищите патчи с префиксами EF_..., в описании которых упоминается «Маркировка» или «Обработка сканирования».
  3. Если вы используете версию 2.3.15 и выше, убедитесь, что библиотека БИГИС актуальна. Часто разработчики выпускают критические патчи вне графика минорных обновлений всей конфигурации.

Шаг 3: Настройка суффикса сканера

Посмотрим на ситуацию со стороны драйвера. Если сканер после передачи данных марки посылает символ возврата каретки (CR или Enter, код #13), 1С в обычном документе может интерпретировать это как команду завершения ввода. В некоторых случаях это заставляет систему дважды заходить в процедуру поиска товара в табличной части.

Попробуем изменить настройки:

Шаг 4: Проверка дублей в регистре «Штрихкоды упаковок»

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

Проанализируем состояние регистров:

  1. Перейдите в Функции для технического специалиста.
  2. Найдите регистр сведений ШтрихкодыНоменклатуры и регистр ШтрихкодыУпаковок. При работе с табаком часто требуется предварительное сопоставление марок с номенклатурой.
  3. Выполните поиск по штрихкоду того товара, который «троит».
  4. Если обнаружены дублирующие записи для одной и той же номенклатуры, их необходимо очистить.

Шаг 5: Анализ настроек автоматической фиксации

В настройках сканирования для документов может быть активна опция автоматической фиксации кода маркировки. Рассмотрим следующий алгоритм:

Если при сканировании марки у вас открывается модальное окно проверки (где нужно подтвердить марку), а в это время в основной табличной части за окном уже изменилось количество — это явный признак конфликта. Иногда это происходит из-за настроек, устанавливающих запрет продажи при отсутствии ответа от Честного знака. Код отработал в «фоне» как обычный штрихкод и в «активном окне» как марка.

Посмотрим, как это исправить:

Пример анализа кода (для разработчиков)

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


// В формах документов часто встречается подобный вызов:
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
    Если Не ВводДоступен() Тогда
        Возврат;
    КонецЕсли;
    
    // Если здесь происходит вызов общего модуля обработки маркировки 
    // и одновременно стандартной обработки штрихкода БСП,
    // количество может задвоиться.
    ОбработатьСканирование(Данные); 
КонецПроцедуры

В случае с маркировкой, функция ОбработатьСканирование должна четко разделять: если считан ТипШтрихкода.DataMatrix, то поиск по обычному штрихкоду должен быть блокирован. В РМК эта логика реализована более глубоко, в то время как в формах обычных документов она может требовать ручной корректировки или установки тех самых патчей от 1С.

Резюме

Чтобы решить проблему с «количеством 3» при сканировании второй марки, выполните следующие действия в строгом порядке:

  1. Главное: Переведите сканер в режим COM-порта.
  2. Установите все актуальные патчи (исправления) для вашей версии «1С:Розница».
  3. Убедитесь, что в системе нет дублей штрихкодов для этой номенклатуры.
  4. Проверьте настройки суффикса в драйвере оборудования (попробуйте убрать #13).

Как правило, переход на COM-интерфейс решает 90% подобных проблем, так как он позволяет программе однозначно идентифицировать источник данных и тип события, не смешивая его с клавиатурным вводом.

← На главную