PDF417 в 1С: генерация, печать и настройка штрихкода

· 9 мин

Содержание

PDF417 нельзя «поставить» как шрифт и напечатать обычным текстом — это распространённое заблуждение. Это двумерный штрихкод, и в 1С он формируется картинкой: платформа генерирует изображение через компоненту печати штрихкодов, а вы помещаете его в печатную форму. Чтобы установить и настроить генерацию PDF417 в 1С 8.3, отдельный драйвер обычно не нужен — компонента идёт в составе типовой конфигурации.

Главное, что ломает большинство попыток: PDF417 — это 2D-код, и обычный лазерный сканер его не прочитает. Нужен имиджевый (2D) сканер. Если этого не учесть, код будет печататься, но не сканироваться, и вы потратите время на поиск несуществующей ошибки в настройке.

Ниже — как выбрать способ генерации, что подготовить, как настроить размеры при печати и как проверить, что код реально читается.

Что такое PDF417 и где он нужен в 1С

PDF417 — это многострочный (стековый) двумерный штрихкод. В отличие от линейных кодов (EAN-13, Code128), он хранит данные в нескольких рядах и вмещает заметно больше: ориентировочно до ~1100 байт двоичных данных, около 1800 текстовых символов или до ~2700 цифр. Для сравнения, в Code128 вы упакуете лишь короткую строку.

От матричных кодов (QR, DataMatrix) PDF417 отличается формой: он вытянутый прямоугольник, а не квадрат. Поэтому его удобно размещать узкой полосой — на пропусках, бейджах, транспортных документах, талонах, этикетках с большим объёмом данных.

У кода есть встроенная коррекция ошибок — уровень задаётся от 0 до 8. Чем выше уровень, тем надёжнее считывание при загрязнении или замятии, но тем больше места занимает код. Есть и облегчённые варианты символики — усечённый (truncated) и компактный MicroPDF417, которые занимают меньше места за счёт сниженной ёмкости.

Чтобы понять, когда PDF417 действительно нужен, сравните его с другими кодами, которые умеет печатать та же компонента:

КодФормаЁмкостьЧем читается
EAN-13, Code128линейный (полоски)короткая строкалюбой сканер, в т. ч. линейный
PDF417стековый прямоугольникдо ~1100 байттолько 2D-сканер
QR, DataMatrixквадратная матрицасопоставимо с PDF417только 2D-сканер

Отсюда вывод: переходить на PDF417 имеет смысл, когда линейного кода не хватает по объёму, а вытянутая форма удобнее квадрата. Если места под квадрат достаточно — часто проще QR.

Если данных мало (артикул, короткий номер) — для склада и ценников привычнее линейные коды или QR. PDF417 оправдан там, где в одном коде нужно хранить длинную строку: Ф. И. О., номер документа, набор реквизитов сразу.

Какой способ генерации выбрать

Способов получить PDF417 в 1С три, и выбор зависит от того, правит ли кто-то конфигурацию.

Штатный механизм печатной формы. Если конфигурация построена на БСП (Библиотека стандартных подсистем), в ней уже есть подсистема печати и компонента штрихкодов. Код вставляется в макет печатной формы как изображение штрихкода с типом PDF417. Это путь без программирования, если нужная печатная форма уже умеет выводить штрихкод.

Своя внешняя обработка или печатная форма. Когда штатная форма PDF417 не выводит, пишут внешнюю обработку : она берёт данные, через компоненту формирует изображение кода и кладёт его в табличный документ. Требует доработки, зато полностью управляемо.

Стороннее решение. Готовые обработки с генерацией PDF417 встречаются на рынке доработок. Подходит, если своего разработчика нет, но проверяйте, что решение совместимо с вашим релизом платформы.

Как печатать PDF417 именно в вашем случае?

Что подготовить перед печатью

Отдельного «драйвера PDF417» не существует. Для генерации нужна компонента печати штрихкодов, а для чтения — подходящий сканер.

Компонента печати штрихкодов в типовых конфигурациях поставляется вместе с самой конфигурацией (общий макет). Скачивать её отдельно обычно не требуется: при первом обращении платформа предложит установить компоненту на компьютер — согласитесь, установка занимает секунды и выполняется один раз на рабочем месте.

В клиент-серверном варианте учитывайте, где формируется картинка. Генерация изображения обычно выполняется на сервере, а отображается результат уже на клиенте. Если печать идёт в фоновом или регламентном задании, компонента должна быть доступна на сервере приложений, иначе задание сформирует документ без кода и ошибка всплывёт уже у пользователя.

Для чтения кода нужен 2D-сканер (имиджевый). Большинство 2D-сканеров работают в режиме эмуляции клавиатуры (HID) и отдельного драйвера не требуют — подключили по USB, и символы «печатаются» в активное поле. Специальный драйвер нужен только для сканеров, работающих в COM-режиме или через SDK.

Готовность к печати PDF417
Выполнено: 0 / 5

Настройка параметров печати в печатной форме

В макете табличного документа PDF417 размещается как область с изображением штрихкода. В свойствах этого изображения задаются основные параметры генерации.

  1. Укажите тип кода — PDF417 (компонента поддерживает несколько символогий, выбирается нужная).
  2. Задайте кодируемую строку — данные, которые уйдут в код. Это может быть реквизит документа, собранный текст или результат функции.
  3. Выставьте размеры области — ширину и высоту. PDF417 вытянут по горизонтали; не делайте полосу слишком узкой по высоте, иначе ряды сольются.
  4. При необходимости задайте уровень коррекции ошибок. Выше уровень — надёжнее чтение, но крупнее код.

