Документы и Печать · 11 мин
PDF417 в 1С: установка компоненты и вывод штрихкода
Как установить компоненту PDF417 в 1С: подключение внешней DLL, регистрация, вывод двумерного штрихкода на печатные формы, типичные ошибки и их решение.
Двумерный штрихкод PDF417 в 1С чаще всего требуется для печати квитанций на оплату (по ГОСТ Р 56042-2014), транспортных накладных, регистрационных документов и форм для госорганов. В типовых конфигурациях он либо уже есть в составе подсистемы печати штрихкодов, либо подключается через внешнюю компоненту Native API — например, «1С:Библиотека подключаемого оборудования» или стороннюю DLL вроде Barcode.dll.
Проблема в том, что «установить PDF417» можно тремя разными способами: активировать готовый макет компоненты в типовой конфигурации, зарегистрировать внешнюю DLL через COM, либо сформировать картинку штрихкода программно без компонент вообще. Выбор зависит от версии платформы, разрядности клиента и того, кто будет формировать код — сервер или клиентское рабочее место.
Ниже разобраны все три сценария с конкретными шагами, проверкой результата и типичными ошибками, из-за которых штрихкод не печатается или не читается сканером.
Что нужно проверить перед установкой
Прежде чем искать и устанавливать компоненту, уточните три вещи. Во-первых, есть ли в конфигурации подсистема печати штрихкодов: в БСП-совместимых конфигурациях (УТ 11, ERP, БП 3.0, ЗУП 3.1) она называется «Генерация штрихкодов» или входит в модуль МенеджерОборудованияВызовСервера. Во-вторых, разрядность клиента 1С: 32-разрядная DLL не загрузится в 64-разрядный клиент и наоборот. В-третьих, где выполняется код — на тонком клиенте, толстом или на сервере: внешняя компонента должна быть доступна именно в том процессе, который формирует изображение.
Полезная проверка: откройте любую печатную форму, где штрихкод уже предусмотрен (например, этикетку в УТ), и посмотрите, выводится ли он. Если типовой механизм работает — отдельная установка не нужна, достаточно вызвать готовую функцию с типом «PDF417».
Найдите общий макет с двоичными данными компоненты и общий модуль генерации штрихкодов
Сверьте разрядность клиента 1С и DLL
Увеличьте область картинки и уменьшите объём кодируемой строки
Способ 1. Использовать встроенную компоненту типовой конфигурации
В конфигурациях на Библиотеке стандартных подсистем компонента печати штрихкодов хранится в общем макете (обычно КомпонентаПечатиШтрихкодов) и поддерживает типы EAN-13, Code39, Code128, QR и PDF417. Устанавливать ничего не нужно — компонента подключается автоматически при первом обращении.
Для вывода PDF417 на печатную форму добавьте в макет табличного документа область-картинку, а в коде сформируйте изображение и поместите его в параметр. Типовой вызов выглядит примерно так:
ДанныеШтрихкода = Новый Структура;
ДанныеШтрихкода.Вставить("Штрихкод", СтрокаДляКодирования);
ДанныеШтрихкода.Вставить("ТипКода", 16); // 16 — PDF417 в типовой нумерации БСП
ДанныеШтрихкода.Вставить("Ширина", 400);
ДанныеШтрихкода.Вставить("Высота", 150);
Результат = ГенерацияШтрихкодов.ДанныеQRКода(ДанныеШтрихкода); // имя метода зависит от версии БСП
Точное имя общего модуля и номер типа кода смотрите в своей версии конфигурации: в разных релизах БСП интерфейс отличается. Найдите в конфигураторе функцию, формирующую двоичные данные картинки штрихкода, и перечисление типов — там будет строка «PDF417».
Способ 2. Подключить внешнюю компоненту Native API
Если конфигурация самописная или типовой подсистемы нет, используется внешняя компонента по технологии Native API. Она поставляется в виде ZIP-архива с DLL для разных платформ и подключается без регистрации в системе — это самый чистый способ, не требующий прав администратора.
- 1Получите ZIP-архив компоненты (из поставки БПО, от разработчика компоненты или собранный самостоятельно)
- 2Добавьте архив в конфигурацию как общий макет с типом «Двоичные данные»
- 3В коде выполните УстановитьВнешнююКомпоненту() с указанием макета, затем ПодключитьВнешнююКомпоненту()
- 4Создайте объект компоненты через Новый("AddIn.ИмяОбъекта") и вызовите метод формирования картинки
- 5Сохраните полученные двоичные данные во временный файл и выведите в картинку табличного документа
Пример подключения:
Местоположение = "ОбщийМакет.КомпонентаPDF417";
УстановитьВнешнююКомпоненту(Местоположение);
Подключено = ПодключитьВнешнююКомпоненту(Местоположение, "PDF417", ТипВнешнейКомпоненты.Native);
Если Подключено Тогда
Компонента = Новый("AddIn.PDF417.Barcode");
Компонента.ЗначениеКода = СтрокаДанных;
ДвоичныеДанные = Компонента.ПолучитьШтрихкод();
КонецЕсли;
Имена свойств и методов у каждой компоненты свои — берите их из документации к конкретной DLL. Общий принцип одинаков: задать значение, параметры размера и получить картинку в виде двоичных данных или файла.
Способ 3. Регистрация COM-компоненты (Barcode.dll и аналоги)
Старые решения используют COM-объекты — например, «1С:Печать штрихкодов» (Barcode.ocx) или сторонние библиотеки. Такой вариант требует регистрации в операционной системе и прав администратора, а на 64-разрядном клиенте 32-разрядная COM-библиотека работать не будет.
Регистрация выполняется командой в командной строке с правами администратора:
regsvr32 "C:\Components\Barcode.dll"После регистрации объект создаётся в коде через Новый COMОбъект("Barcode.Barcode"). Учтите ограничения: COM-объект работает только на том компьютере, где зарегистрирован, не работает в веб-клиенте и создаёт проблемы при обновлении платформы. Для серверного выполнения библиотеку нужно регистрировать на сервере 1С, а не на клиентских машинах.
Вывод штрихкода на печатную форму
Независимо от способа получения картинки вывод на печать одинаков. В макете табличного документа создайте область и добавьте в неё рисунок с типом «Картинка». В коде после заполнения параметров области присвойте рисунку объект Картинка, созданный из двоичных данных:
Рисунок = ОбластьМакета.Рисунки.РисунокШтрихкода;
Рисунок.Картинка = Новый Картинка(ДвоичныеДанныеШтрихкода);
Для PDF417 критичны пропорции: это стековый код, у которого высота строки должна быть заметно меньше ширины, а общая ширина — достаточной для размещения всех колонок данных. На практике для квитанций по ГОСТ Р 56042-2014 ширина кода обычно составляет десятки миллиметров; если сжать картинку до маленького прямоугольника, сканер код не прочитает. Печатайте тестовый экземпляр и проверяйте чтение реальным сканером или приложением на смартфоне до запуска в работу.
Как проверить результат
Сканер уверенно считывает код с первого предъявления, данные совпадают с исходной строкой
Код читается через раз или не читается вовсе — увеличьте размер, проверьте контраст печати
Раскодированная строка совпадает с исходной, включая служебные символы-разделители
Обрезанные или искажённые данные — проверьте кодировку (кириллица требует UTF-8) и длину строки
Код читается с отпечатков всех используемых принтеров
На части принтеров не читается — снизьте плотность данных или увеличьте область
Типичные ошибки и их решение
Большинство проблем при установке PDF417 в 1С сводится к нескольким повторяющимся сценариям. Разберите их по порядку, прежде чем искать экзотические причины.
Отдельный случай — обновление платформы. После смены релиза платформы Native API компоненты иногда перестают подключаться из-за изменений интерфейса. Если после обновления штрихкод пропал, первым делом проверьте наличие свежей версии компоненты у её поставщика.
Альтернатива: генерация картинки без компонент
Если установка компоненты невозможна (например, ограничения безопасности на сервере или работа через веб-клиент), есть обходной путь: сформировать изображение PDF417 на стороннем сервисе или в отдельном скрипте и получить его в 1С через HTTP-запрос как готовый PNG. Это снимает вопрос разрядности и регистрации, но добавляет зависимость от внешнего сервиса и требует контроля передаваемых данных — в штрихкоде квитанции содержатся персональные и платёжные реквизиты.
Сравнение вариантов
Подходит для типовых конфигураций; ничего устанавливать не нужно, но настройка параметров ограничена возможностями библиотеки
Подходит для самописных конфигураций и серверного выполнения; требует наличия DLL под нужные платформы
Подходит для старых конфигураций на толстом клиенте; не работает в веб-клиенте и требует регистрации на каждом компьютере
Подходит для веб-клиента и ограниченных сред; зависит от доступности сервиса и требует осторожности с конфиденциальными данными
FAQ
Поддерживает ли типовая 1С штрихкод PDF417 из коробки?
Да, в конфигурациях на Библиотеке стандартных подсистем и при подключённой «1С:Библиотеке подключаемого оборудования» компонента печати штрихкодов поддерживает PDF417 наряду с QR и линейными кодами. Отдельная установка требуется только для самописных конфигураций без этих библиотек.
Почему компонента подключается, но картинка пустая?
Чаще всего причина в слишком длинной кодируемой строке или неподдерживаемых символах. Проверьте объём данных, уберите кириллицу для теста и убедитесь, что метод формирования возвращает двоичные данные, а не пустое значение или код ошибки.
Можно ли использовать PDF417 в веб-клиенте 1С?
Внешние компоненты Native API в веб-клиенте работают с ограничениями и не во всех браузерах. Надёжный вариант — формировать картинку на сервере 1С и передавать в веб-клиент готовые двоичные данные изображения.
Какая разрядность DLL нужна для 64-разрядного сервера 1С?
Для 64-разрядного сервера нужна 64-разрядная версия компоненты. Разрядность определяется процессом, в котором выполняется код: серверный вызов — разрядность сервера, клиентский — разрядность клиентского приложения.
Сканер не читает PDF417 с распечатки, хотя на экране код выглядит нормально. Что делать?
Проверьте три вещи: достаточный размер кода (узкие модули при печати сливаются), качество печати (включите максимальное качество и чёрную печать без экономии тонера) и поддержку PDF417 самим сканером — не все линейные сканеры читают двумерные коды, нужен 2D-сканер.
Можно ли сформировать PDF417 средствами встроенного языка без DLL?
Штатных средств отрисовки PDF417 в платформе нет. Теоретически алгоритм кодирования можно реализовать на встроенном языке с формированием картинки попиксельно, но на практике это медленно и трудоёмко — рациональнее использовать готовую компоненту или внешний сервис генерации.
Что важно запомнить
В типовых конфигурациях PDF417 уже доступен через подсистему генерации штрихкодов — ищите готовый общий модуль. Для самописных решений используйте Native API компоненту нужной разрядности, избегайте COM-регистрации на сервере без необходимости. Всегда проверяйте читаемость кода реальным сканером на тестовой распечатке до запуска в эксплуатацию.