В современных версиях конфигураций 1С:Розница 3.0 и 1С:Управление нашей фирмой (УНФ) разработчики предусмотрели опцию «Использовать неуникальные штрихкоды товара». Это бывает необходимо в некоторых нишах бизнеса, но часто приводит к путанице и ошибкам в учете. В этой статье мы подробно разберем, как с помощью консоли запросов выявить все проблемные позиции, за которыми закреплены одинаковые штрихкоды.
Проанализируем ситуацию: когда в настройках программы включена возможность использования дублирующихся штрихкодов, система перестает блокировать запись, если такой код уже существует в базе. Это может произойти при загрузке данных из Excel, синхронизации с другими базами или из-за ошибок поставщика, который маркирует разные товары (например, разные цвета одной модели) одинаковыми кодами EAN-13.
Рассмотрим риски, которые несет такая ситуация:
Выясним причину, почему простые отчеты часто не показывают проблему наглядно. Чтобы найти дубли, нам нужно обратиться к регистру сведений ШтрихкодыНоменклатуры. Основная задача — сгруппировать записи по полю Штрихкод и отобрать те группы, где количество записей больше одной.
Проанализируем типичную ошибку начинающих разработчиков: группировку по номенклатуре. Если мы сгруппируем данные по номенклатуре, мы найдем товары, у которых много разных штрихкодов. Нам же нужно обратное — найти штрихкоды, у которых много разной номенклатуры.
Рассмотрим наиболее структурированный способ решения задачи. Мы сначала найдем все «плохие» штрихкоды во временную таблицу, а затем соединим их с основной таблицей регистра, чтобы увидеть названия товаров.
// Шаг 1: Помещаем во временную таблицу штрихкоды, которые встречаются более 1 раза
ВЫБРАТЬ
ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод
ПОМЕСТИТЬ ВТ_ДублиШК
ИЗ
РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
СГРУППИРОВАТЬ ПО
ШтрихкодыНоменклатуры.Штрихкод
ИМЕЮЩИЕ
КОЛИЧЕСТВО(ШтрихкодыНоменклатуры.Штрихкод) > 1;
////////////////////////////////////////////////////////////////////////////////
// Шаг 2: Выбираем всю информацию по этим штрихкодам
ВЫБРАТЬ
ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод,
ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура,
ШтрихкодыНоменклатуры.Характеристика КАК Характеристика,
ШтрихкодыНоменклатуры.ЕдиницаИзмерения КАК ЕдиницаИзмерения
ИЗ
РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ДублиШК КАК ВТ_ДублиШК
ПО ШтрихкодыНоменклатуры.Штрихкод = ВТ_ДублиШК.Штрихкод
УПОРЯДОЧИТЬ ПО
Штрихкод
В этом запросе мы используем ВНУТРЕННЕЕ СОЕДИНЕНИЕ, которое работает как фильтр: в итоговую выборку попадут только те записи из регистра, чьи штрихкоды присутствуют в нашем списке дублей.
Посмотрим на более лаконичный вариант, который можно быстро вставить в Консоль запросов или использовать при создании динамического списка. Здесь мы используем условие ГДЕ ... В (...).
ВЫБРАТЬ
Штрихкоды.Штрихкод КАК Штрихкод,
Штрихкоды.Номенклатура КАК Номенклатура,
Штрихкоды.Характеристика КАК Характеристика,
Штрихкоды.Упаковка КАК Упаковка
ИЗ
РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
ГДЕ
Штрихкоды.Штрихкод В
(ВЫБРАТЬ
Т.Штрихкод
ИЗ
РегистрСведений.ШтрихкодыНоменклатуры КАК Т
СГРУППИРОВАТЬ ПО
Т.Штрихкод
ИМЕЮЩИЕ
КОЛИЧЕСТВО(Т.Штрихкод) > 1)
УПОРЯДОЧИТЬ ПО
Штрихкоды.Штрихкод
Этот метод удобен тем, что он представляет собой единую конструкцию. Мы выбираем поля Номенклатура и Штрихкод, ограничивая выборку только теми кодами, которые возвращает вложенный запрос (подзапрос).
Для того чтобы воспользоваться предложенными решениями, нам не обязательно заходить в конфигуратор. Разберем по шагам, как выполнить это в пользовательском режиме:
Штрихкод будут идти одинаковые значения, а в колонке Номенклатура — разные товары, которым они принадлежат.Проанализировав полученный список, мы должны принять решение о том, как устранить дубли. Просто удалить записи из регистра часто недостаточно, так как штрихкоды могут быть уже напечатаны на этикетках.
Рекомендуем следующий алгоритм действий:
Таким образом, использование языка запросов 1С позволяет быстро и точно локализовать проблему «смешанных» штрихкодов, обеспечивая чистоту справочников и высокую скорость обслуживания на кассовых узлах.