Как реализовать автоматическую генерацию штрихкодов в 1С:Бухгалтерия предприятия 3.0

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

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

Анализ штатных возможностей конфигурации

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

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

Разбор стандарта EAN-13 для внутренних кодов

Прежде чем приступать к написанию кода или поиску расширения, выясним, какой формат кода нам нужен. Наиболее распространенным является EAN-13. Для внутреннего использования (локальные коды организации, которые не будут считываться в сторонних магазинах) зарезервирован диапазон префиксов 200–299.

Рассмотрим структуру кода EAN-13:

  1. Первые 2-3 цифры: Префикс (например, 200).
  2. Следующие 9-10 цифр: Уникальный идентификатор товара внутри вашей системы.
  3. Последняя цифра: Контрольное число, вычисляемое по алгоритму.

Важный момент: Если просто вписать 13 произвольных цифр, сканер, скорее всего, не сможет корректно считать код, так как контрольное число не совпадет с расчетным.

Вариант 1: Использование расширений конфигурации (рекомендуемый)

Самый современный и безопасный метод — это использование расширений (.cfe). Разберем по шагам, как это работает:

  1. Расширение позволяет добавить кнопку на форму списка или форму записи штрихкода, не снимая основную конфигурацию с поддержки.
  2. В расширении описывается процедура, которая при нажатии кнопки ищет последний свободный номер в регистре, формирует новый код с префиксом 200 и вычисляет контрольный разряд.
  3. После этого программно создается запись в регистре ШтрихкодыНоменклатуры.

Преимущество этого метода в том, что при обновлении 1С ваши доработки не затрутся, и вам не придется вручную объединять код модулей.

Вариант 2: Программная реализация генерации кода

Если вы решили реализовать функционал самостоятельно, нам потребуется написать алгоритм вычисления контрольного числа. Рассмотрим пример функции на языке 1С, которая рассчитывает 13-й символ для кода EAN-13. Проанализируем логику вычислений:


Функция СформироватьКонтрольныйСимволEAN13(ШтрихкодБезКонтрольного) Экспорт
    Четные = 0;
    Нечетные = 0;
    
    Для Индекс = 1 По 12 Цикл
        Цифра = Число(Сред(ШтрихкодБезКонтрольного, Индекс, 1));
        Если Индекс % 2 = 0 Тогда
            Четные = Четные + Цифра;
        Иначе
            Нечетные = Нечетные + Цифра;
        КонецЕсли;
    КонецЦикла;
    
    Всего = Четные * 3 + Нечетные;
    КонтрольноеЧисло = (10 - (Всего % 10)) % 10;
    
    Возврат Строка(КонтрольноеЧисло);
КонецФункции

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

Вариант 3: Массовая генерация через внешнюю обработку

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

  1. Выборка номенклатуры: Проанализируем справочник Номенклатура и выберем только те позиции, у которых в регистре ШтрихкодыНоменклатуры нет записей.
  2. Цикл генерации: Для каждого товара генерируем строку вида "200" + КодТовара (дополненный нулями до 12 знаков) + КонтрольноеЧисло.
  3. Запись: Создаем набор записей регистра.

Пример кода для создания записи в регистре:


НоваяЗапись = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
НоваяЗапись.Номенклатура = ВыбранныйТовар;
НоваяЗапись.Штрихкод = СформированныйКод;
НоваяЗапись.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
НоваяЗапись.Записать();

Печать созданных штрихкодов

Мало просто сгенерировать цифры в базе, их нужно превратить в этикетки. В БП 3.0 есть типовая обработка «Печать этикеток и ценников». Рассмотрим нюансы ее использования:

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

Использование сервиса 1С:Бизнес-сеть

Стоит упомянуть альтернативный путь, который не требует программирования. Проанализируем возможности сервиса 1С:Бизнес-сеть. Если вы подключены к нему, 1С может автоматически сопоставить вашу номенклатуру с общероссийским каталогом. В этом случае штрихкоды производителей подтянутся в вашу базу автоматически. Это избавит вас от необходимости придумывать внутренние коды для товаров, которые уже имеют общепринятую маркировку.

Выводы и рекомендации

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

← На главную