Как добавить штрихкод в печатную форму документа 1С?

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

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

Метод 1: Использование специализированных шрифтов для простых кодов

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

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


&НаСервереБезКонтекста
Функция КодируемШтрихКод(Парам)
    Если СтрДлина(Парам) <> 13 Тогда Возврат \"1234567890123\"; КонецЕсли;
    ПечШтрих = \"\";
    Код = Парам;
    Ф = Новый Массив(11);
    Ф[1]=\"000000\"; Ф[2]=\"001011\"; Ф[3]=\"001101\"; Ф[4]=\"001110\"; 
    Ф[5]=\"010011\"; Ф[6]=\"011001\"; Ф[7]=\"011100\"; Ф[8]=\"010101\"; 
    Ф[9]=\"010110\"; Ф[10]=\"011010\";
    Маска = \"\" + Лев(СокрЛП(Код), 1) + Ф[Число(Лев(СокрЛП(Код), 1)) + 1] + \"222222\";
    Дл = СтрДлина(Код);
    Для ИИ = 1 По Дл Цикл
        Если ИИ = 1 Тогда Стр1 = \"\" + Лев(СокрЛП(Код), 1);
        Иначе
            СимволМаски = Сред(Маска, ИИ, 1);
            Если СимволМаски = \"0\" Тогда Стр1 = Символ(65 + Сред(Код, ИИ, 1));
            ИначеЕсли СимволМаски = \"1\" Тогда Стр1 = Символ(75 + Сред(Код, ИИ, 1));
            ИначеЕсли СимволМаски = \"2\" Тогда Стр1 = Символ(97 + Сред(Код, ИИ, 1));
            КонецЕсли;
        КонецЕсли;
        ПечШтрих = ПечШтрих + Стр1;
        Если ИИ = 7 Тогда ПечШтрих = ПечШтрих + \"*\";
        ИначеЕсли ИИ = 13 Тогда ПечШтрих = ПечШтрих + \"+\";
        КонецЕсли;
    КонецЦикла;
    Возврат ПечШтрих;
КонецФункции

После получения строки-кода, мы просто присваиваем ее параметру ячейки области, у которой в макете задан соответствующий шрифт (например, EAN-13).

Метод 2: Формирование штрихкода через внешнюю компоненту

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

Разберем этапы реализации:

  1. Подключение компоненты в коде с использованием ПодключитьВнешнююКомпоненту.
  2. Настройка параметров генератора: тип кода, шрифт, размеры.
  3. Получение данных в формате ДвоичныеДанные.
  4. Преобразование данных в объект Картинка и вставка в макет через коллекцию Рисунки.

Посмотрим, как выглядит функция получения картинки:


&НаСервере
Функция ПолучитьКартинкуШтрихкода(Штрихкод)
    ПодключитьВнешнююКомпоненту(\"ОбщийМакет.КомпонентаПечатиШтрихкодов\", \"КартинкаШтрихкода\", ТипВнешнейКомпоненты.Native);
    Компонент = Новый (\"AddIn.КартинкаШтрихкода.Barcode\");
    
    Компонент.ТипКода = 1; // EAN-13
    Компонент.ЗначениеКода = Штрихкод;
    
    ДвоичныеДанныеКартинки = Компонент.ПолучитьШтрихкод;
    Если НЕ ДвоичныеДанныеКартинки = Неопределено Тогда
        Возврат Новый Картинка(ДвоичныеДанныеКартинки);
    КонецЕсли;
    Возврат Неопределено;
КонецФункции

Интеграция с макетом

Для корректной вставки картинки в печатную форму, необходимо выполнить следующие действия в Конфигураторе:

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


ОбластьЗаголовок = Макет.ПолучитьОбласть(\"Заголовок\");
ШтрихкодК = ПолучитьКартинкуШтрихкода(ДанныеШтрихкода);
Если ШтрихкодК <> Неопределено Тогда
    ОбластьЗаголовок.Рисунки.ШтрихкодК.Картинка = ШтрихкодК;
КонецЕсли;
ТаблДок.Вывести(ОбластьЗаголовок);

Важные рекомендации по архитектуре

Хотя реализация в модуле формы часто кажется наиболее простой, с точки зрения архитектуры 1С, рекомендуется выносить логику печати в Модуль менеджера. Это обеспечит возможность вызова печати из любых контекстов (фоновые задания, серверные вызовы, пакетная печать). Также не забывайте использовать методы Библиотеки стандартных подсистем (БСП), если они доступны в вашей конфигурации (подсистема УправлениеПечатью), так как они уже содержат готовые обертки для работы с штрихкодами, что позволяет избежать лишнего написания кода.

Помните: если вы планируете печать на стороне сервера, убедитесь, что внешняя компонента установлена и зарегистрирована на сервере 1С:Предприятия, иначе метод ПодключитьВнешнююКомпоненту вернет ошибку.

← На главную