При работе с алкогольной продукцией в конфигурации 1С:Розница 2.2 (особенно на релизе 2.2.12.30) пользователи часто сталкиваются с критической ошибкой при оформлении продажи. В окне РМК (Рабочего места кассира) при сканировании старой акцизной марки (формата PDF417) система выдает сообщение: "В строке 1 не совпадает количество марок и количество алкогольной продукции". При этом в колонке «Количество» отображается значение «2», хотя фактически была отсканирована только одна бутылка. Примечательно, что при повторном сканировании той же марки проблема может исчезать, но для потоковой торговли это создает серьезные задержки.
В данной статье мы подробно разберем причины возникновения этой ситуации, проанализируем программный код и рассмотрим несколько способов решения — от оперативных исправлений до системных обновлений.
Проанализируем ситуацию: ошибка проявляется преимущественно на алкоголе со «старыми» марками, данные о которых еще отсутствуют в локальной информационной базе в справочнике ШтрихкодыУпаковокТоваров. Рассмотрим механику процесса сканирования в проблемном релизе:
ЧекККМ, событие добавления товара срабатывает дважды: первый раз при создании записи о новой марке, второй раз — в основной процедуре обработки штрихкода.Если нет возможности немедленно обновить конфигурацию до актуального релиза, мы можем внести изменения в код программы самостоятельно. Основная логическая ошибка кроется в модуле менеджера документа ЧекККМ. Нам необходимо скорректировать функцию, отвечающую за обработку данных штрихкода единицы алкогольной продукции.
Рассмотрим процедуру ОбработатьДанныеШтрихкодаЕдиницыАлкогольнойПродукции. В оригинальном коде релиза 2.2.12.30 присутствует строка, которая принудительно увеличивает количество товара, даже если оно уже было учтено при создании штрихкода упаковки.
Проанализируем фрагмент кода, который требует правки:
// Модуль менеджера документа ЧекККМ
// Функция предназначена для обработки считанного штрихкода
// акцизной марки старого (PDF417) и нового (Data Matrix) образцов
Функция ОбработатьДанныеШтрихкодаЕдиницыАлкогольнойПродукции(Форма, ДанныеШтрихкода, ПараметрыСканирования) Экспорт
// ... (подготовительный код поиска строки) ...
// ОШИБОЧНЫЙ УЧАСТОК:
// Система прибавляет количество из данных штрихкода к уже имеющемуся количеству в строке
СтрокаТовара.Количество = СтрокаТовара.Количество + ДанныеШтрихкода.Количество;
// ...
КонецФункции
Чтобы устранить «двоение» при первичном сканировании, необходимо закомментировать инкремент количества. Исправленный вариант будет выглядеть следующим образом:
// ИСПРАВЛЕННЫЙ ВАРИАНТ:
// Мы убираем прибавление, оставляя текущее значение количества в строке.
// Система сама корректно заполнит его при инициализации новой строки.
СтрокаТовара.Количество = СтрокаТовара.Количество; // + ДанныеШтрихкода.Количество;
Важно: Данную правку рекомендуется выполнять через механизм расширений. Это позволит сохранить поддержку конфигурации и избежать проблем при последующих автоматических обновлениях.
Поскольку проблема была официально признана критическим багом, компания 1С выпустила специальный патч (исправление). Это самый безопасный и правильный способ решения для тех, кто не хочет вручную менять код. Патч имеет идентификатор EF_00_00236109.
Разберем по шагам, как установить исправление:
Проблема несовпадения количества марок была полностью устранена в последующих ветках разработки. Рассмотрим версии, в которых ошибка уже не воспроизводится:
Если вы используете версию 2.2.13.11, учтите, что в ней ошибка еще может проявляться при определенных настройках сканера (например, в режиме эмуляции клавиатуры с лишними суффиксами).
Если исправить код или обновить программу прямо сейчас невозможно (например, кассир стоит на кассе в разгар рабочего дня), можно воспользоваться следующими приемами:
ШтрихкодыУпаковокТоваров уже создалась, второе сканирование пройдет по «гладкому» сценарию без вызова процедуры создания записи.Рассмотрим, почему это вообще стало ошибкой. С внедрением методики ЕГАИС 4.0 контроль за поштучным учетом алкоголя стал максимально строгим. Теперь каждая марка — это уникальный идентификатор, который жестко связан с конкретной единицей товара в документе. Когда программа ошибочно ставит «2» в поле количества, но при этом в таблице марок числится только один отсканированный штрихкод, система защиты РМК блокирует пробитие чека, так как такая продажа будет отклонена сервером ЕГАИС или приведет к расхождениям в остатках организации. Именно поэтому простое уменьшение количества вручную в чеке может не сработать — нужно, чтобы логика 1С:Розница правильно отработала момент регистрации марки в базе.