Как настроить продажу табачных изделий по внутренним штрихкодам в 1С:Розница и избежать ошибки соответствия марки?

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

При автоматизации розничной торговли табачной продукцией многие организации сталкиваются со специфической проблемой. Для разделения сигарет по максимальным розничным ценам (МРЦ) в системе заводится учет по характеристикам, а на пачки наклеиваются внутренние штрихкоды (например, формата EAN-13, начинающиеся на «2»). Однако при продаже таких товаров в Рабочем месте кассира (РМК) возникает системный конфликт. После сканирования внутреннего штрихкода программа запрашивает марку, но при ее считывании выдает ошибку: «Код маркировки не соответствует номенклатуре» либо повторно открывает окно сканирования.

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

Выясняем причину: почему возникает конфликт штрихкодов?

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

  1. Кассир сканирует штрихкод, нанесенный на пачку. Если это внутренний штрихкод, система успешно находит карточку номенклатуры и соответствующую характеристику (например, «Сигареты N, МРЦ 150 руб.»).
  2. Поскольку для данной номенклатуры установлен признак маркируемой продукции (табак), программа переходит в режим ожидания считывания двухмерного кода DataMatrix (кода маркировки).
  3. Кассир сканирует марку с пачки сигарет.
  4. В этот момент программные алгоритмы конфигурации выполняют валидацию. Внутри кода маркировки по стандарту GS1 в обязательном порядке зашит глобальный идентификатор торговой единицы — GTIN (он всегда эквивалентен заводскому штрихкоду EAN-8 или EAN-13).
  5. Система извлекает этот GTIN из считанной марки и пытается сопоставить его со штрихкодом, по которому товар был добавлен в чек. Поскольку в чеке фигурирует ваш внутренний штрихкод (начинающийся на «2»), а из марки считан заводской GTIN производителя, программа обнаруживает расхождение и выдает предупреждение о несоответствии номенклатуры.

Таким образом, логика «1С» защищает систему от пересортицы (чтобы кассир не добавил в чек дешевые сигареты, а списал марку от дорогих), но блокирует возможность использования внутренних штрихкодов для ведения характеристик по МРЦ.


Вариант решения 1. Современный метод — отказ от характеристик и автоматический учет МРЦ из марки

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

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

  1. Отказываемся от учета по характеристикам для табачной продукции и прекращаем оклеивать пачки внутренними штрихкодами. Для каждой позиции сигарет создаем одну карточку номенклатуры и привязываем к ней заводской штрихкод EAN.
  2. Переходим в настройки интеграции с ИС МП (раздел «Администрирование» — «Настройки интеграции с ИС МП»).
  3. Включаем опцию контроля и учета максимальных розничных цен. В параметрах сканирования маркировки активируем флаг «Учитывать МРЦ».

При такой схеме кассир сканирует заводской штрихкод пачки (или сразу напрямую код маркировки DataMatrix). Система сама извлекает значение МРЦ из марки и автоматически устанавливает актуальную цену продажи в документе, пересчитывая ее на лету. Это полностью исключает ручной труд по наклейке штрихкодов и дублирование характеристик в базе данных.


Вариант решения 2. Наведение порядка в регистре штрихкодов упаковок

Если характеристики по какой-то причине необходимы (например, для специфического партионного или складского учета), проанализируем состояние регистра сведений, где хранятся привязки кодов. Очень часто ошибка несоответствия марки возникает из-за некорректно заполненных данных в базе.

Выясним, к чему привязаны штрихкоды в вашей системе:

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

Вариант решения 3. Программная доработка сопоставления штрихкодов (для разработчиков)

Если бизнес-процесс требует оставить и внутренние штрихкоды характеристик, и сканирование марки, придется воспользоваться «напильником» и изменить программный код проверки соответствия. Наша цель — объяснить системе, что внутренний штрихкод и считанный из марки заводской GTIN принадлежат одной и той же номенклатуре.

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

В конфигурации за проверку штрихкодов отвечает общий модуль интеграции с ИС МП (например, функции проверки в модуле ШтрихкодированиеМОТПКлиентСервер или модулях обработки ПроверкаИПодборПродукцииИСМП). Нам необходимо переопределить функцию сравнения считанного штрихкода с полученным из марки GTIN.

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


&Вместо("ПроверитьСоответствиеШтрихкодаИМарки")
Процедура Расш_ПроверитьСоответствиеШтрихкодаИМарки(Знач ШтрихкодТовара, Знач КодМаркировки, Отказ)
    
    // Получаем GTIN из считанного кода маркировки
    GTIN_ИзМарки = ПолучитьGTINИзКодаМаркировки(КодМаркировки);
    
    // Получаем номенклатуру по нашему внутреннему штрихкоду
    НоменклатураПоШК = ПолучитьНоменклатуруПоШтрихкоду(ШтрихкодТовара);
    
    // Получаем номенклатуру по GTIN из марки
    НоменклатураПоGTIN = ПолучитьНоменклатуруПоШтрихкоду(GTIN_ИзМарки);
    
    // Если обе номенклатуры ведут на одну и ту же карточку товара,
    // то разрешаем сопоставление, несмотря на разницу в характеристиках и ШК
    Если ЗначениеЗаполнено(НоменклатураПоШК) И (НоменклатураПоШК = НоменклатураПоGTIN) Тогда
        // Отключаем признак отказа, так как номенклатура совпадает
        Отказ = Ложь;
        Возврат;
    КонецЕсли;
    
    // Если это разные товары, вызываем стандартную проверку
    ПродолжитьВызов(ШтрихкодТовара, КодМаркировки, Отказ);
    
КонецПроцедуры

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

Важное предупреждение: При отключении жесткого контроля сопоставления возрастает риск человеческого фактора. Кассир может отсканировать внутренний штрихкод от одной марки сигарет, а считать марку с совершенно другой пачки. Система пропустит эту операцию, но при отправке чека в Честный Знак уйдут некорректные данные, что может повлечь за собой штрафные санкции за пересортицу маркированного товара.


Дополнительно: Ошибка распознавания алфавита маркировки

Иногда при сканировании марки табачной продукции возникает ошибка неверного формата штрихкода. Это связано с тем, что в старых релизах «1С:Розница 2.3» в таблице допустимых символов отсутствовали некоторые знаки (например, скобки), которые могут встречаться в кодах маркировки.

Рассмотрим функцию АлфавитКодамаркировки() в общем модуле ШтрихкодированиеМОТПКлиентСервер. В типовом коде она выглядит следующим образом:


Функция АлфавитКодамаркировки() Экспорт
    Возврат "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!""%&'*+-./_,:;=<>?";
КонецФункции

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

Для исправления этой ситуации добавьте недостающие символы в возвращаемую строку функции через расширение или обновите конфигурацию до актуального релиза, где эта ошибка уже исправлена разработчиками фирмы «1С».

← На главную