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

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

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

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

Выясним причину возникновения ошибки

Проанализируем ситуацию: ошибка проявляется преимущественно на алкоголе со «старыми» марками, данные о которых еще отсутствуют в локальной информационной базе в справочнике ШтрихкодыУпаковокТоваров. Рассмотрим механику процесса сканирования в проблемном релизе:

  1. Кассир сканирует акцизную марку (PDF417).
  2. Система инициирует поиск марки в справочнике упаковок. Если марка не найдена, программа запускает процесс ее создания и сопоставления с номенклатурой.
  3. Из-за архитектурного просчета в коде модуля менеджера документа ЧекККМ, событие добавления товара срабатывает дважды: первый раз при создании записи о новой марке, второй раз — в основной процедуре обработки штрихкода.
  4. В итоге в строку чека попадает одна единица товара от обработки марки и еще одна — от общего механизма добавления позиции. Программа видит 2 единицы товара, но привязанную марку — только одну. Это вызывает логический конфликт, так как по правилам ЕГАИС 4.0 количество марок должно строго соответствовать количеству продукции в строке.

Способ 1: Исправление программного кода (для разработчиков)

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

Рассмотрим процедуру ОбработатьДанныеШтрихкодаЕдиницыАлкогольнойПродукции. В оригинальном коде релиза 2.2.12.30 присутствует строка, которая принудительно увеличивает количество товара, даже если оно уже было учтено при создании штрихкода упаковки.

Проанализируем фрагмент кода, который требует правки:


// Модуль менеджера документа ЧекККМ
// Функция предназначена для обработки считанного штрихкода 
// акцизной марки старого (PDF417) и нового (Data Matrix) образцов

Функция ОбработатьДанныеШтрихкодаЕдиницыАлкогольнойПродукции(Форма, ДанныеШтрихкода, ПараметрыСканирования) Экспорт

    // ... (подготовительный код поиска строки) ...

    // ОШИБОЧНЫЙ УЧАСТОК:
    // Система прибавляет количество из данных штрихкода к уже имеющемуся количеству в строке
    СтрокаТовара.Количество = СтрокаТовара.Количество + ДанныеШтрихкода.Количество; 

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

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


// ИСПРАВЛЕННЫЙ ВАРИАНТ:
// Мы убираем прибавление, оставляя текущее значение количества в строке. 
// Система сама корректно заполнит его при инициализации новой строки.

СтрокаТовара.Количество = СтрокаТовара.Количество; // + ДанныеШтрихкода.Количество;

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

Способ 2: Установка официального исправления (патча)

Поскольку проблема была официально признана критическим багом, компания 1С выпустила специальный патч (исправление). Это самый безопасный и правильный способ решения для тех, кто не хочет вручную менять код. Патч имеет идентификатор EF_00_00236109.

Разберем по шагам, как установить исправление:

  1. Перейдем в раздел Администрирование — Обслуживание.
  2. Найдем пункт Обновление программы и выберем Установленные исправления (патчи).
  3. Если в списке нет указанного кода, нажмем кнопку «Установить исправление» (при наличии настроенного интернет-поддержки система скачает его автоматически).
  4. После установки патча необходимо перезапустить сеанс работы с программой.

Способ 3: Обновление конфигурации

Проблема несовпадения количества марок была полностью устранена в последующих ветках разработки. Рассмотрим версии, в которых ошибка уже не воспроизводится:

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

Временные организационные решения (Workarounds)

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

  1. Изменение порядка сканирования: Попробуйте сначала отсканировать обычный штрихкод товара (EAN-13), чтобы номенклатура появилась в чеке, а уже затем сканировать акцизную марку. В этом случае система часто корректно сопоставляет марку с уже существующей строкой без удвоения количества.
  2. Повторное сканирование: Как отмечают пользователи, при возникновении ошибки можно удалить ошибочную строку и пробить ту же бутылку еще раз. Поскольку при первом сканировании запись в справочнике ШтрихкодыУпаковокТоваров уже создалась, второе сканирование пройдет по «гладкому» сценарию без вызова процедуры создания записи.
  3. Настройка оборудования: Проверьте режим работы сканера. Ошибка чаще возникает в режиме Keyboard HID (эмуляция клавиатуры). Перевод сканера в режим Native COM (через драйвер 1С) позволяет системе более четко разделять события сканирования и уменьшает вероятность ложных срабатываний кода.

Связь с протоколами ЕГАИС

Рассмотрим, почему это вообще стало ошибкой. С внедрением методики ЕГАИС 4.0 контроль за поштучным учетом алкоголя стал максимально строгим. Теперь каждая марка — это уникальный идентификатор, который жестко связан с конкретной единицей товара в документе. Когда программа ошибочно ставит «2» в поле количества, но при этом в таблице марок числится только один отсканированный штрихкод, система защиты РМК блокирует пробитие чека, так как такая продажа будет отклонена сервером ЕГАИС или приведет к расхождениям в остатках организации. Именно поэтому простое уменьшение количества вручную в чеке может не сработать — нужно, чтобы логика 1С:Розница правильно отработала момент регистрации марки в базе.

← На главную