Не растягивайте код непропорционально вручную. Если изменить ширину и высоту с разным масштабом, модули исказятся и сканер не распознает PDF417. Меняйте размер, сохраняя пропорции, или перегенерируйте код под новый размер.

Отдельно следите за разрешением при печати. На экране код может выглядеть ровно, а на бумаге «замылиться». Для надёжного считывания печатайте с разрешением не ниже 300 dpi и не уменьшайте код ниже размера, при котором отдельные модули ещё различимы.

Кодировка данных тоже важна. Латиница и цифры кодируются без сюрпризов. Если в строку попадает кириллица, убедитесь, что приёмная сторона (ваш же сканер или учётная система) ожидает ту же кодировку, иначе на выходе получите «кракозябры».

Генерация PDF417 во внешней обработке

Когда штатная форма не подходит, PDF417 генерируют программно. Логика одинакова независимо от конфигурации, потому что работает на уровне платформы и компоненты.

Порядок действий такой:

  1. Подключите внешнюю компоненту печати штрихкодов (она хранится как общий макет конфигурации) и создайте объект компоненты.
  2. Задайте свойства: тип кода — PDF417, кодируемую строку, ширину и высоту в точках, при необходимости — уровень коррекции.
  3. Запросите у компоненты изображение — она вернёт картинку (двоичные данные).
  4. Поместите картинку в табличный документ (в область с рисунком) или сохраните в файл.
  5. Выведите табличный документ на печать или покажите пользователю.

Точные имена методов и свойств компоненты зависят от её версии — берите их из документации к той компоненте, что идёт с вашей конфигурацией, а не из сторонних примеров под другую версию. Если метод, который вы собираетесь вызвать, вам незнаком — не угадывайте сигнатуру, сверьтесь с описанием компоненты.

Сначала отладьте генерацию на фиксированной короткой строке («12345»), убедитесь, что код печатается и сканируется, и только потом подставляйте реальные данные документа. Так вы отделите проблему генерации от проблемы с содержимым.

Если изображение возвращается пустым или компонента не создаётся, проблема почти всегда в подключении компоненты (не установлена на клиенте или недоступна на сервере), а не в самом коде формирования.

Данные для кодирования формируйте заранее, одной строкой, и проверяйте их длину до генерации. Если в PDF417 нужно упаковать несколько реквизитов сразу (номер, дату, сумму), договоритесь с приёмной стороной о разделителе и порядке полей — тогда сканирование сразу разложит строку обратно по значениям. Менять этот формат «на лету» нельзя: уже напечатанные коды перестанут разбираться корректно.

Как проверить, что код читается

Печать «на глаз» ничего не гарантирует. PDF417 проверяют только реальным сканированием.

  • Распечатайте код на том принтере, на котором будете печатать в работе, а не рассматривайте на мониторе. Лазерный офисный и термопринтер этикеток дают разное качество.
  • Считайте код 2D-сканером и сравните, что распозналось, с тем, что вы кодировали. Совпало посимвольно — код рабочий.
  • Проверьте минимальный размер. Постепенно уменьшайте код и находите границу, ниже которой он перестаёт читаться, — печатайте с запасом над этой границей.
  • Если печатаете на термоэтикетке, проверьте считывание после печати на реальной этикетке: на мелкой этикетке и невысоком разрешении принтера PDF417 легко «заплывает».

Проверьте и угол: PDF417 рассчитан на считывание в правильной ориентации. Имиджевый сканер обычно берёт код под наклоном, но на граничном размере поворот и перекос документа при печати могут добавить проблем — тестируйте на том же шаблоне, что уйдёт в работу.

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

Почему PDF417 не печатается или не сканируется

Большинство обращений сводится к нескольким типовым ситуациям. Разберите их по симптому.

Диагностика: выберите симптом

Ещё одна неочевидная причина — печать на цветной или глянцевой подложке. PDF417 требует контраста: тёмный код на светлом фоне. На цветной этикетке или при слабом тонере контраст падает, и сканер «не цепляется».

Частые вопросы

Можно ли прочитать PDF417 обычным сканером штрихкодов?
Нет. Линейный (лазерный) сканер читает только одномерные коды — EAN, Code128 и подобные. Для PDF417 нужен 2D-сканер (имиджевый).
Чем PDF417 отличается от QR-кода и DataMatrix?
QR и DataMatrix — квадратные матричные коды. PDF417 — вытянутый многострочный код. При равном объёме данных PDF417 занимает больше места, зато удобно ложится узкой полосой.
Сколько данных помещается в PDF417?
Ориентировочно до ~1100 байт, около 1800 текстовых символов или до ~2700 цифр. Чем выше уровень коррекции ошибок, тем меньше полезной ёмкости остаётся.
Нужен ли интернет или отдельная лицензия для генерации?
Нет. Код формируется локально компонентой печати штрихкодов из состава конфигурации. Интернет и отдельная лицензия на генерацию не нужны.
Печатается ли PDF417 на термопринтере этикеток?
Да, но обязательно проверьте считывание на реальной этикетке. На мелкой этикетке и невысоком разрешении принтера код легко становится нечитаемым — закладывайте запас по размеру.