Как реализовать генерацию штрихкодов в 1С:Предприятие 8.3

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

Разработка механизмов печати этикеток и генерации штрихкодов — одна из классических задач для программиста 1С. Часто стандартные решения, такие как устаревшие компоненты ActiveX, начинают работать нестабильно, вызывают «вылеты» платформы или просто не поддерживаются в 64-битных версиях клиента. В этой статье мы подробно разберем, как реализовать генератор штрихкодов, используя современные и надежные методы, начиная от встроенных средств платформы и заканчивая внешними библиотеками.

Метод 1. Использование встроенных механизмов Библиотеки стандартных подсистем (БСП)

Если вы работаете в современной конфигурации (например, УТ 11, ERP 2.5, Бухгалтерия 3.0), в ней уже есть мощный инструмент для работы со штрихкодами. Разберем, как это устроено. Платформа 1С:Предприятие, начиная с версии 8.3.10, существенно расширила возможности графической системы.

В составе БСП присутствует общий модуль ГенерацияШтрихкода. Этот модуль позволяет формировать изображение штрихкода (включая QR-коды) программно, не устанавливая в операционную систему никаких сторонних драйверов. Основным преимуществом здесь является кроссплатформенность: код будет одинаково работать как под Windows, так и под Linux.

Проанализируем примерную схему работы с этим модулем:


// Подготовим параметры для генерации
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("ТипКода", 1); // Например, EAN13
ПараметрыШтрихкода.Вставить("Штрихкод", "460123456789");
ПараметрыШтрихкода.Вставить("Ширина", 300);
ПараметрыШтрихкода.Вставить("Высота", 100);

// Вызываем функцию генерации, которая вернет объект Картинка
КартинкаШтрихкода = МенеджерПечати.СформироватьИзображениеШтрихкода(ПараметрыШтрихкода);

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

Метод 2. Использование внешней компоненты по технологии NativeAPI

Одной из причин «вылетов» старой компоненты «1С:Печать штрихкодов» является использование технологии ActiveX (COM), которая конфликтует с современными браузерами и 64-битной архитектурой. На смену ей пришла технология NativeAPI. Рассмотрим, как подключить современную компоненту.

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

  1. Найдите в типовой конфигурации макет КомпонентаПечатиШтрихкодов.
  2. Используйте метод ПодключитьВнешнююКомпоненту().
  3. Создайте объект и установите его свойства (тип штрихкода, текст, отображение цифр).

Проанализируем пример кода для работы с NativeAPI компонентой:


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

Метод 3. Использование специализированных шрифтов

Если задача стоит максимально просто (например, для диплома или небольшой локальной базы), можно использовать штрихкод-шрифты. Самый популярный для России — шрифт EAN13 или семейство Libre Barcode.

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

  1. Рассчитываем контрольную сумму по алгоритму: сумма четных позиций умножается на 3, добавляется сумма нечетных, берется остаток от деления на 10.
  2. Преобразуем цифры в специальные символы ASCII. Для EAN13 символы левой и правой части штрихкода отличаются (наборы A, B и C).
  3. В макете 1С выбираем ячейку, устанавливаем для неё шрифт (например, EAN13tt) и передаем туда подготовленную строку.

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


Функция СформироватьСтрокуДляШрифта(ИсходныйКод)
    // Добавляем стартовый символ, вычисляем контрольный разряд
    // Для каждого типа кода алгоритм свой
    СтартовыйСимвол = "Í"; 
    СтоповыйСимвол = "Î";
    // ... расчет логики преобразования ...
    Возврат СтартовыйСимвол + ИсходныйКод + КонтрольныйСимвол + СтоповыйСимвол;
КонецФункции

Метод 4. Внешняя компонента Zint

Если стандартные средства не подходят, рекомендуем обратить внимание на Zint. Это мощная библиотека с открытым исходным кодом, которая поддерживает практически все существующие форматы штрихкодов (DataMatrix, PDF417, Aztec и др.). Для 1С существуют готовые обертки в виде внешних компонент NativeAPI.

Преимущества Zint:

Метод 5. Генерация через HTML5 и JavaScript

В управляемых формах 1С мы можем использовать поле HTML-документа. Это открывает доступ к огромному количеству JavaScript-библиотек, таких как JsBarcode или bwip-js.

Рассмотрим по шагам, как это реализовать:

  1. Помещаем на форму поле HTML-документа.
  2. Загружаем в него HTML-код, содержащий скрипт генерации штрихкода.
  3. Передаем данные из 1С в JavaScript через метод Document.parentWindow (или через обработку события при изменении данных).
  4. Скрипт отрисовывает штрихкод на элементе canvas, после чего мы можем программно забрать Base64-строку изображения обратно в 1С.

Этот метод идеален для веб-клиента и мобильных приложений 1С, так как отрисовка происходит на стороне клиента (в браузере).

Метод 6. Прямая отрисовка (Low-level)

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

Проанализируем структуру SVG (Scalable Vector Graphics). Это обычный текстовый XML-файл. Штрихкод в нем выглядит так:


<svg width="100" height="30">
  <rect x="0" y="0" width="2" height="30" fill="black" />
  <rect x="4" y="0" width="1" height="30" fill="black" />
  <!-- И так далее для каждой полоски -->
</svg>

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

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

Подведем итог нашему анализу и выберем оптимальный путь:

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

← На главную