Многие пользователи, работающие с периодическими изданиями (журналами, газетами), сталкиваются с проблемой: одно и то же основное издание имеет один и тот же штрихкод EAN-13, но разные номера выпусков, которые кодируются дополнительным штрихкодом (add-on). 1С по умолчанию запрещает ввод одинаковых штрихкодов, считая их дублями. Рассмотрим, как решить эту задачу профессионально.
Стандартный штрихкод журналов (ISSN) часто состоит из основной части и дополнительного кода (EAN-2 или EAN-5). Проблема заключается в том, что сканер при настройках «по умолчанию» может считывать только основную часть кода, игнорируя номер выпуска. Чтобы 1С могла различать выпуски, нам нужно добиться того, чтобы сканер передавал полный код, либо настроить логику 1С на учет дополнительных признаков.
Если вы уверены, что хотите разрешить дублирование, но только при определенных условиях, необходимо модифицировать процедуру проверки уникальности штрихкода. Это можно сделать через РегистрСведений.Штрихкоды. Мы можем изменить алгоритм так, чтобы система разрешала сохранение, если основной код совпадает, но поля представления или характеристики отличаются.
Для реализации этого подхода можно модифицировать код, отвечающий за проверку. Рассмотрим пример кода, который предотвращает ошибку при совпадении штрихкода, но учитывает «представление» как дополнительный ключ:
Если мНеРазрешитьНеуникальныеШтрихкоды Тогда
Для Каждого ТекущаяЗапись Из ЭтотОбъект Цикл
Если ЗначениеЗаполнено(ТекущаяЗапись.ШтрихКод) Тогда
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
| РегШтрихкоды.Владелец КАК Владелец,
| РегШтрихкоды.Штрихкод КАК Штрихкод
| ИЗ РегистрСведений.Штрихкоды КАК РегШтрихкоды
| ГДЕ РегШтрихкоды.Штрихкод = &ШтрихКод
| И РегШтрихкоды.ПредставлениеШтрихкода = &ПредставлениеШтрихкода");
Запрос.УстановитьПараметр("ШтрихКод", ТекущаяЗапись.ШтрихКод);
Запрос.УстановитьПараметр("ПредставлениеШтрихкода", ТекущаяЗапись.ПредставлениеШтрихкода);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Сообщить("Штрихкод: " + Выборка.ШтрихКод + " уже имеет владельца!");
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Более правильным архитектурным решением в 1С является использование ХарактеристикНоменклатуры. Рассмотрим пошаговый алгоритм настройки:
Характеристик, соответствующих номерам выпусков.Перед тем как вносить изменения в конфигурацию 1С, убедитесь, что оборудование настроено верно:
Add-on: Проверьте инструкцию к вашему сканеру. Включите поддержку чтения кодов EAN-2 или EAN-5. Без этого сканер просто «отрежет» вторую часть кода, и никакие программные ухищрения не помогут, так как в 1С будет приходить только одна и та же строка 977....Разбирая ситуацию, мы выяснили, что «Представление штрихкода» в типовых конфигурациях чаще всего является информационным полем и не несет функциональной нагрузки при поиске. Поэтому наиболее надежным способом будет либо доработка кода проверки в РегистреСведений, либо принудительное создание уникальных кодов для каждого выпуска путем объединения основного и дополнительного кода в одну строку при регистрации в базе данных.