Как вывести штрихкод в отчет 1С в графическом виде?

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

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

Способ 1: Использование шрифтов семейства Code EAN

Этот метод считается одним из самых быстрых в плане производительности, так как платформа 1С просто выводит текстовую строку, а специальный шрифт, установленный в операционной системе, отображает её как набор полос. Однако здесь есть важный нюанс: штрихкод нельзя вывести «как есть». Его нужно предварительно преобразовать (перекодировать), чтобы шрифт правильно отрисовал контрольные символы и разделители.

Рассмотрим алгоритм реализации. Сначала нам потребуется функция, которая преобразует стандартный 13-значный код (EAN13) в специальную последовательность символов.


&НаСервереБезКонтекста
Функция КодируемШтрихКод(Парам)
    Если СтрДлина(Парам) <> 13 Тогда
        Возврат "1234567890123"; // Заглушка при ошибке
    КонецЕсли;

    ПечШтрих = "";
    Код = Парам;
    Ф = Новый Массив(11);
    Ф[1] = "000000"; // 0
    Ф[2] = "001011"; // 1
    Ф[3] = "001101"; // 2
    Ф[4] = "001110"; // 3
    Ф[5] = "010011"; // 4
    Ф[6] = "011001"; // 5
    Ф[7] = "011100"; // 6
    Ф[8] = "010101"; // 7
    Ф[9] = "010110"; // 8
    Ф[10] = "011010"; // 9

    Маска = "" + Лев(СокрЛП(Код), 1) + Ф[Число(Лев(СокрЛП(Код), 1)) + 1] + "222222";
    Дл = СтрДлина(Код);

    Для ИИ = 1 По Дл Цикл
        Если ИИ = 1 Тогда
            Стр1 = "" + Лев(СокрЛП(Код), 1);
        Иначе // ИИ от 2 до 13
            СимволМаски = Сред(Маска, ИИ, 1);
            Если СимволМаски = "0" Тогда
                Стр1 = Символ(65 + Сред(Код, ИИ, 1));
            ИначеЕсли СимволМаски = "1" Тогда
                Стр1 = Символ(75 + Сред(Код, ИИ, 1));
            ИначеЕсли СимволМаски = "2" Тогда
                Стр1 = Символ(97 + Сред(Код, ИИ, 1));
            КонецЕсли;
        КонецЕсли;
        ПечШтрих = ПечШтрих + Стр1;

        Если ИИ = 7 Тогда
            ПечШтрих = ПечШтрих + "*"; // Центральный разделитель
        ИначеЕсли ИИ = 13 Тогда
            ПечШтрих = ПечШтрих + "+"; // Завершающий символ
        КонецЕсли;
    КонецЦикла;

    Возврат ПечШтрих;
КонецФункции

Разберем по шагам, как вывести результат работы этой функции в макет:

  1. В макете вашего отчета выберите ячейку, где должен быть штрихкод.
  2. Установите для этой ячейки тип Параметр (например, ШтрихкодДляПечати).
  3. В свойствах ячейки выберите шрифт Code EAN 13 (его нужно предварительно установить в Windows).
  4. При программном формировании отчета передавайте в этот параметр результат выполнения функции КодируемШтрихКод().

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

Способ 2: Использование компоненты «1С:Печать штрихкодов»

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

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

  1. В режиме конфигуратора откройте макет.
  2. Перейдите в меню: Таблица -> Рисунки -> Вставить объект.
  3. Выберите из списка «1С:Печать штрихкодов» (ActiveX или Native API).
  4. Разместите объект в нужной области макета и дайте ему имя (например, РисунокШтрихкод).

Проанализируем пример кода для управления этим объектом при выводе строки отчета:


// Получаем область из макета
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
// Обращаемся к рисунку-объекту в этой области
РисунокШтрихкод = ОбластьСтрока.Рисунки.РисунокШтрихкод;

// Настраиваем параметры объекта
РисунокШтрихкод.Объект.ТипКода = 1; // 1 соответствует EAN13
РисунокШтрихкод.Объект.ТекстКода = СтрокаТаблицы.Штрихкод;
РисунокШтрихкод.Объект.ОтображатьТекст = Истина;
РисунокШтрихкод.Объект.РазмерКрая = 0;

// Выводим область в табличный документ
ТабДок.Вывести(ОбластьСтрока);

Этот метод более универсален, так как компонента часто входит в состав типовых конфигураций (БСП) и позволяет работать с широким списком форматов, включая Code128, QR-коды и DataMatrix.

Способ 3: Современный подход (Платформа 8.3.10+)

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

  1. В макете создайте обычный Рисунок.
  2. В свойствах рисунка в поле Тип рисунка выберите Штрихкод.
  3. Теперь этот рисунок обладает свойством Объект, через которое можно настраивать ТипКода и ТекстКода аналогично предыдущему способу.

Преимущество этого метода: полная кроссплатформенность. Штрихкод будет корректно отображаться в веб-клиенте, на Linux-серверах и в мобильных приложениях, не требуя регистрации DLL-библиотек или установки шрифтов в систему.

Рекомендации по выбору метода

Выяснив все нюансы, подведем итог:

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

← На главную