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

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

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

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

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

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

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

Где в 1С хранится печатная форма и что именно нужно менять

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

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

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

Подготовка: где взять данные штрихкода

Прежде чем править макет, убедитесь, что штрихкоды вообще хранятся в базе. В торговых конфигурациях они записываются в регистр сведений «Штрихкоды номенклатуры» (в УТ 11, ERP, КА) с измерениями «Номенклатура», «Характеристика», «Упаковка» и ресурсом «Штрихкод». В Бухгалтерии предприятия аналогичный регистр называется «Штрихкоды номенклатуры» с более простой структурой.

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

Учтите особенность: у одной номенклатуры может быть несколько штрихкодов (разные упаковки, характеристики). В коде формирования печатной формы нужно решить, какой из них выводить — обычно берут первый по отбору «Номенклатура + Характеристика + Упаковка» из строки документа, либо любой по номенклатуре, если характеристики и упаковки не используются.

Способ 1. Добавление колонки через макет и модуль менеджера

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

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

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ ПЕРВЫЕ 1

| Штрихкоды.Штрихкод КАК Штрихкод

|ИЗ

| РегистрСведений.ШтрихкодыНоменклатуры КАК Штрихкоды

|ГДЕ

| Штрихкоды.Номенклатура = &Номенклатура";

Запрос.УстановитьПараметр("Номенклатура", СтрокаТовара.Номенклатура);

Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Следующий() Тогда

ОбластьСтрока.Параметры.Штрихкод = Выборка.Штрихкод;

КонецЕсли;

После правки обновите конфигурацию базы данных (F7), откройте документ и вызовите печать. Если колонка появилась, но пустая — проблема в запросе или отборе (например, не учтена характеристика). Если колонки нет вообще — проверьте, что выводится именно та область макета, которую вы редактировали: в типовых формах часто несколько вариантов макета (с НДС/без НДС, для разных видов операций).

Порядок действий при правке макета
  1. 1
    Сделайте копию базы и откройте конфигуратор
  2. 2
    Найдите макет печатной формы в ветке Общие — Макеты
  3. 3
    Добавьте колонку в область строки товаров, задайте параметр
  4. 4
    В модуле менеджера добавьте запрос штрихкода и заполнение параметра
  5. 5
    Обновите конфигурацию БД и проверьте печать на тестовом документе
  6. 6
    Проверьте печать для всех вариантов макета (с НДС, без НДС)

Способ 2. Вывод штрихкода картинкой через БСП

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

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

ДанныеQR = ПолучитьДанныеQRКода(СтрокаШтрихкода, 0, 120);

Если ДанныеQR <> Неопределено Тогда

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

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

КонецЕсли;

Для линейных штрихкодов (EAN-13, Code128) в свежих версиях БСП используют общий модуль РаботаСоШтрихкодами или формирование изображения через компоненту печати штрихкода. Точные имена модулей отличаются между версиями конфигураций — ищите по слову «Штрихкод» в общих модулях своей конфигурации и используйте существующий механизм, а не изобретайте свой.

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

bsl
ДанныеQR = ПолучитьДанныеQRКода("4607025392118", 0, 120);
Если ДанныеQR <> Неопределено Тогда
    Область.Рисунки.Штрихкод.Картинка = Новый Картинка(ДанныеQR);
КонецЕсли;

Способ 3. Внешняя печатная форма без изменения конфигурации

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

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

Практический приём: скопируйте типовой макет из конфигурации в макеты внешней обработки, добавьте колонку там, а код формирования адаптируйте из модуля менеджера документа. Так вы получаете форму, идентичную типовой, но со штрихкодом, и обновления конфигурации её не затрагивают. Минус — если типовая форма изменится при обновлении (новые поля, изменение законодательства по ТОРГ-12 или УПД), внешнюю форму придётся синхронизировать вручную.

Сравнение способов

Правка макета в конфигураторе

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

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

Доработка хранится отдельно и переживает обновления; требует навыков работы с расширениями и контроля совместимости.

Внешняя печатная форма (.epf)

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

Способ 4. Расширение конфигурации

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

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

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

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

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

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

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

Колонка в форме
Норма

Колонка видна во всех строках товаров, у услуг пусто

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

Колонка есть только в части строк или сдвинула соседние колонки

Значение штрихкода
Норма

Совпадает со штрихкодом в карточке номенклатуры

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

Пусто при заполненном регистре — ошибка в отборе запроса

Сканирование
Норма

Сканер читает распечатанный штрихкод с первого раза

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

На экране виден, сканер не читает — мелкий масштаб или сжатая картинка

Обновление
Норма

После обновления конфигурации форма работает

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

Форма откатилась к типовой — правка была внутри конфигурации

Типичные ошибки
01
Правка типового макета без расширения — доработка стирается первым же обновлением конфигурации
02
Запрос штрихкода без учёта характеристики и упаковки — для товара с вариантами выводится чужой штрихкод
03
Вывод текста вместо картинки — пользователи ждут, что сканер прочитает цифры, но это невозможно
04
Слишком маленькая область картинки в макете — изображение сжимается, и сканер не распознаёт код
05
Запрос к регистру внутри цикла по строкам без оптимизации — на больших документах печать заметно тормозит; лучше один запрос по всей таблице товаров

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

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

Можно ли добавить штрихкод в печатную форму без программирования?

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

Почему сканер не читает штрихкод с распечатанной формы?

Чаще всего изображение слишком мелкое или сжато по пропорциям в макете. Увеличьте область картинки, сохраните пропорции, проверьте качество печати принтера. Также убедитесь, что тип штрихкода поддерживается вашим сканером — не все сканеры читают DataMatrix или QR.

Как вывести штрихкод всего документа, а не каждой строки?

Добавьте область в подвал или шапку макета с картинкой и выведите в неё QR или Code128, содержащий уникальный идентификатор документа (GUID) или строку вида «Номер + Дата». По такому коду документ потом быстро находят сканером в базе.

Пропадёт ли доработка при обновлении конфигурации?

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

У товара несколько штрихкодов — какой попадёт в форму?

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

Итог

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

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