В практике розничной и оптовой торговли нередко возникает ситуация, когда разные производители выпускают товары с идентичными штрихкодами, либо один и тот же производитель маркирует разные позиции одним кодом. В конфигурации 1С:Управление торговлей 11 (УТ 11) пользователи сталкиваются с жестким ограничением: система не позволяет закрепить один и тот же штрихкод за разными карточками номенклатуры. Рассмотрим подробнее, почему это происходит и какими способами можно обойти данное ограничение.
Для начала выясним, как технически реализовано хранение штрихкодов в системе. В УТ 11 данные о штрихкодах хранятся в регистре сведений ШтрихкодыНоменклатуры. Если мы откроем структуру этого регистра в конфигураторе, то увидим, что основным и единственным измерением является Штрихкод.
В архитектуре баз данных 1С это означает следующее: Штрихкод является уникальным ключом записи. Система физически не может хранить две разные строки с одинаковым значением в поле «Штрихкод». Именно поэтому никакие «галочки» в настройках создания номенклатуры (например, контроль уникальности по реквизитам или наименованию) не решают проблему. Эти настройки регулируют уникальность самих карточек в справочнике Номенклатура, но не влияют на логику работы регистра сведений. Разберем теперь доступные варианты решения.
Это наиболее корректный путь, если бизнес-процесс требует сохранения заводских кодов. С помощью механизма расширений мы можем изменить структуру данных, не снимая основную конфигурацию с поддержки. Проанализируем шаги, необходимые для реализации этого метода:
ШтрихкодыНоменклатуры новое измерение, например, Номенклатура или уникальный Идентификатор. Как только у регистра появляется второе измерение, уникальность начинает проверяться по совокупности всех измерений. Это позволит записать в базу несколько строк с одинаковым штрихкодом, если у них будут разные владельцы (товары).МенеджерОборудованияИсполнениеКлиент или специализированные модули подбора номенклатуры). Рассмотрим пример логики, которую необходимо внедрить:
// В процедуре обработки сканирования штрихкода
РезультатПоиска = РегистрыСведений.ШтрихкодыНоменклатуры.Выбрать(Новый Структура("Штрихкод", СканированныйКод));
Если РезультатПоиска.Количество() > 1 Тогда
// Если найдено более одного товара, вызываем форму выбора для оператора
ОткрытьФорму("ОбщаяФорма.ВыборНоменклатурыПоДублирующимсяШтрихкодам", ПараметрыВыбора);
Иначе
// Стандартная обработка добавления в документ
КонецЕсли;
Важный нюанс: При использовании такого метода работа оператора замедлится, так как при каждом сканировании «проблемного» кода системе придется прерывать процесс и запрашивать ручное уточнение товара.
Специалисты по складскому учету часто рекомендуют не дорабатывать программу, а изменить подход к маркировке. Если производитель допустил дублирование кодов, это считается нарушением стандартов GS1. В таком случае самым надежным способом избежать пересортицы является использование внутренних штрихкодов.
Разберем алгоритм действий по шагам:
200-299 (этот диапазон зарезервирован для внутреннего использования предприятиями).Это исключает человеческий фактор при подборе товара на кассе. Система мгновенно и однозначно определяет позицию, что критически важно для высоконагруженных точек продаж.
Проанализируем ситуацию, упомянутую в обсуждении: можно ли использовать характеристики для разделения товаров с одним кодом? В УТ 11 штрихкод назначается связке Номенклатура + Характеристика + Упаковка.
Если товары по своей сути являются разными позициями, попытка объединить их в одну карточку номенклатуры с разными характеристиками (например, «Производитель А» и «Производитель Б») может привести к проблемам в отчетах. Однако, даже в этом случае стандартная УТ 11 не позволит завести одинаковый штрихкод для разных характеристик одного товара. Система выдаст ошибку: «Такой штрихкод уже назначен». Таким образом, этот путь без доработки программного кода также является тупиковым.
Стоит отметить, что в конфигурации 1С:Розница штатно предусмотрена настройка «Использовать неуникальные штрихкоды». При ее активации система сама меняет логику работы с регистром. К сожалению, разработчики фирмы 1С не перенесли этот функционал в УТ 11, мотивируя это тем, что Управление Торговлей — это система более высокого уровня, где порядок в НСИ (Нормативно-справочной информации) является приоритетным.
Многие пользователи ошибочно пытаются снять флажки в разделе НСИ и администрирование -> Номенклатура -> Настройки создания. Важно понимать:
Поэтому, даже если вы отключите все проверки уникальности в настройках системы, регистр сведений ШтрихкодыНоменклатуры все равно будет выдавать ошибку на уровне платформы при попытке записи дубля в свое ключевое измерение.
Подводя итог, мы можем выделить две основные стратегии решения проблемы:
1. Если вы хотите сохранить типовую конфигурацию: Используйте перемаркировку. Это дисциплинирует складской учет и гарантирует отсутствие ошибок при продаже. Внутренний штрихкод — это стандарт индустрии для борьбы с некорректной маркировкой поставщика.
2. Если объем товаров с дублями слишком велик для перемаркировки: Привлекайте программиста для создания расширения. В расширении необходимо добавить измерение в регистр ШтрихкодыНоменклатуры и перехватить событие поиска штрихкода в формах документов, чтобы реализовать диалог выбора при обнаружении дублей.
Рассмотренные методы позволяют гибко подойти к решению задачи в зависимости от бюджета проекта и готовности к изменению бизнес-процессов компании.