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

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

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

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

Штрихкод на печатной форме нужен, чтобы складской работник или менеджер мог найти документ сканером за секунду, а не вводить номер вручную. В 1С эта задача решается штатными средствами: платформа умеет рисовать на макете более двадцати форматов штрихкодов — EAN-13, Code39, Code128, QR-код и другие. Ниже разобран полный путь: от подключения компоненты печати до проверки результата сканером.

Инструкция ориентирована на конфигурации на управляемых формах (УТ 11, ERP 2, КА 2, БП 3.0) и на работу через расширение или доработку конфигурации. Принцип одинаков везде: в макет добавляется картинка штрихкода, а в коде формирования печатной формы она заполняется данными.

Как устроен вывод штрихкода в 1С

Платформа 1С:Предприятие 8.3 рисует штрихкоды сама, без сторонних библиотек. За это отвечает встроенная компонента формирования изображения штрихкода, которая подключается к клиенту и серверу. В макете печатной формы штрихкод — это обычная картинка в ячейке табличного документа, у которой свойство «Тип» установлено в «Штрихкод».

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

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

Какой тип штрихкода выбрать

Выбор типа зависит от того, что кодируется и каким оборудованием будет считываться код. Линейные коды (Code39, Code128, EAN-13) читаются практически любыми, даже самыми дешёвыми лазерными сканерами. Двумерный QR-код требует 2D-сканера, зато вмещает больше данных и устойчив к повреждениям.

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

ТипЧто кодируетКогда применять
EAN-1313 цифрТоварные этикетки, интеграция с торговым оборудованием
Code39Цифры, заглавная латиница, часть символовПростые внутренние коды, старые сканеры
Code128Цифры, латиница, кириллица не поддерживаетсяНомера документов, внутренние идентификаторы
QRЛюбой текст, включая кириллицу и ссылкиСсылки на документ, оплата, маркировка

Линейный код или QR

Code128 / Code39

Подходит для номеров документов и артикулов. Читается любым сканером, но не кодирует кириллицу и длинные строки.

QR-код

Подходит для ссылок, длинных строк и текста на русском. Требует 2D-сканера или камеры, занимает больше места на форме.

Подготовка: проверка компоненты печати штрихкодов

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

Для файловой базы компонента устанавливается на компьютер пользователя. Для клиент-серверного варианта — на сервер 1С, если печатная форма формируется в серверном контексте. Разрядность компоненты должна совпадать с разрядностью платформы: для 64-битного сервера нужна 64-битная компонента.

Быстрая проверка: откройте в типовой конфигурации печать этикеток и ценников (раздел «НСИ и администрирование» или обработку «Печать этикеток и ценников» в УТ 11). Если этикетка со штрихкодом формируется и выводится на экран — компонента работает, можно переходить к макету.

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

Откройте конфигуратор, найдите макет нужной печатной формы (обычно это макет типа «Табличный документ» у документа или в общем списке макетов). В типовых конфигурациях макеты печати часто лежат в менеджере печати объекта, например «МакетПечатиСчетНаОплату».

Выделите ячейку, где должен располагаться штрихкод, или вставьте рисунок через меню «Таблица → Рисунки → Картинка». В свойствах картинки установите тип «Штрихкод». Далее задайте параметры:

  • Тип штрихкода — например, Code128 или QR;
  • Отображать текст — включите, чтобы под полосками печаталась расшифровка для ручного ввода;
  • Ширина и высота — подбираются опытным путём; слишком узкие полоски сканер не возьмёт;
  • Значение — можно оставить пустым и заполнять программно.

Удобный приём: задайте для области макета именованный параметр, а картинку штрихкода разместите в этой области. Тогда в коде вы сможете обратиться к рисунку через коллекцию «Рисунки» табличного документа и установить значение динамически для каждого печатаемого документа.

Порядок добавления штрихкода в макет
  1. 1
    Откройте макет печатной формы в конфигураторе
  2. 2
    Добавьте рисунок типа «Штрихкод» в нужную область
  3. 3
    Установите тип кода и отображение текста
  4. 4
    Сохраните макет и обновите конфигурацию или расширение
  5. 5
    Сформируйте печатную форму и проверьте отображение

Программное заполнение штрихкода данными

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

Ниже типовой фрагмент кода. Он предполагает, что в области «Шапка» есть рисунок с именем «Штрихкод»:

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

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

