Документы и Печать · 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Определите тип штрихкода и строку данных (номер документа, GUID, EAN-13)
- 2Проверьте наличие модуля генерации штрихкодов в конфигурации
- 3Добавьте в макет область с параметром-картинкой
- 4Допишите в модуле печати формирование картинки и вывод области
- 5Сформируйте тестовую печать и проверьте чтение кода сканером
- 6Перенесите доработку в расширение, если конфигурация типовая
Доработка через расширение вместо изменения конфигурации
Если конфигурация типовая и стоит на поддержке, прямое изменение модуля печати и макета затруднит обновления. Правильный путь — расширение конфигурации: в него заимствуются макет и модуль менеджера документа, процедура печати переопределяется через аннотацию «ИзменениеИКонтроль» или «Вместо», а доработанный макет добавляется с уникальным именем.
Альтернатива без программирования — механизм «Дополнительные отчеты и обработки» из БСП: внешняя печатная форма регистрируется в справочнике, подключается к документу и полностью заменяет или дополняет типовую. Это удобно, когда штрихкод нужен только в одной форме и нет задачи менять логику самой конфигурации.
Сравнение вариантов доработки
Подходит для самописных решений и снятых с поддержки баз. Минус — сложные обновления типовых конфигураций.
Оптимально для типовых на поддержке: обновления не ломаются. Ограничение — не все объекты и методы доступны для переопределения.
Быстрый вариант без конфигуратора для администратора. Ограничение — работает только в конфигурациях с БСП и требует навыка написания обработок.
Проверяем результат и читаемость кода
После доработки сформируйте печатную форму реального документа и проверьте три вещи: картинка отображается без искажений, под кодом (если включён текст) выведена та же строка, что закодирована, и сканер уверенно считывает код с распечатки. Тестируйте на том принтере и бумаге, на которых форма будет печататься в работе: бледная печать и глянцевая бумага заметно снижают читаемость.
Отдельно проверьте формирование формы в тонком и веб-клиенте, если ими пользуются сотрудники: генерация картинки на сервере решает проблему отсутствия компоненты на клиентских машинах, но только если код корректно вынесен в серверный контекст.
Как проверить результат
Чёткие полосы, пропорции сохранены, поля вокруг кода есть
Растянутое или обрезанное изображение, слипшиеся полосы
Код считывается с первого раза с расстояния 10–20 см
Сканер не реагирует или читает через раз
Сканер возвращает строку, идентичную номеру/коду документа
Лишние символы, обрезанная строка, кириллица в данных
Типичные ошибки и их устранение
Самая частая проблема — пустое место вместо штрихкода. Причины: компонента не установлена (в файловом режиме на конкретном ПК), функция генерации вернула ошибку, а ветка обработки отсутствует, либо имя параметра в макете не совпадает с именем в коде. Включите вывод сообщения об ошибке генерации в журнал регистрации — это сразу локализует причину.
Вторая группа ошибок — нечитаемый код: слишком маленькая ширина, включённое сжатие картинки при выводе в табличный документ, использование кириллицы в кодируемой строке (Code128 её не поддерживает корректно во всех реализациях). Для номеров документов с кириллическими префиксами формируйте строку только из латиницы и цифр.
Что важно запомнить
Вывод штрихкода — это три шага: область с картинкой в макете, генерация изображения на сервере, вывод в табличный документ. Для типовых конфигураций работайте через расширение, выбирайте Code128 для документов, и обязательно проверяйте чтение кода реальным сканером на реальной печати.
Частые вопросы
Можно ли вывести штрихкод без программирования?
Частично. Если в типовой конфигурации уже есть печатная форма со штрихкодом (например, этикетки товаров в УТ), достаточно настроек. Для произвольного документа без доработки макета и модуля печати обойтись нельзя — минимально потребуется внешняя печатная форма.
Почему в файловой базе штрихкод печатается, а в клиент-серверной — нет?
Почти всегда причина в том, что компонента печати подключается на клиенте, а в клиент-серверном режиме формирование должно происходить на сервере. Перенесите вызов генерации в серверную процедуру модуля печати.
Какой тип штрихкода выбрать для номера документа?
Code128: он кодирует латиницу, цифры и служебные символы, компактен и уверенно читается любыми сканерами. EAN-13 не подходит, так как требует ровно 13 цифр с контрольной цифрой.
Можно ли вывести QR-код тем же способом?
Стандартная компонента печати штрихкодов поддерживает QR-код в актуальных версиях, но в старых поставках — нет. Для QR часто используют отдельные компоненты или внешние сервисы генерации; для кодов ФНС и маркировки применяйте только проверенные механизмы типовой конфигурации.
Штрихкод печатается, но сканер его не читает. Что проверить в первую очередь?
Размер кода (ширина от 30–35 мм, высота от 10 мм), качество печати (бледный тонер даёт слабый контраст) и содержимое строки — кириллица и спецсимволы часто ломают кодирование. Распечатайте тест с увеличенным размером и сравните.