Как вставить штрихкод в документ Word из 1С с использованием БСП?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

При формировании печатных форм в формате Microsoft Word на базе Библиотеки стандартных подсистем (БСП), например, из конфигурации 1С:ЗУП, часто возникает необходимость вывести сгенерированный штрихкод. Рассмотрим подробнее, как правильно подготовить макет, сгенерировать картинку средствами 1С и передать ее в документ без использования устаревших COM-технологий.

Подготовка макета Word и правильные теги

Для начала разберем, как именно 1С понимает, куда вставлять данные. Обычно в макетах Word разработчики используют параметры вида {v8 ИмяПараметра}. Однако, если мы попытаемся передать таким образом картинку, движок БСП просто не поймет, что от него требуется, и выведет пустоту или текстовое представление объекта.

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

  1. Откройте ваш макет .docx.
  2. Вместо обычного параметра впишите конструкцию {v8 Штрихкод:Картинка}. Приставка :Картинка является ключевым указателем для БСП.
  3. Практический совет: Чтобы штрихкод не раздвигал строки текста и жестко фиксировался в заданных размерах, вставьте в документ Word элемент «Надпись» (Text Box), уберите у него границы (сделайте невидимыми) и поместите тег {v8 Штрихкод:Картинка} внутрь этой надписи.

Программная генерация и передача штрихкода

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

Посмотрим на пример кода, который формирует документ и передает в него картинку штрихкода:


ДвоичныеДанныеМакета = ПолучитьМакет("ПФ_DOC_Уведомление");
    
Если ДвоичныеДанныеМакета <> Неопределено Тогда
        
    Данные = Новый Структура;
    ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "Уведомление");
    ПечатнаяФорма.ТабличныйДокумент = Новый ТабличныйДокумент;
    СсылкаНаДокумент = ОбъектыПечати[0];
        
    // Инициализация макета
    Макет = УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакета, Неопределено);
    ПечатнаяФормаДокумента = УправлениеПечатью.ИнициализироватьПечатнуюФорму(Неопределено, Макет.НастройкиСтраницыМакета, Макет);        
        
    ОбластьЗаголовок = Новый Структура;
    ОбластьЗаголовок.Вставить("ИмяОбласти", "Заголовок");
    ОбластьЗаголовок.Вставить("ТипОбласти", "Общая");
        
    // Настройка параметров штрихкода
    ПараметрыШтрихкода = Новый Структура;
    ПараметрыШтрихкода.Вставить("Ширина", 106);
    ПараметрыШтрихкода.Вставить("Высота", 44);
    ПараметрыШтрихкода.Вставить("Штрихкод", СтрокаШтрихкода); // Строка с цифрами штрихкода
    ПараметрыШтрихкода.Вставить("ТипКода", 1); // 1 - обычно соответствует формату EAN13
    ПараметрыШтрихкода.Вставить("ОтображатьТекст", Истина);
        
    // Генерация картинки
    ДанныеШК = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода); 
        
    // Передача двоичных данных в структуру данных макета
    Данные.Вставить("Штрихкод", ДанныеШК.ДвоичныеДанные);
        
    Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьЗаголовок);
    УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФормаДокумента, Область, Данные);

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

Особенности вывода стандарта EAN13 (удлиненные штрихи)

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

Почему это происходит? Программная компонента отрисовывает правильный стандартный вид только в том случае, если свойство ОтображатьТекст установлено в значение Истина. Если вы попытаетесь скрыть цифры внизу штрихкода, установив Ложь, компонента переключится в упрощенный режим отрисовки, выравнивая все полосы.

Как решить эту проблему?
Если вам необходим правильный EAN13 с длинными разделителями, но без визуального отображения цифр, используйте небольшую хитрость: оставьте параметр ОтображатьТекст = Истина, но в параметрах форматирования (если компонента позволяет) задайте тексту белый цвет или установите минимально возможный размер шрифта.

Альтернативные варианты вставки штрихкода

Рассмотрим альтернативные решения, если стандартный механизм БСП вас не устраивает или нужно обойтись без генерации изображений.

  1. Использование штрихкод-шрифтов (например, EanGnivc.ttf):
    Вместо картинки вы можете выводить обычную строку, к которой в документе Word применен специальный шрифт. Для EAN13 потребуется специальный алгоритм преобразования строки цифр в символы, так как левая и правая части кода кодируются разными наборами символов. Чтобы избежать проблем с отсутствием шрифта на других ПК, в настройках Word сохраните документ с опцией «Внедрить шрифты в файл».
  2. Прямая манипуляция с XML-архивом (Native DOCX):
    Поскольку файл .docx — это обычный ZIP-архив, вы можете использовать объект 1С ЗаписьZipФайла. С его помощью можно программно заменить файл изображения (например, заглушку штрихкода) в каталоге word/media/ внутри архива документа. Этот способ работает очень быстро и позволяет использовать векторные форматы изображений, которые не теряют качества при масштабировании.

Таким образом, мы детально разобрали процесс вставки штрихкода в офисные документы через механизмы БСП. Соблюдая правила разметки макета и корректно передавая двоичные данные, вы сможете получать качественные печатные формы без необходимости использования тяжеловесных COM-объектов. В качестве основы для разработки таких решений подойдёт шаблон внешней печатной формы для вывода в Word средствами БСП.

← На главную