Как решить проблему неверного сопоставления DataMatrix при одинаковых штрихкодах EAN-13 в 1С:Розница?

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

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

Разберем техническую причину возникновения проблемы

Для начала проанализируем ситуацию с технической точки зрения. Код DataMatrix, наносимый на пачки сигарет, содержит в себе идентификатор GTIN (Global Trade Item Number), состоящий из 14 цифр. Важно понимать, что обычный линейный штрихкод EAN-13 является составной частью этого GTIN. Когда кассир сканирует марку, программный модуль интеграции с ИС МП (Честный ЗНАК) выполняет следующие действия:

  1. Извлекает GTIN из считанной последовательности символов.
  2. Преобразует его в формат штрихкода (отсекая лидирующие нули).
  3. Выполняет поиск в справочнике Штрихкоды (или регистре сведений Штрихкоды номенклатуры) с помощью стандартного метода НайтиПоШтрихкоду().

Проблема кроется в том, что если в вашей базе данных заведены две разные карточки номенклатуры (например, «Сигареты Х» по цене 150 руб. и «Сигареты Х» по цене 160 руб.) с одинаковым штрихкодом EAN-13, метод поиска вернет первую попавшуюся запись. Обычно это определяется внутренним идентификатором GUID или алфавитным порядком. Именно поэтому, даже если вы предварительно выбрали нужную позицию в чеке, система при сканировании марки «передумывает» и пытается привязать код к другой карточке, выдавая ошибку «код не соответствует номенклатуре».

Метод 1: Использование характеристик номенклатуры (Рекомендуемый)

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

Выполним следующие шаги для настройки:

  1. Перейдем в карточку номенклатуры и установим флаг «Использовать характеристики».
  2. Создадим для каждой цены отдельную характеристику (например, «МРЦ 150», «МРЦ 160»).
  3. Привяжем общий штрихкод EAN-13 к основной карточке номенклатуры (без указания конкретной характеристики, если это позволяет релиз) или создадим записи в регистре штрихкодов для каждой связки «Номенклатура + Характеристика».

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

Метод 2: Настройка уникальности штрихкодов

Проанализируем настройки системы, которые позволяют избежать появления дублей в будущем. Часто проблема возникает из-за того, что в программе отключен контроль уникальности.

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

  1. Зайдем в раздел Администрирование — Номенклатура.
  2. Найдем пункт «Настройки создания» или «Контролировать уникальность штрихкодов».
  3. Убедимся, что флаг установлен. Это заставит систему предупреждать пользователя при попытке присвоить уже существующий EAN-13 новой карточке товара.

Метод 3: Работа с регистром «Штрихкоды упаковок»

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

Чтобы исправить неверные привязки вручную, следует выполнить следующие действия:

Найдите в меню «Все функции» (или «Функции для технического специалиста») регистр сведений Штрихкоды упаковок. Несмотря на то, что автор темы упоминал его пустоту, в процессе работы он может наполняться автоматически. Если вы обнаружили там записи, где DataMatrix привязан к «старой» или «неправильной» номенклатуре — их необходимо удалить или перепривязать к актуальной позиции.

Метод 4: Особенности учета МРЦ в новых релизах

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

Важное замечание: Если вы используете очень старый релиз программы, настоятельно рекомендуем выполнить обновление. Логика работы с маркировкой в 1С менялась кардинально несколько раз в год вслед за изменениями законодательства.

Метод 5: Программная корректировка поиска (для разработчиков)

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

Пример логики, которую можно внедрить в расширение для модуля МенеджерОборудованияВызовСервера или аналогичного (в зависимости от релиза):


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

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

Заключение и рекомендации

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

Краткий алгоритм действий для исправления ситуации:

  1. Проверьте уникальность штрихкодов и удалите дубли, оставив штрихкод только на актуальных позициях.
  2. Если позиции с разными ценами должны существовать одновременно — перейдите на использование характеристик.
  3. Обновите 1С:Розница до актуального релиза, где механизмы работы с МРЦ и DataMatrix автоматизированы.
  4. Очистите регистр Штрихкоды упаковок, если в нем накопились ошибочные сопоставления.

Помните, что корректная настройка справочников на начальном этапе сэкономит значительное количество времени при проведении инвентаризаций и оперативной работе на кассе.

← На главную