Как разрешить использование одинаковых штрихкодов для разных товаров в 1С с учетом дополнительного кода?

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

Многие пользователи, работающие с периодическими изданиями (журналами, газетами), сталкиваются с проблемой: одно и то же основное издание имеет один и тот же штрихкод EAN-13, но разные номера выпусков, которые кодируются дополнительным штрихкодом (add-on). 1С по умолчанию запрещает ввод одинаковых штрихкодов, считая их дублями. Рассмотрим, как решить эту задачу профессионально.

Понимание природы проблемы

Стандартный штрихкод журналов (ISSN) часто состоит из основной части и дополнительного кода (EAN-2 или EAN-5). Проблема заключается в том, что сканер при настройках «по умолчанию» может считывать только основную часть кода, игнорируя номер выпуска. Чтобы 1С могла различать выпуски, нам нужно добиться того, чтобы сканер передавал полный код, либо настроить логику 1С на учет дополнительных признаков.

Метод 1: Программное отключение контроля уникальности

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

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


Если мНеРазрешитьНеуникальныеШтрихкоды Тогда 
    Для Каждого ТекущаяЗапись Из ЭтотОбъект Цикл 
        Если ЗначениеЗаполнено(ТекущаяЗапись.ШтрихКод) Тогда 
            Запрос = Новый Запрос(
            "ВЫБРАТЬ ПЕРВЫЕ 1 
            | РегШтрихкоды.Владелец КАК Владелец, 
            | РегШтрихкоды.Штрихкод КАК Штрихкод 
            | ИЗ РегистрСведений.Штрихкоды КАК РегШтрихкоды 
            | ГДЕ РегШтрихкоды.Штрихкод = &ШтрихКод 
            | И РегШтрихкоды.ПредставлениеШтрихкода = &ПредставлениеШтрихкода"); 
            Запрос.УстановитьПараметр("ШтрихКод", ТекущаяЗапись.ШтрихКод); 
            Запрос.УстановитьПараметр("ПредставлениеШтрихкода", ТекущаяЗапись.ПредставлениеШтрихкода); 
            РезультатЗапроса = Запрос.Выполнить(); 
            Если Не РезультатЗапроса.Пустой() Тогда 
                Выборка = РезультатЗапроса.Выбрать(); 
                Выборка.Следующий(); 
                Сообщить("Штрихкод: " + Выборка.ШтрихКод + " уже имеет владельца!"); 
                Отказ = Истина; 
            КонецЕсли; 
        КонецЕсли; 
    КонецЦикла; 
КонецЕсли;

Метод 2: Использование характеристик номенклатуры

Более правильным архитектурным решением в 1С является использование ХарактеристикНоменклатуры. Рассмотрим пошаговый алгоритм настройки:

  1. Создайте для позиции номенклатуры (например, «Журнал А») несколько Характеристик, соответствующих номерам выпусков.
  2. Если стандартный механизм не позволяет задать уникальный штрихкод для каждой характеристики, попробуйте временный прием:
    • Создайте номенклатуру без характеристик.
    • Присвойте ей штрихкод и установите цену.
    • После сохранения измените вид номенклатуры на тот, который использует характеристики.
    • При сканировании система будет находить товар, а пользователю останется выбрать нужную характеристику из предложенного списка.

Важные рекомендации по работе со сканером

Перед тем как вносить изменения в конфигурацию 1С, убедитесь, что оборудование настроено верно:

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

← На главную