При формировании печатных форм в формате Microsoft Word на базе Библиотеки стандартных подсистем (БСП), например, из конфигурации 1С:ЗУП, часто возникает необходимость вывести сгенерированный штрихкод. Рассмотрим подробнее, как правильно подготовить макет, сгенерировать картинку средствами 1С и передать ее в документ без использования устаревших COM-технологий.
Для начала разберем, как именно 1С понимает, куда вставлять данные. Обычно в макетах Word разработчики используют параметры вида {v8 ИмяПараметра}. Однако, если мы попытаемся передать таким образом картинку, движок БСП просто не поймет, что от него требуется, и выведет пустоту или текстовое представление объекта.
Чтобы система распознала двоичные данные изображения, в макете необходимо использовать специальный формат тега:
{v8 Штрихкод:Картинка}. Приставка :Картинка является ключевым указателем для БСП.{v8 Штрихкод:Картинка} внутрь этой надписи.Проанализируем программный код подготовки данных. Чтобы передать картинку в функцию печати, нам необходимо сгенерировать сам штрихкод и получить его ДвоичныеДанные. Для этого в БСП используется компонент генерации штрихкодов.
Посмотрим на пример кода, который формирует документ и передает в него картинку штрихкода:
ДвоичныеДанныеМакета = ПолучитьМакет("ПФ_DOC_Уведомление");
Если ДвоичныеДанныеМакета <> Неопределено Тогда
Данные = Новый Структура;
ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, "Уведомление");
ПечатнаяФорма.ТабличныйДокумент = Новый ТабличныйДокумент;
СсылкаНаДокумент = ОбъектыПечати[0];
// Инициализация макета
Макет = УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента(ДвоичныеДанныеМакета, Неопределено);
ПечатнаяФормаДокумента = УправлениеПечатью.ИнициализироватьПечатнуюФорму(Неопределено, Макет.НастройкиСтраницыМакета, Макет);
ОбластьЗаголовок = Новый Структура;
ОбластьЗаголовок.Вставить("ИмяОбласти", "Заголовок");
ОбластьЗаголовок.Вставить("ТипОбласти", "Общая");
// Настройка параметров штрихкода
ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("Ширина", 106);
ПараметрыШтрихкода.Вставить("Высота", 44);
ПараметрыШтрихкода.Вставить("Штрихкод", СтрокаШтрихкода); // Строка с цифрами штрихкода
ПараметрыШтрихкода.Вставить("ТипКода", 1); // 1 - обычно соответствует формату EAN13
ПараметрыШтрихкода.Вставить("ОтображатьТекст", Истина);
// Генерация картинки
ДанныеШК = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода);
// Передача двоичных данных в структуру данных макета
Данные.Вставить("Штрихкод", ДанныеШК.ДвоичныеДанные);
Область = УправлениеПечатью.ОбластьМакета(Макет, ОбластьЗаголовок);
УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФормаДокумента, Область, Данные);
Важно убедиться, что на сервере 1С установлена компонента «1С:Печать штрихкодов». Если функция ИзображениеШтрихкода возвращает пустоту, проблема кроется в отсутствии компоненты (например, файла Barcode.dll).
Выясним причину частой проблемы: при формировании штрихкода формата EAN13 краевые и центральный знаки должны визуально выделяться (быть длиннее остальных). Однако иногда 1С рисует все линии одинаковой высоты.
Почему это происходит? Программная компонента отрисовывает правильный стандартный вид только в том случае, если свойство ОтображатьТекст установлено в значение Истина. Если вы попытаетесь скрыть цифры внизу штрихкода, установив Ложь, компонента переключится в упрощенный режим отрисовки, выравнивая все полосы.
Как решить эту проблему?
Если вам необходим правильный EAN13 с длинными разделителями, но без визуального отображения цифр, используйте небольшую хитрость: оставьте параметр ОтображатьТекст = Истина, но в параметрах форматирования (если компонента позволяет) задайте тексту белый цвет или установите минимально возможный размер шрифта.
Рассмотрим альтернативные решения, если стандартный механизм БСП вас не устраивает или нужно обойтись без генерации изображений.
ЗаписьZipФайла. С его помощью можно программно заменить файл изображения (например, заглушку штрихкода) в каталоге word/media/ внутри архива документа. Этот способ работает очень быстро и позволяет использовать векторные форматы изображений, которые не теряют качества при масштабировании.Таким образом, мы детально разобрали процесс вставки штрихкода в офисные документы через механизмы БСП. Соблюдая правила разметки макета и корректно передавая двоичные данные, вы сможете получать качественные печатные формы без необходимости использования тяжеловесных COM-объектов. В качестве основы для разработки таких решений подойдёт шаблон внешней печатной формы для вывода в Word средствами БСП.