Как исправить ошибку: «Нет свободных кодов в доступных диапазонах штучных штрихкодов» в 1С

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

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

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

Почему возникает ошибка: логика работы 1С

Для начала проанализируем, как система ищет и формирует свободные штрихкоды стандарта EAN-13. Внутренние штрихкоды штучных товаров обычно начинаются с префикса 20 (диапазон кодов от 2000000000000 до 2099999999999, предназначенный для внутреннего использования внутри предприятия). При нажатии на кнопку «Новый штрихкод» система обращается к специальной функции автогенерации.

Давайте посмотрим на участок кода, где происходит сбой:


Для Каждого СтрокаТЧ Из Диапазоны Цикл
    Код = СтрокаТЧ.Код + 1;
    Диапазон = СтрокаТЧ.Диапазон;
    Прервать;
КонецЦикла;
    
Если Код = Неопределено Тогда
    ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияНетСвободныхКодовШтучныхШтрихкодов());
    Возврат Неопределено;
КонецЕсли;

Проанализируем эту ситуацию. Если база данных абсолютно новая и в регистре сведений ШтрихкодыНоменклатуры нет ни одной записи, коллекция Диапазоны оказывается пустой. Цикл обхода коллекции не выполняется ни разу, и переменная Код сохраняет свое первоначальное значение Неопределено. В результате срабатывает следующее за ним условие проверки, и система аварийно завершает работу функции, сообщая об отсутствии свободных кодов.

Рассмотрим четыре основных метода решения этой проблемы — от быстрого обходного пути до системного исправления настроек.

Решение 1. Быстрый запуск генерации (метод «первого кода»)

Самый простой и быстрый способ заставить систему работать, если база данных пуста — вручную задать начальную точку отсчета. После этого алгоритм автогенерации сможет корректно отрабатывать операцию прибавления единицы (Код + 1).

Выполним следующие шаги:

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

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

Решение 2. Настройка префиксов внутренних штрихкодов

Если ручной ввод кода не помог или при попытке генерации массив диапазонов все равно остается пустым, это свидетельствует об отсутствии системных настроек префиксов. Выясним, где в различных конфигурациях задаются эти параметры.

В решениях «1С:Управление торговлей 11», «1С:ERP» и «1С:Комплексная автоматизация»:

  1. Перейдем в раздел меню НСИ и администрирование -> Настройка НСИ и разделов.
  2. Выберем пункт Номенклатура.
  3. Развернем подраздел Настройки создания.
  4. Найдем пункт Настройка префиксов внутренних штрихкодов EAN13.
  5. Убедимся, что заполнены префиксы для штучного товара (по умолчанию устанавливается значение 20) и весового товара (например, 23 или 24).
  6. Если поля пусты, заполним их стандартными значениями и сохраним настройки.

В решениях «1С:Розница» и «1С:Управление нашей фирмой»:

  1. Перейдем в раздел Администрирование (или Компания -> Еще больше возможностей).
  2. Откроем пункт Подключаемое оборудование или настройки параметров учета номенклатуры.
  3. Найдем гиперссылку Настройка диапазонов штрихкодов.
  4. Проверим наличие заполненных строк для штучного товара с типом штрихкода EAN-13. При необходимости добавим новую запись с префиксом 20.

Решение 3. Поиск некорректно заведенных кодов (очистка «мусора»)

В некоторых случаях ошибка возникает в работающей базе данных, где ранее штрихкоды успешно генерировались. Это происходит из-за появления в регистре некорректных кодов, находящихся на верхней границе диапазона. Например, если пользователь или внешняя обработка загрузки данных импортировали штрихкод 2099999999999, система при попытке прибавления единицы выйдет за лимиты разрядности EAN-13.

Для выявления проблемных записей выполним следующие действия:

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

Для разработчиков и администраторов баз данных задачу поиска некорректных кодов можно упростить с помощью запроса в консоли запросов:


ВЫБРАТЬ
    Штрихкоды.Штрихкод КАК Штрихкод,
    Штрихкоды.Владелец КАК Номенклатура
ИЗ
    РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды
ГДЕ
    Штрихкоды.Штрихкод ПОДОБНО "20%"
УПОРЯДОЧИТЬ ПО
    Штрихкод УБЫВ

Этот запрос наглядно покажет максимальные значения штрихкодов в базе. Все записи, приближающиеся к верхней границе диапазона, подлежат корректировке.

Решение 4. Устранение пересечений диапазонов

Система 1С жестко контролирует, чтобы диапазоны для разных типов объектов не накладывались друг на друга. Например, префиксы карт лояльности, весовых товаров и штучных товаров должны быть строго разделены.

Рекомендуется использовать следующую классическую схему распределения префиксов внутренних штрихкодов:

Если в процессе ручного заведения дисконтной карте или весовому товару ошибочно присвоили штрихкод, начинающийся с префикса штучного товара (20), алгоритм генерации штучных штрихкодов может заблокировать дальнейшую работу. Проверьте смежные регистры (например, штрихкоды дисконтных карт) на наличие некорректных пересечений.

Применяя указанные шаги и настраивая префиксы внутренних штрихкодов должным образом, мы сможем гарантировать стабильную и бесперебойную работу автогенерации в любых типовых решениях на платформе 1С:Предприятие.

← На главную