При переходе на 64-битную версию платформы «1С:Предприятие» многие разработчики сталкиваются с проблемой: старые компоненты для печати штрихкодов (обычно использующие технологию ActiveX) перестают работать. Это происходит потому, что 64-битный процесс сервера или клиента 1С не может загрузить 32-битную библиотеку DLL. В этой статье мы разберем, как современными средствами реализовать печать PDF417, обеспечив кроссплатформенность и поддержку любой разрядности системы.
Выясним причину, по которой возникают сложности. Старые методы печати базировались на компоненте 1CBarCod.dll, которая регистрировалась в системе как ActiveX. Она была жестко привязана к 32-битной архитектуре Windows. Современный подход 1С заключается в использовании Native API компонент. Разберем их преимущества:
regsvr32, она подключается динамически из макета конфигурации.Если ваша конфигурация достаточно современная (например, УТ 11, Розница 2, БП 3.0), в ней уже есть все необходимое. Проанализируем ситуацию: нам нужен общий макет, который обычно называется КомпонентаПечатиШтрихкодов или аналогично. Рассмотрим по шагам процесс подключения и генерации штрихкода PDF417.
Для начала нам необходимо подключить внешнюю компоненту. Сделаем это программно:
// Определим путь к макету с компонентой
ИмяМакета = "ОбщийМакет.КомпонентаПечатиШтрихкодов";
Если ПодключитьВнешнююКомпоненту(ИмяМакета, "BarcodeNative") Тогда
ГенераторШтрихкода = Новый("AddIn.BarcodeNative.BarcodeExtension");
Иначе
Сообщить("Не удалось загрузить компоненту печати штрихкодов!");
Возврат;
КонецЕсли;
После успешного создания объекта BarcodeExtension, мы можем настроить параметры PDF417. В отличие от простого QR-кода, PDF417 требует внимания к деталям. Разберем пример формирования картинки:
// Настройка параметров PDF417
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("ТипКода", 13); // Код для PDF417
ПараметрыШтрихкода.Вставить("Текст", "Ваши данные для кодирования");
ПараметрыШтрихкода.Вставить("Ширина", 400);
ПараметрыШтрихкода.Вставить("Высота", 150);
ПараметрыШтрихкода.Вставить("УровеньКоррекцииОшибок", 2); // От 0 до 8
// Генерация изображения
ДанныеШтрихкода = ГенераторШтрихкода.GenerateBarcode(ПараметрыШтрихкода);
Если НЕ ДанныеШтрихкода = Неопределено Тогда
КартинкаРезультат = Новый Картинка(ДанныеШтрихкода);
// Теперь картинку можно поместить в рисунок на макете
ОбластьМакета.Рисунки.ШтрихкодPDF417.Картинка = КартинкаРезультат;
КонецЕсли;
Если в вашу конфигурацию интегрирована БПО, задача упрощается до вызова одной функции. Разработчики 1С уже написали обертку, которая сама определяет разрядность платформы и выбирает нужную компоненту. Посмотрим на пример использования модуля МенеджерОборудованияПечатьШтрихкодов.
Этот метод считается наиболее стабильным и рекомендуемым. Проанализируем код:
ПараметрыШтрихкода = МенеджерОборудованияПечатьШтрихкодов.ПараметрыГенерацииШтрихкода();
ПараметрыШтрихкода.ТипКода = 13; // PDF417
ПараметрыШтрихкода.Текст = "Данные для печати";
ПараметрыШтрихкода.Ширина = 600;
ПараметрыШтрихкода.Высота = 200;
Результат = МенеджерОборудованияПечатьШтрихкодов.СформироватьКартинкуШтрихкода(ПараметрыШтрихкода);
Если Результат.Результат Тогда
КартинкаДляВывода = Результат.Картинка;
// Используем полученную картинку в макете
КонецЕсли;
Рассмотрим специфические моменты, которые влияют на считываемость кода сканером. PDF417 — это многострочный (стековый) код, и он очень чувствителен к геометрии.
В ситуациях, когда печать происходит через веб-клиент и загрузка внешних компонент ограничена политиками безопасности браузера, мы можем прибегнуть к генерации на стороне клиента с использованием JavaScript. Существуют библиотеки (например, bwip-js), которые можно внедрить в HTML-поле на форме. 1С передает данные в HTML-документ, JS рисует штрихкод на canvas, и результат можно сохранить обратно в базу как картинку. Это сложный, но максимально гибкий путь, не зависящий от разрядности ОС.
Подведем итог: для печати PDF417 на платформе x64 следует полностью отказаться от ActiveX и использовать Native API. Это гарантирует стабильную работу программы вне зависимости от обновлений Windows и архитектуры установленной платформы 1С.