К статье
Практический материал

Документы и Печать · 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».

В конфигураторе есть макет с компонентой штрихкодов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 для разных платформ и подключается без регистрации в системе — это самый чистый способ, не требующий прав администратора.

Порядок подключения Native API компоненты
  1. 1
    Получите ZIP-архив компоненты (из поставки БПО, от разработчика компоненты или собранный самостоятельно)
  2. 2
    Добавьте архив в конфигурацию как общий макет с типом «Двоичные данные»
  3. 3
    В коде выполните УстановитьВнешнююКомпоненту() с указанием макета, затем ПодключитьВнешнююКомпоненту()
  4. 4
    Создайте объект компоненты через Новый("AddIn.ИмяОбъекта") и вызовите метод формирования картинки
  5. 5
    Сохраните полученные двоичные данные во временный файл и выведите в картинку табличного документа

Пример подключения:

Местоположение = "ОбщийМакет.КомпонентаPDF417";

УстановитьВнешнююКомпоненту(Местоположение);

Подключено = ПодключитьВнешнююКомпоненту(Местоположение, "PDF417", ТипВнешнейКомпоненты.Native);

Если Подключено Тогда

Компонента = Новый("AddIn.PDF417.Barcode");

Компонента.ЗначениеКода = СтрокаДанных;

ДвоичныеДанные = Компонента.ПолучитьШтрихкод();

КонецЕсли;

Имена свойств и методов у каждой компоненты свои — берите их из документации к конкретной DLL. Общий принцип одинаков: задать значение, параметры размера и получить картинку в виде двоичных данных или файла.

Способ 3. Регистрация COM-компоненты (Barcode.dll и аналоги)

Старые решения используют COM-объекты — например, «1С:Печать штрихкодов» (Barcode.ocx) или сторонние библиотеки. Такой вариант требует регистрации в операционной системе и прав администратора, а на 64-разрядном клиенте 32-разрядная COM-библиотека работать не будет.

Регистрация выполняется командой в командной строке с правами администратора:

cmd
regsvr32 "C:\Components\Barcode.dll"

После регистрации объект создаётся в коде через Новый COMОбъект("Barcode.Barcode"). Учтите ограничения: COM-объект работает только на том компьютере, где зарегистрирован, не работает в веб-клиенте и создаёт проблемы при обновлении платформы. Для серверного выполнения библиотеку нужно регистрировать на сервере 1С, а не на клиентских машинах.

Вывод штрихкода на печатную форму

Независимо от способа получения картинки вывод на печать одинаков. В макете табличного документа создайте область и добавьте в неё рисунок с типом «Картинка». В коде после заполнения параметров области присвойте рисунку объект Картинка, созданный из двоичных данных:

Рисунок = ОбластьМакета.Рисунки.РисунокШтрихкода;

Рисунок.Картинка = Новый Картинка(ДвоичныеДанныеШтрихкода);

Для PDF417 критичны пропорции: это стековый код, у которого высота строки должна быть заметно меньше ширины, а общая ширина — достаточной для размещения всех колонок данных. На практике для квитанций по ГОСТ Р 56042-2014 ширина кода обычно составляет десятки миллиметров; если сжать картинку до маленького прямоугольника, сканер код не прочитает. Печатайте тестовый экземпляр и проверяйте чтение реальным сканером или приложением на смартфоне до запуска в работу.

Контрольные точки

Как проверить результат

Чтение сканером
Норма

Сканер уверенно считывает код с первого предъявления, данные совпадают с исходной строкой

Тревожный признак

Код читается через раз или не читается вовсе — увеличьте размер, проверьте контраст печати

Содержимое кода
Норма

Раскодированная строка совпадает с исходной, включая служебные символы-разделители

Тревожный признак

Обрезанные или искажённые данные — проверьте кодировку (кириллица требует UTF-8) и длину строки

Печать на разных принтерах
Норма

Код читается с отпечатков всех используемых принтеров

Тревожный признак

На части принтеров не читается — снизьте плотность данных или увеличьте область

Типичные ошибки и их решение

Большинство проблем при установке PDF417 в 1С сводится к нескольким повторяющимся сценариям. Разберите их по порядку, прежде чем искать экзотические причины.

Типичные ошибки
01
Подключение 32-разрядной компоненты в 64-разрядном клиенте — компонента не загружается с ошибкой «класс не зарегистрирован» или «не удалось загрузить внешнюю компоненту»; решение — использовать DLL нужной разрядности
02
Формирование штрихкода на сервере при компоненте, установленной только на клиенте — на сервере код падает; решение — установить компоненту на сервер 1С или перенести формирование на клиент
03
Кодирование кириллицы без указания кодировки — сканер выдаёт нечитаемые символы; решение — передавать строку в UTF-8 и проверять поддержку кириллицы конкретной компонентой
04
Слишком длинная строка данных — PDF417 имеет ограничение на объём, при превышении компонента возвращает ошибку или пустую картинку; сократите данные или разбейте код
05
Вывод картинки в область малого размера с искажением пропорций — код визуально есть, но не читается; задайте область с корректным соотношением сторон

Отдельный случай — обновление платформы. После смены релиза платформы Native API компоненты иногда перестают подключаться из-за изменений интерфейса. Если после обновления штрихкод пропал, первым делом проверьте наличие свежей версии компоненты у её поставщика.

Альтернатива: генерация картинки без компонент

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

Сравнение вариантов

Типовая компонента БСП/БПО

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

Внешняя Native API компонента

Подходит для самописных конфигураций и серверного выполнения; требует наличия DLL под нужные платформы

COM-компонента (Barcode.ocx и аналоги)

Подходит для старых конфигураций на толстом клиенте; не работает в веб-клиенте и требует регистрации на каждом компьютере

Внешний сервис генерации

Подходит для веб-клиента и ограниченных сред; зависит от доступности сервиса и требует осторожности с конфиденциальными данными

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-регистрации на сервере без необходимости. Всегда проверяйте читаемость кода реальным сканером на тестовой распечатке до запуска в эксплуатацию.