РисунокШтрихкод.ТипКода = 1; // Code128

РисунокШтрихкод.Значение = СтрокаШтрихкода;

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

Что подставлять в «СтрокаШтрихкода» — зависит от задачи. Для поиска документа сканером удобно кодировать префикс и номер, например «СЧ00001234». Учтите ограничение: Code128 не воспринимает кириллицу, поэтому русские буквы в номере документа нужно заменить или использовать QR-код. Для товаров берите штрихкод из регистра сведений «Штрихкоды номенклатуры» — тогда этикетка будет совместима с торговым оборудованием.

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

bsl
Рисунок = Область.Рисунки.Найти("Штрихкод");
Если Рисунок <> Неопределено Тогда
    Рисунок.ТипКода = 1; // Code128
    Рисунок.Значение = "BC" + Формат(НомерДокумента, "ЧГ=");
    Рисунок.ОтображатьТекст = Истина;
КонецЕсли;

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

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

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

Ограничение внешних печатных форм: они работают в безопасном режиме, поэтому обращение к компоненте штрихкода должно быть разрешено профилем безопасности. На практике штатная компонента БСП обычно доступна, но при ошибках проверьте настройки профилей безопасности в кластере.

Маршрут решения

Как выбрать способ доработки

Конфигурация на полной поддержке и обновляется автоматическиИспользуйте внешнюю печатную форму или расширение
Конфигурация уже доработана и сопровождается программистомПравьте типовой макет и модуль менеджера печати напрямую
Нужен штрихкод только на этикетках товаровИспользуйте типовую обработку «Печать этикеток и ценников» без доработок

Проверка результата и типичные ошибки

После внедрения обязательно проверьте форму сканером, а не только глазами. Штрихкод может выглядеть нормально, но не читаться из-за слишком мелкого масштаба, бледной печати или обрезки краёв. Напечатайте форму на том принтере, который будет использоваться в работе, и считайте код рабочим сканером.

Контрольные точки: сканер должен вернуть ровно ту строку, которую вы закодировали; по этой строке документ должен находиться в базе; при печати нескольких документов пачкой у каждого должен быть свой код, а не дублированный первый.

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

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

Считывание сканером
Норма

Сканер возвращает строку, совпадающую с закодированной

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

Сканер молчит или возвращает обрезанную строку

Текст под штрихкодом
Норма

Текст совпадает со значением кода

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

Текст отличается или отсутствует при включённой опции

Пакетная печать
Норма

У каждого документа свой уникальный код

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

На всех формах одинаковый штрихкод

Печать на бумаге
Норма

Полоски чёткие, без размытия и белых разрывов

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

Код бледный, смазанный, края обрезаны

Типичные ошибки
01
Кодирование кириллицы в Code128 — сканер вернёт пустую строку или ошибку; переводите номер в латиницу или используйте QR
02
Слишком маленькая ширина штрихкода в макете — длинный номер сжимается и перестаёт читаться; увеличьте область или сократите строку
03
Значение присваивается после вывода области в табличный документ — изменения не попадают в форму; сначала задайте значение, потом вызывайте Вывести()
04
Компонента установлена только на клиенте, а форма формируется на сервере — штрихкод пустой; установите компоненту нужной разрядности на сервер
05
Использование EAN-13 для произвольных строк — формат принимает только 13 цифр, всё остальное вызовет ошибку

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

Можно ли вывести штрихкод без доработки конфигурации?

Для этикеток и ценников — да: в УТ 11, ERP и Рознице есть штатная обработка «Печать этикеток и ценников» с настраиваемыми шаблонами. Для произвольных печатных форм документов без доработки не обойтись — потребуется внешняя печатная форма или расширение.

Почему штрихкод отображается на экране, но сканер его не читает?

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

Как закодировать русские буквы в номере документа?

Линейные коды (Code39, Code128) кириллицу не поддерживают. Варианты: заменить русские буквы префикса на латинские аналоги, кодировать только цифровую часть номера или перейти на QR-код, который работает с любым текстом.

Где взять штрихкод товара для печати в документе?

В типовых конфигурациях штрихкоды номенклатуры хранятся в регистре сведений «Штрихкоды номенклатуры». Запросите значение по текущей номенклатуре (и при необходимости характеристике/упаковке) и подставьте его в свойство «Значение» рисунка штрихкода.

Штрихкод пропал после обновления конфигурации. Что делать?

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

Итог

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

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