В процессе работы в конфигурациях 1С (таких как «1С:Управление торговлей», «1С:ERP Управление предприятием», «1С:Комплексная автоматизация», «1С:Розница» или «1С:УНФ») пользователи нередко сталкиваются с системным сбоем при попытке сгенерировать новый штрихкод для карточки товара. Программа выдает блокирующее сообщение: «Нет свободных кодов в доступных диапазонах штучных штрихкодов. Штрихкод не сформирован». Примечательно, что эта ошибка может возникать даже в абсолютно новой базе данных, где еще не было создано ни одного штрихкода.
В этой статье мы подробно разберем технические причины возникновения данной ошибки, проанализируем поведение кода конфигурации в режиме отладки и рассмотрим пошаговые инструкции по ее устранению.
Для начала проанализируем, как система ищет и формирует свободные штрихкоды стандарта EAN-13. Внутренние штрихкоды штучных товаров обычно начинаются с префикса 20 (диапазон кодов от 2000000000000 до 2099999999999, предназначенный для внутреннего использования внутри предприятия). При нажатии на кнопку «Новый штрихкод» система обращается к специальной функции автогенерации.
Давайте посмотрим на участок кода, где происходит сбой:
Для Каждого СтрокаТЧ Из Диапазоны Цикл
Код = СтрокаТЧ.Код + 1;
Диапазон = СтрокаТЧ.Диапазон;
Прервать;
КонецЦикла;
Если Код = Неопределено Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияНетСвободныхКодовШтучныхШтрихкодов());
Возврат Неопределено;
КонецЕсли;
Проанализируем эту ситуацию. Если база данных абсолютно новая и в регистре сведений ШтрихкодыНоменклатуры нет ни одной записи, коллекция Диапазоны оказывается пустой. Цикл обхода коллекции не выполняется ни разу, и переменная Код сохраняет свое первоначальное значение Неопределено. В результате срабатывает следующее за ним условие проверки, и система аварийно завершает работу функции, сообщая об отсутствии свободных кодов.
Рассмотрим четыре основных метода решения этой проблемы — от быстрого обходного пути до системного исправления настроек.
Самый простой и быстрый способ заставить систему работать, если база данных пуста — вручную задать начальную точку отсчета. После этого алгоритм автогенерации сможет корректно отрабатывать операцию прибавления единицы (Код + 1).
Выполним следующие шаги:
2000000000000 (двенадцать нулей после двойки). Последний (тринадцатый) символ контрольной суммы система может рассчитать автоматически.После добавления этой записи коллекция Диапазоны при последующих обращениях к функции автогенерации больше не будет пустой. Программа найдет существующий код 2000000000000, успешно прибавит к нему единицу и продолжит автоматическую генерацию для всех последующих карточек товаров.
Если ручной ввод кода не помог или при попытке генерации массив диапазонов все равно остается пустым, это свидетельствует об отсутствии системных настроек префиксов. Выясним, где в различных конфигурациях задаются эти параметры.
В решениях «1С:Управление торговлей 11», «1С:ERP» и «1С:Комплексная автоматизация»:
20) и весового товара (например, 23 или 24).В решениях «1С:Розница» и «1С:Управление нашей фирмой»:
20.В некоторых случаях ошибка возникает в работающей базе данных, где ранее штрихкоды успешно генерировались. Это происходит из-за появления в регистре некорректных кодов, находящихся на верхней границе диапазона. Например, если пользователь или внешняя обработка загрузки данных импортировали штрихкод 2099999999999, система при попытке прибавления единицы выйдет за лимиты разрядности EAN-13.
Для выявления проблемных записей выполним следующие действия:
ШтрихкодыНоменклатуры (через функции технического специалиста либо через меню «Все функции»).2099... или содержат лишние символы, их необходимо исправить или удалить.Для разработчиков и администраторов баз данных задачу поиска некорректных кодов можно упростить с помощью запроса в консоли запросов:
ВЫБРАТЬ
Штрихкоды.Штрихкод КАК Штрихкод,
Штрихкоды.Владелец КАК Номенклатура
ИЗ
РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
ГДЕ
Штрихкоды.Штрихкод ПОДОБНО "20%"
УПОРЯДОЧИТЬ ПО
Штрихкод УБЫВ
Этот запрос наглядно покажет максимальные значения штрихкодов в базе. Все записи, приближающиеся к верхней границе диапазона, подлежат корректировке.
Система 1С жестко контролирует, чтобы диапазоны для разных типов объектов не накладывались друг на друга. Например, префиксы карт лояльности, весовых товаров и штучных товаров должны быть строго разделены.
Рекомендуется использовать следующую классическую схему распределения префиксов внутренних штрихкодов:
20 — Штучные товары (внутренний складской учет).23 или 24 — Весовые товары (кодируют код товара и его вес).29 — Дисконтные карты, карты лояльности клиентов и подарочные сертификаты.Если в процессе ручного заведения дисконтной карте или весовому товару ошибочно присвоили штрихкод, начинающийся с префикса штучного товара (20), алгоритм генерации штучных штрихкодов может заблокировать дальнейшую работу. Проверьте смежные регистры (например, штрихкоды дисконтных карт) на наличие некорректных пересечений.
Применяя указанные шаги и настраивая префиксы внутренних штрихкодов должным образом, мы сможем гарантировать стабильную и бесперебойную работу автогенерации в любых типовых решениях на платформе 1С:Предприятие.