Как реализовать печать штрихкода PDF417 в 1С на 64-битной платформе

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

При переходе на 64-битную версию платформы «1С:Предприятие» многие разработчики сталкиваются с проблемой: старые компоненты для печати штрихкодов (обычно использующие технологию ActiveX) перестают работать. Это происходит потому, что 64-битный процесс сервера или клиента 1С не может загрузить 32-битную библиотеку DLL. В этой статье мы разберем, как современными средствами реализовать печать PDF417, обеспечив кроссплатформенность и поддержку любой разрядности системы.

Причина проблемы: ActiveX против Native API

Выясним причину, по которой возникают сложности. Старые методы печати базировались на компоненте 1CBarCod.dll, которая регистрировалась в системе как ActiveX. Она была жестко привязана к 32-битной архитектуре Windows. Современный подход 1С заключается в использовании Native API компонент. Разберем их преимущества:

  1. Разрядность: Работают как в x86, так и в x64 окружении.
  2. Кроссплатформенность: Поддерживают не только Windows, но и Linux (что критично для современных серверов 1С).
  3. Отсутствие регистрации: Компоненту не нужно регистрировать в реестре через regsvr32, она подключается динамически из макета конфигурации.

Решение 1: Использование штатной Native-компоненты из типовых конфигураций

Если ваша конфигурация достаточно современная (например, УТ 11, Розница 2, БП 3.0), в ней уже есть все необходимое. Проанализируем ситуацию: нам нужен общий макет, который обычно называется КомпонентаПечатиШтрихкодов или аналогично. Рассмотрим по шагам процесс подключения и генерации штрихкода PDF417.

Для начала нам необходимо подключить внешнюю компоненту. Сделаем это программно:


// Определим путь к макету с компонентой
ИмяМакета = "ОбщийМакет.КомпонентаПечатиШтрихкодов";
Если ПодключитьВнешнююКомпоненту(ИмяМакета, "BarcodeNative") Тогда
    ГенераторШтрихкода = Новый("AddIn.BarcodeNative.BarcodeExtension");
Иначе
    Сообщить("Не удалось загрузить компоненту печати штрихкодов!");
    Возврат;
КонецЕсли;

После успешного создания объекта BarcodeExtension, мы можем настроить параметры PDF417. В отличие от простого QR-кода, PDF417 требует внимания к деталям. Разберем пример формирования картинки:


// Настройка параметров PDF417
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("ТипКода", 13); // Код для PDF417
ПараметрыШтрихкода.Вставить("Текст", "Ваши данные для кодирования");
ПараметрыШтрихкода.Вставить("Ширина", 400);
ПараметрыШтрихкода.Вставить("Высота", 150);
ПараметрыШтрихкода.Вставить("УровеньКоррекцииОшибок", 2); // От 0 до 8

// Генерация изображения
ДанныеШтрихкода = ГенераторШтрихкода.GenerateBarcode(ПараметрыШтрихкода);

Если НЕ ДанныеШтрихкода = Неопределено Тогда
    КартинкаРезультат = Новый Картинка(ДанныеШтрихкода);
    // Теперь картинку можно поместить в рисунок на макете
    ОбластьМакета.Рисунки.ШтрихкодPDF417.Картинка = КартинкаРезультат;
КонецЕсли;

Решение 2: Использование Библиотеки подключаемого оборудования (БПО)

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

Этот метод считается наиболее стабильным и рекомендуемым. Проанализируем код:


ПараметрыШтрихкода = МенеджерОборудованияПечатьШтрихкодов.ПараметрыГенерацииШтрихкода();
ПараметрыШтрихкода.ТипКода = 13; // PDF417
ПараметрыШтрихкода.Текст = "Данные для печати";
ПараметрыШтрихкода.Ширина = 600;
ПараметрыШтрихкода.Высота = 200;

Результат = МенеджерОборудованияПечатьШтрихкодов.СформироватьКартинкуШтрихкода(ПараметрыШтрихкода);

Если Результат.Результат Тогда
    КартинкаДляВывода = Результат.Картинка;
    // Используем полученную картинку в макете
КонецЕсли;

Важные нюансы при работе с PDF417

Рассмотрим специфические моменты, которые влияют на считываемость кода сканером. PDF417 — это многострочный (стековый) код, и он очень чувствителен к геометрии.

Альтернативные методы для веб-клиента

В ситуациях, когда печать происходит через веб-клиент и загрузка внешних компонент ограничена политиками безопасности браузера, мы можем прибегнуть к генерации на стороне клиента с использованием JavaScript. Существуют библиотеки (например, bwip-js), которые можно внедрить в HTML-поле на форме. 1С передает данные в HTML-документ, JS рисует штрихкод на canvas, и результат можно сохранить обратно в базу как картинку. Это сложный, но максимально гибкий путь, не зависящий от разрядности ОС.

Подведем итог: для печати PDF417 на платформе x64 следует полностью отказаться от ActiveX и использовать Native API. Это гарантирует стабильную работу программы вне зависимости от обновлений Windows и архитектуры установленной платформы 1С.

← На главную