Почему при сканировании одинаковых штрихкодов в 1С:Управление торговлей подставляется первый товар и как это исправить?

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

В торговой практике регулярно встречаются ситуации, когда разные товарные позиции имеют один и тот же штрихкод производителя. Классические примеры: одинаковый напиток в бутылках разного цвета с разной стоимостью, смена максимальной розничной цены (МРЦ) на сигаретах без изменения кода производителя, модификация ламп или других бытовых изделий, когда старая и новая ревизии продаются одновременно. При попытке настроить учет таких позиций в конфигурации 1С:Управление торговлей пользователи включают в настройках системы признак разрешения неуникальных штрихкодов. Однако при сканировании сканером в документах, в подборе или в режиме РМК окно выбора не появляется — программа автоматически подставляет первый попавшийся товар из базы. Разберем, почему система ведет себя именно так и какими способами можно организовать корректную работу.

Архитектурная причина поведения 1С:Управление торговлей

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

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

В процедурах обработки входящих данных от торгового оборудования выполняется запрос к регистру сведений. В тексте запроса либо используется директива ВЫБРАТЬ ПЕРВЫЕ 1, либо результат обрабатывается однократным вызовом метода Следующий(). Ветвление с открытием списка при наличии двух и более записей в логике УТ по умолчанию отсутствует. Программа находит первую подходящую запись по порядку выборки и сразу помещает найденную номенклатуру в табличную часть.

Решение 1. Программная доработка алгоритма поиска по штрихкоду

Если специфика бизнеса не позволяет отказаться от одинаковых заводских кодов, исправить ситуацию можно доработкой подсистемы обработки торгового оборудования. В современных редакциях конфигураций (УТ 11, КА, ERP) это выполняется с помощью механизма расширений конфигурации (файл с расширением .cfe), что позволяет сохранить основную конфигурацию на типовой поддержке без снятия с замка.

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

  1. Перехватываем процедуру обработки сканирования штрихкода в общем модуле подключаемого оборудования или модуле формы документа (например, метод обработки оповещения торгового оборудования).
  2. Модифицируем запрос к регистру сведений ШтрихкодыНоменклатуры, убирая ограничение на количество получаемых записей. Запрос должен возвращать таблицу всех номенклатурных позиций, упаковок и характеристик, привязанных к считанному коду.
  3. Анализируем количество полученных строк. Если найдена ровно одна запись, выполняем стандартное заполнение строки документа.
  4. Если записей больше одной, прерываем автоматическую вставку и вызываем модальную или блокирующую окно форму выбора номенклатуры. Для удобства оператора в эту форму рекомендуется передавать и выводить не только наименование, но и текущие остатки товаров на складе документа, а также цены, чтобы исключить выбор позиции, которой физически нет на остатках.

Посмотрим на примерную структуру логики проверки количества найденных строк в обработчике:


ТаблицаРезультатов = Запрос.Выполнить().Выгрузить();

Если ТаблицаРезультатов.Количество() = 1 Тогда
    ЗаполнитьСтрокуПоДаннымШтрихкода(ТаблицаРезультатов[0]);
ИначеЕсли ТаблицаРезультатов.Количество() > 1 Тогда
    ПараметрыОткрытия = Новый Структура;
    ПараметрыОткрытия.Вставить("СписокТоваров", ТаблицаРезультатов);
    ПараметрыОткрытия.Вставить("Штрихкод", СчитанныйШтрихкод);
    
    Оповещение = Новый ОписаниеОповещения("ПослеВыбораНоменклатурыИзСписка", ЭтотОбъект);
    ОткрытьФорму("Обработка.ВыборНоменклатурыПоШтрихкоду.Форма", ПараметрыОткрытия, ЭтотОбъект, , , , Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;

Обратите внимание: если используется базовая версия конфигурации («1С:УТ Базовая»), применение расширений и изменение кода заблокированы платформой. В этом случае проблему можно решить только организационными и учетными методами.

Решение 2. Организация внутренней перемаркировки товаров

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

Рассмотрим по шагам процесс маркировки внутренними кодами:

  1. На этапе приемки товара ответственный сотрудник с помощью сканера проверяет наличие штрихкода в базе. Если код уже закреплен за другой номенклатурой с отличной ценой или свойствами, товар откладывается для генерации нового кода.
  2. В программе генерируется внутренний штрихкод формата EAN-13. Для внутренних кодов выделен специальный префиксный диапазон (коды, начинающиеся с 20 по 29), который не пересекается с международными заводскими кодами GS1.
  3. Сформированный уникальный код распечатывается на принтере этикеток и наклеивается поверх заводского штрихкода на товар.

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

Решение 3. Использование характеристик и серий вместо дублирования номенклатуры

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

Проанализируем правильный подход к ведению такого учета:

  1. Учет по характеристикам. Если товары идентичны по названию, но имеют разные потребительские свойства (например, напиток в белой, зеленой и черной бутылке), создается одна карточка номенклатуры. Цветовые различия заводятся в справочнике ХарактеристикиНоменклатуры. В типовом механизме штрихкод привязывается к связке «Номенклатура + Характеристика». Если штрихкод общий на все цвета, программа при сканировании находит саму номенклатуру и штатно открывает стандартный запрос на выбор характеристики.
  2. Учет по сериям. Для товаров с меняющимися ценами или партиями (например, сигареты с разным МРЦ) применяется серийный учет. Номенклатура остается единой с неизменным штрихкодом производителя, а максимальная розничная цена фиксируется в конкретной серии или партии.
  3. Маркированная продукция (Честный ЗНАК). Для групп товаров, подлежащих обязательной маркировке, сканирование одномерного кода EAN-13 уходит на второй план. При считывании двухмерного кода DataMatrix система распознает уникальный серийный номер единицы продукции и криптографический код. Это обеспечивает автоматическую и однозначную идентификацию конкретной пачки или единицы товара без необходимости дублировать номенклатурные позиции.

Решение 4. Разделение контуров учета на Front-office и Back-office

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

В качестве кассовой программы (Front-office) внедряется 1С:Розница или специализированное рабочее место кассира (РМК). В этих решениях интерактивный выбор при наличии одинаковых штрихкодов работает из коробки: при сканировании на экране кассира сразу отображается окно со списком совпадений. Конфигурация 1С:Управление торговлей в такой схеме выступает как Back-office: в нее посредством регулярного обмена загружаются уже готовые документы продаж (Отчет о розничных продажах), где все товарные позиции четко сопоставлены и определены кассиром в момент чека.

Решение 5. Поиск и устранение существующих дублей штрихкодов

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

  1. Используем внешнюю обработку поиска дублирующихся штрихкодов или типовой отчет по штрихкодам номенклатуры с группировкой по полю штрихкода и отбором по количеству записей больше единицы.
  2. Выявляем все карточки номенклатуры, которые делят один и тот же штрихкод.
  3. Для устаревших, снятых с продажи или архивных позиций очищаем привязку к штрихкоду в регистре, оставляя код только у актуального активного товара.
  4. Если оба товара активно продаются, для одной из позиций генерируем внутренний уникальный штрихкод, распечатываем новые ценники/этикетки и перемаркировываем остатки на складе.
← На главную