При работе с маркированным табаком в программе 1С:Розница пользователи часто сталкиваются с ситуацией, когда при сканировании кода DataMatrix система автоматически выбирает не ту номенклатурную позицию. Это происходит даже в тех случаях, когда карточка товара выбирается вручную перед сканированием марки. В данной статье мы подробно разберем, почему возникает эта ошибка, как устроены механизмы поиска в 1С и какие стратегии исправления ситуации существуют на текущий момент.
Для начала проанализируем ситуацию с технической точки зрения. Код DataMatrix, наносимый на пачки сигарет, содержит в себе идентификатор GTIN (Global Trade Item Number), состоящий из 14 цифр. Важно понимать, что обычный линейный штрихкод EAN-13 является составной частью этого GTIN. Когда кассир сканирует марку, программный модуль интеграции с ИС МП (Честный ЗНАК) выполняет следующие действия:
Штрихкоды (или регистре сведений Штрихкоды номенклатуры) с помощью стандартного метода НайтиПоШтрихкоду().Проблема кроется в том, что если в вашей базе данных заведены две разные карточки номенклатуры (например, «Сигареты Х» по цене 150 руб. и «Сигареты Х» по цене 160 руб.) с одинаковым штрихкодом EAN-13, метод поиска вернет первую попавшуюся запись. Обычно это определяется внутренним идентификатором GUID или алфавитным порядком. Именно поэтому, даже если вы предварительно выбрали нужную позицию в чеке, система при сканировании марки «передумывает» и пытается привязать код к другой карточке, выдавая ошибку «код не соответствует номенклатуре».
Рассмотрим наиболее правильный с точки зрения методологии 1С способ решения. Разработчики системы настаивают на том, что один GTIN должен соответствовать одной карточке номенклатуры. Различия в цене или МРЦ (Максимальной розничной цене) должны отражаться через Характеристики.
Выполним следующие шаги для настройки:
При таком подходе система при сканировании DataMatrix найдет единую номенклатуру, а затем предложит пользователю выбрать нужную характеристику (цену) или определит её автоматически, если настроено сопоставление по МРЦ, зашитому в марке.
Проанализируем настройки системы, которые позволяют избежать появления дублей в будущем. Часто проблема возникает из-за того, что в программе отключен контроль уникальности.
Посмотрим, как это проверить:
Выясним причину, по которой даже при пустом справочнике «Штрихкоды упаковок» система продолжает выдавать ошибку. В старых релизах 1С:Розница (например, 2.3.1.47) механизмы кэширования связей марки и товара работали несовершенно. Программа может создавать временные сопоставления в момент первого сканирования в текущем сеансе работы.
Чтобы исправить неверные привязки вручную, следует выполнить следующие действия:
Найдите в меню «Все функции» (или «Функции для технического специалиста») регистр сведений Штрихкоды упаковок. Несмотря на то, что автор темы упоминал его пустоту, в процессе работы он может наполняться автоматически. Если вы обнаружили там записи, где DataMatrix привязан к «старой» или «неправильной» номенклатуре — их необходимо удалить или перепривязать к актуальной позиции.
Рассмотрим, как современные версии 1С (начиная с 2.3.10 и выше) решают проблему разных цен. Теперь в программе реализован механизм автоматического извлечения МРЦ прямо из кода маркировки. Это позволяет:
Важное замечание: Если вы используете очень старый релиз программы, настоятельно рекомендуем выполнить обновление. Логика работы с маркировкой в 1С менялась кардинально несколько раз в год вслед за изменениями законодательства.
Если обновление конфигурации невозможно по причине сильных доработок, проанализируем возможность внесения изменений в программный код через расширение. Нам необходимо переопределить поведение функции поиска номенклатуры по штрихкоду.
Пример логики, которую можно внедрить в расширение для модуля МенеджерОборудованияВызовСервера или аналогичного (в зависимости от релиза):
// В обработчике сканирования штрихкода
Если ТипШтрихкода = "DataMatrix" Тогда
// Извлекаем GTIN
GTIN = ИзвлечьGTINИзМарки(СчитанныйШтрихкод);
// Вместо НайтиПоШтрихкоду() используем запрос,
// который вернет ВСЕ позиции с этим штрихкодом
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Штрихкоды.Владелец КАК Номенклатура
|ИЗ
| РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
|ГДЕ
| Штрихкоды.Штрихкод = &Штрихкод";
Запрос.УстановитьПараметр("Штрихкод", GTIN);
Результат = Запрос.Выполнить().Выгрузить();
Если Результат.Количество() > 1 Тогда
// Вызываем диалог выбора пользователем, если найдено более одной позиции
ВыбратьНоменклатуруИзСписка(Результат);
КонецЕсли;
КонецЕсли;
Такой подход гарантирует, что система не будет принимать решение за кассира, если в данных есть неопределенность.
Подводя итог, можно сказать, что проблема «не той номенклатуры» — это следствие попытки вести учет табака старыми методами (созданием разных карточек на одну позицию с разными ценами) в условиях жестких требований маркировки.
Краткий алгоритм действий для исправления ситуации:
Штрихкоды упаковок, если в нем накопились ошибочные сопоставления.Помните, что корректная настройка справочников на начальном этапе сэкономит значительное количество времени при проведении инвентаризаций и оперативной работе на кассе.