Как найти штрихкоды, которые закреплены за разными товарами в 1С:Розница 3.0

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

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

Почему появляются неуникальные штрихкоды и чем они опасны

Проанализируем ситуацию: когда в настройках программы включена возможность использования дублирующихся штрихкодов, система перестает блокировать запись, если такой код уже существует в базе. Это может произойти при загрузке данных из Excel, синхронизации с другими базами или из-за ошибок поставщика, который маркирует разные товары (например, разные цвета одной модели) одинаковыми кодами EAN-13.

Рассмотрим риски, которые несет такая ситуация:

  1. Замедление работы кассы: При сканировании такого кода в Рабочем месте кассира (РМК) система не добавит товар сразу, а откроет окно выбора. Кассиру придется вручную искать нужную позицию в списке.
  2. Пересортица: В спешке сотрудники часто выбирают первую попавшуюся позицию из предложенного списка, что ведет к искажению остатков.
  3. Проблемы с маркировкой и маркетплейсами: Системы типа «Честный ЗНАК» или площадки Wildberries/Ozon требуют строгой уникальности кодов. Наличие дублей в базе 1С может заблокировать выгрузку товаров.

Разбор логики поиска дублей через запрос

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

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

Вариант 1: Использование временных таблиц (Оптимальный способ)

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


// Шаг 1: Помещаем во временную таблицу штрихкоды, которые встречаются более 1 раза
ВЫБРАТЬ
    ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод
ПОМЕСТИТЬ ВТ_ДублиШК
ИЗ
    РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
СГРУППИРОВАТЬ ПО
    ШтрихкодыНоменклатуры.Штрихкод
ИМЕЮЩИЕ
    КОЛИЧЕСТВО(ШтрихкодыНоменклатуры.Штрихкод) > 1;

////////////////////////////////////////////////////////////////////////////////
// Шаг 2: Выбираем всю информацию по этим штрихкодам
ВЫБРАТЬ
    ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод,
    ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура,
    ШтрихкодыНоменклатуры.Характеристика КАК Характеристика,
    ШтрихкодыНоменклатуры.ЕдиницаИзмерения КАК ЕдиницаИзмерения
ИЗ
    РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ДублиШК КАК ВТ_ДублиШК
    ПО ШтрихкодыНоменклатуры.Штрихкод = ВТ_ДублиШК.Штрихкод
УПОРЯДОЧИТЬ ПО
    Штрихкод

В этом запросе мы используем ВНУТРЕННЕЕ СОЕДИНЕНИЕ, которое работает как фильтр: в итоговую выборку попадут только те записи из регистра, чьи штрихкоды присутствуют в нашем списке дублей.

Вариант 2: Компактный запрос с использованием подзапроса

Посмотрим на более лаконичный вариант, который можно быстро вставить в Консоль запросов или использовать при создании динамического списка. Здесь мы используем условие ГДЕ ... В (...).


ВЫБРАТЬ
    Штрихкоды.Штрихкод КАК Штрихкод,
    Штрихкоды.Номенклатура КАК Номенклатура,
    Штрихкоды.Характеристика КАК Характеристика,
    Штрихкоды.Упаковка КАК Упаковка
ИЗ
    РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
ГДЕ
    Штрихкоды.Штрихкод В
        (ВЫБРАТЬ
            Т.Штрихкод
        ИЗ
            РегистрСведений.ШтрихкодыНоменклатуры КАК Т
        СГРУППИРОВАТЬ ПО
            Т.Штрихкод
        ИМЕЮЩИЕ
            КОЛИЧЕСТВО(Т.Штрихкод) > 1)
УПОРЯДОЧИТЬ ПО
    Штрихкоды.Штрихкод

Этот метод удобен тем, что он представляет собой единую конструкцию. Мы выбираем поля Номенклатура и Штрихкод, ограничивая выборку только теми кодами, которые возвращает вложенный запрос (подзапрос).

Как выполнить этот запрос в программе

Для того чтобы воспользоваться предложенными решениями, нам не обязательно заходить в конфигуратор. Разберем по шагам, как выполнить это в пользовательском режиме:

  1. Откройте Консоль запросов (обычно она доступна в подразделе «Для разработчиков» или подключается как внешняя обработка).
  2. Скопируйте текст любого из приведенных выше запросов в поле ввода текста запроса.
  3. Нажмите кнопку «Выполнить».
  4. В результате вы получите таблицу, где в колонке Штрихкод будут идти одинаковые значения, а в колонке Номенклатура — разные товары, которым они принадлежат.

Рекомендации по исправлению данных

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

Рекомендуем следующий алгоритм действий:

Таким образом, использование языка запросов 1С позволяет быстро и точно локализовать проблему «смешанных» штрихкодов, обеспечивая чистоту справочников и высокую скорость обслуживания на кассовых узлах.

← На главную