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

Документы и Печать · 10 мин

Как вывести штрихкод в печатной форме документа 1С

Как добавить штрихкод в печатную форму документа 1С: компонента печати, макет, код на встроенном языке, типовые ошибки и проверка результата.

Штрихкод на печатной форме документа нужен для быстрого поиска документа сканером, автоматической регистрации отгрузок, маркировки и сверки бумажных документов с базой. В 1С задача решается двумя путями: штатными средствами конфигурации (если разработчик уже предусмотрел вывод кода) или доработкой макета и модуля печати через конфигуратор либо расширение.

Технически вывод строится на трёх элементах: макете печатной формы с областью под картинку, функции формирования изображения штрихкода и коде модуля, который передаёт данные в эту функцию. В типовых конфигурациях на БСП (УТ, ERP, БП, КА) используется общий механизм «МенеджерОборудования» или «ГенерацияШтрихкода», в самописных решениях — компонента «1С:Печать штрихкодов» (Barcode.ocx) или шрифтовые решения.

Ниже разобраны оба подхода: быстрый вариант для типовой конфигурации и полный цикл доработки — от проверки компоненты до тестовой печати и контроля читаемости кода сканером.

Определяем, какой штрихкод и зачем нужен

До начала доработки зафиксируйте, какие данные должен содержать код и какой тип штрихкодирования подходит. Для внутреннего поиска документов обычно достаточно Code128 или Code39 — они кодируют латиницу, цифры и часть спецсимволов, например строку вида «ДокументРеализация:00000001234». Для товарной маркировки используется EAN-13, для DataMatrix и QR — отдельные механизмы, которые в стандартную компоненту печати не входят.

Важно понимать ограничение: EAN-13 требует строго 13 цифр с контрольным разрядом, а Code128 позволяет произвольную строку разумной длины. Если планируется считывание кодом обычным 2D-сканером, линейный Code128 — самый простой и надёжный выбор для идентификации документов.

Проверяем, нет ли готового механизма в типовой конфигурации

В конфигурациях на библиотеке стандартных подсистем механизм генерации штрихкодов уже встроен. Откройте в конфигураторе общие модули и найдите «ГенерацияШтрихкода», «МенеджерОборудованияВызовСервера» или аналог. В них есть функция, принимающая структуру с типом кода, строкой данных и размерами, и возвращающая картинку (двоичные данные).

Проверьте также регистр «Штрихкоды номенклатуры» (в торговых конфигурациях): если штрихкоды товаров уже хранятся в базе, для печати этикеток и документов со списком товаров данные берутся оттуда, и дорабатывать нужно только макет. Для идентификации самого документа строку обычно формируют из его номера, ссылки или GUID.

Добавляем область штрихкода в макет печатной формы

Откройте макет печатной формы нужного документа (обычно это макет с именем вида «МакетПечати» в дереве документа или общий макет). Добавьте новую именованную область, например «ШтрихКод», в подвал или шапку формы. В ячейке, где должен выводиться код, установите тип содержимого «Картинка» и задайте имя параметра, например «КартинкаШтрихкода».

Подберите размеры ячейки с запасом: линейный штрихкод при ширине меньше 30–35 мм часто не читается дешёвыми сканерами, а высота меньше 10 мм ухудшает распознавание при наклоне. Отключите в свойствах картинки искажение пропорций, если компонента формирует изображение фиксированного размера.

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

Пишем код формирования и вывода штрихкода

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

// Пример для конфигурации на БСП

ПараметрыШтрихкода = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода();

ПараметрыШтрихкода.Ширина = 300;

ПараметрыШтрихкода.Высота = 100;

ПараметрыШтрихкода.ТипКода = 1; // Code128

ПараметрыШтрихкода.Штрихкод = "DOC-" + СокрЛП(ДокументСсылка.Номер);

ПараметрыШтрихкода.ОтображатьТекст = Истина;

Результат = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода);

Если Результат.Успех Тогда

ОбластьШтрихкод = Макет.ПолучитьОбласть("ШтрихКод");

ОбластьШтрихкод.Параметры.КартинкаШтрихкода = Результат.Картинка;

ТабличныйДокумент.Вывести(ОбластьШтрихкод);

КонецЕсли;

Если функция вернула ошибку (компонента не установлена, неверный тип кода), предусмотрите ветку, которая выводит вместо картинки строку кода обычным текстом — документ останется пригодным для ручного поиска. Не прерывайте печать всей формы из-за сбоя штрихкода: это второстепенный элемент, и падение печати документа из-за него — грубая ошибка.

