Как сделать штрихкод из кода товара в 1С:Управление торговлей 11 и 1С:Рознице 2.2?

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

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

В этой статье мы подробно разберем, как решить эту задачу в современных конфигурациях 1С на управляемых формах (таких как «1С:Управление торговлей 11» и «1С:Розница 2.2»). Мы рассмотрим как стандартные интерактивные методы без программирования, так и более сложные технические решения: написание обработки для заполнения базы, использование гибких типов кодирования (Code 128/Code 39) и специализированных шрифтов.

Решение 1. Встроенный механизм массовой генерации штрихкодов (без программирования)

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

  1. Откроем обработку «Печать этикеток и ценников». Найти ее можно в разделах «Продажи» или «Закупки» (в зависимости от настроек интерфейса).
  2. Заполним табличную часть нужными товарами. Можно воспользоваться подбором или заполнить таблицу по отбору (например, выбрать всю группу номенклатуры, где штрихкоды отсутствуют).
  3. Выделим все строки в таблице с помощью комбинации клавиш Ctrl + A.
  4. Нажмем на кнопку «Установить» на панели инструментов, а затем выберем пункт «Новый штрихкод EAN13» (в некоторых версиях — «Новый штрихкод для выделенных строк»).

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

Решение 2. Вывод кода товара в виде штрихкода на этикетку без записи в базу

Если вам не требуется физически хранить штрихкоды в регистре сведений 1С, а нужно лишь выводить их на ценники для сканирования на кассе, мы можем воспользоваться встроенным редактором шаблонов этикеток. В качестве типа штрихкода мы выберем не жесткий стандарт EAN-13, а более гибкий Code 128 или Code 39. Эти форматы легко поддерживают любую длину строки, буквы, цифры и сохраняют лидирующие нули (например, код «00041278» будет считан сканером именно в таком виде).

Проанализируем алгоритм настройки шаблона:

  1. Перейдем в меню настройки шаблонов этикеток и ценников (раздел «Администрирование» — «Печатные формы, отчеты и обработки» — «Шаблоны этикеток, ценников и чек-лент»).
  2. Создадим новый шаблон или отредактируем существующий.
  3. В графическом редакторе добавим на макет элемент типа «Штрихкод».
  4. В свойствах добавленного поля укажем, что источником данных является поле «Код» или «Артикул» нашей номенклатуры.
  5. В свойствах отображения штрихкода выберем тип кода Code 128.

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

Решение 3. Программная генерация штрихкодов на основе кода товара

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

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

Также важно помнить о международном стандарте EAN-13. Внутренние штрихкоды предприятия должны начинаться с префиксов диапазона от 20 до 29 (или от 200 до 299 в зависимости от разрядности). Если закодировать код товара без префикса, сканеры могут сопоставить его с товарами глобальной базы данных GS1.

Рассмотрим пример готового кода обработки, которая обходит справочник номенклатуры, дополняет коды товаров нулями до нужного формата, вычисляет контрольное число EAN-13 по стандартному математическому алгоритму и корректно записывает данные в современный регистр:


// Создаем запрос для получения списка номенклатуры без штрихкодов
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Номенклатура.Ссылка КАК Ссылка,
    |	Номенклатура.Код КАК Код
    |ИЗ
    |	Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |	НЕ Номенклатура.ЭтоГруппа
    |	И НЕ Номенклатура.Ссылка В
    |		(ВЫБРАТЬ РАЗЛИЧНЫЕ
    |			Штрихкоды.Номенклатура
    |		ИЗ
    |			РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды)";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
    
    // Получаем чистый текстовый код товара
    КодТовара = СокрЛП(Выборка.Код);
    
    // Используем внутренний префикс штучного товара "20"
    Префикс = "20";
    
    // Вычисляем длину дополнения, чтобы получить 12 символов до контрольной цифры
    ДлинаКода = СтрДлина(КодТовара);
    Если ДлинаКода > 10 Тогда
        // Если код товара слишком длинный для EAN-13, пропускаем или обрезаем
        Продолжить;
    КонецЕсли;
    
    Нули = "";
    Для Сч = 1 По (10 - ДлинаКода) Цикл
        Нули = Нули + "0";
    КонецЦикла;
    
    // Собираем 12 знаков основы штрихкода
    ОсноваШтрихкода = Префикс + Нули + КодТовара;
    
    // Алгоритм расчета контрольного разряда EAN-13
    СуммаЧетных = 0;
    СуммаНечетных = 0;
    
    Для Сч = 1 По 12 Цикл
        Цифра = Число(Сред(ОсноваШтрихкода, Сч, 1));
        Если Сч % 2 = 0 Тогда
            СуммаЧетных = СуммаЧетных + Цифра;
        Иначе
            СуммаНечетных = СуммаНечетных + Цифра;
        КонецЕсли;
    КонецЦикла;
    
    ОбщаяСумма = СуммаНечетных + (СуммаЧетных * 3);
    Остаток = ОбщаяСумма % 10;
    КонтрольныйРазряд = ?(Остаток = 0, 0, 10 - Остаток);
    
    ИтоговыйШтрихкод = ОсноваШтрихкода + Строка(КонтрольныйРазряд);
    
    // Записываем штрихкод в современный регистр сведений БСП
    НаборЗаписей = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Штрихкод.Установить(ИтоговыйШтрихкод);
    
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Штрихкод = ИтоговыйШтрихкод;
    НоваяЗапись.Номенклатура = Выборка.Ссылка;
    НоваяЗапись.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
    
    Попытка
        НаборЗаписей.Записать();
    Исключение
        Сообщить("Не удалось записать штрихкод для: " + Выборка.Ссылка + " Ошибка: " + ОписаниеОшибки());
    КонецПопытки;
    
КонецЦикла;

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

Решение 4. Использование шрифтов семейств Code 39 и Code 128

Иногда стандартная компонента генерации изображений штрихкодов 1С дает сбои. Это выражается в виде пустых мест на ценниках или перечеркнутого красного квадрата при выводе на печать. Это происходит из-за отсутствия зарегистрированных библиотек ActiveX или проблем с правами доступа к временным файлам на сервере.

В такой ситуации отличной и очень легкой альтернативой становится использование специализированных шрифтов (например, C39HrP24DhTt или Barcode Font).

Разберем, как реализовать этот подход:

  1. Скачайте и установите шрифт Code 39 в операционную систему вашего компьютера (и серверов, если печать происходит на стороне сервера). Для установки достаточно дважды кликнуть на файл шрифта формата .ttf и нажать кнопку «Установить».
  2. В макете ценника выделите ячейку, в которую выводится код или артикул товара.
  3. В свойствах ячейки измените шрифт по умолчанию на установленный шрифт Code 39.
  4. Для корректной работы этого шрифта сканерам необходимы стартовый и стоповый символы. Поэтому при выводе значения в макет обязательно добавьте символ звездочки в начало и в конец строки.

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

← На главную