Для самописных конфигураций без БСП используется прямое подключение компоненты: ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "BarCode", ТипВнешнейКомпоненты.Native), после чего создаётся объект, заполняются его свойства (ТипКода, Код, Ширина, Высота) и вызывается метод получения картинки. Компоненту предварительно помещают в общий макет как двоичные данные.

Порядок действий
  1. 1
    Определите тип штрихкода и строку данных (номер документа, GUID, EAN-13)
  2. 2
    Проверьте наличие модуля генерации штрихкодов в конфигурации
  3. 3
    Добавьте в макет область с параметром-картинкой
  4. 4
    Допишите в модуле печати формирование картинки и вывод области
  5. 5
    Сформируйте тестовую печать и проверьте чтение кода сканером
  6. 6
    Перенесите доработку в расширение, если конфигурация типовая

Доработка через расширение вместо изменения конфигурации

Если конфигурация типовая и стоит на поддержке, прямое изменение модуля печати и макета затруднит обновления. Правильный путь — расширение конфигурации: в него заимствуются макет и модуль менеджера документа, процедура печати переопределяется через аннотацию «ИзменениеИКонтроль» или «Вместо», а доработанный макет добавляется с уникальным именем.

Альтернатива без программирования — механизм «Дополнительные отчеты и обработки» из БСП: внешняя печатная форма регистрируется в справочнике, подключается к документу и полностью заменяет или дополняет типовую. Это удобно, когда штрихкод нужен только в одной форме и нет задачи менять логику самой конфигурации.

Сравнение вариантов доработки

Изменение конфигурации

Подходит для самописных решений и снятых с поддержки баз. Минус — сложные обновления типовых конфигураций.

Расширение конфигурации

Оптимально для типовых на поддержке: обновления не ломаются. Ограничение — не все объекты и методы доступны для переопределения.

Внешняя печатная форма

Быстрый вариант без конфигуратора для администратора. Ограничение — работает только в конфигурациях с БСП и требует навыка написания обработок.

Проверяем результат и читаемость кода

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

Отдельно проверьте формирование формы в тонком и веб-клиенте, если ими пользуются сотрудники: генерация картинки на сервере решает проблему отсутствия компоненты на клиентских машинах, но только если код корректно вынесен в серверный контекст.

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

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

Картинка в форме
Норма

Чёткие полосы, пропорции сохранены, поля вокруг кода есть

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

Растянутое или обрезанное изображение, слипшиеся полосы

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

Код считывается с первого раза с расстояния 10–20 см

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

Сканер не реагирует или читает через раз

Совпадение данных
Норма

Сканер возвращает строку, идентичную номеру/коду документа

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

Лишние символы, обрезанная строка, кириллица в данных

Типичные ошибки и их устранение

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

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

Типичные ошибки
01
Доработка типовой конфигурации напрямую вместо расширения — при обновлении изменения теряются или блокируют обновление
02
Формирование штрихкода на клиенте в клиент-серверной базе — на части рабочих мест картинка не появляется
03
Слишком мелкий штрихкод в макете — сканер не читает, приходится вводить номер вручную
04
Прерывание печати всей формы при ошибке генерации кода — документ нельзя распечатать вообще
05
Кириллица и спецсимволы в кодируемой строке — код формируется, но считывается с ошибками
Итог

Что важно запомнить

Вывод штрихкода — это три шага: область с картинкой в макете, генерация изображения на сервере, вывод в табличный документ. Для типовых конфигураций работайте через расширение, выбирайте Code128 для документов, и обязательно проверяйте чтение кода реальным сканером на реальной печати.

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

Можно ли вывести штрихкод без программирования?

Частично. Если в типовой конфигурации уже есть печатная форма со штрихкодом (например, этикетки товаров в УТ), достаточно настроек. Для произвольного документа без доработки макета и модуля печати обойтись нельзя — минимально потребуется внешняя печатная форма.

Почему в файловой базе штрихкод печатается, а в клиент-серверной — нет?

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

Какой тип штрихкода выбрать для номера документа?

Code128: он кодирует латиницу, цифры и служебные символы, компактен и уверенно читается любыми сканерами. EAN-13 не подходит, так как требует ровно 13 цифр с контрольной цифрой.

Можно ли вывести QR-код тем же способом?

Стандартная компонента печати штрихкодов поддерживает QR-код в актуальных версиях, но в старых поставках — нет. Для QR часто используют отдельные компоненты или внешние сервисы генерации; для кодов ФНС и маркировки применяйте только проверенные механизмы типовой конфигурации.

Штрихкод печатается, но сканер его не читает. Что проверить в первую очередь?

Размер кода (ширина от 30–35 мм, высота от 10 мм), качество печати (бледный тонер даёт слабый контраст) и содержимое строки — кириллица и спецсимволы часто ломают кодирование. Распечатайте тест с увеличенным размером и сравните.