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

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

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

Разберем причину: почему табличный документ остается пустым

Типичная ситуация, с которой сталкиваются разработчики: код по добавлению рисунка написан, объект РисунокТабличногоДокумента создан, картинка в него помещена, но при вызове метода Показать() или Напечатать() пользователь видит пустой лист. Проанализируем ситуацию: в 1С при программном добавлении рисунка через коллекцию Рисунки.Добавить() объект создается с нулевыми размерами (ширина и высота равны 0) и координатами (0,0). Визуально такой объект просто не виден.

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

Вариант 1: Установка абсолютных координат и размеров

Этот способ удобен, когда вам нужно жестко закрепить картинку в определенном месте листа, независимо от того, как меняются колонки и строки. Посмотрим на пример кода, который позволяет вывести картинку из библиотеки:


ТабДок = Новый ТабличныйДокумент;
// Добавляем новый рисунок типа "Картинка"
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);

// Устанавливаем картинку из библиотеки или внешнего файла
Рисунок.Картинка = БиблиотекаКартинок.GoogleMaps;

// Задаем размеры в миллиметрах
Рисунок.Ширина = 60; 
Рисунок.Высота = 20;

// Указываем положение относительно верхнего левого угла документа
Рисунок.Лево = 10;
Рисунок.Верх = 10;

// Настраиваем режим отображения
Рисунок.РазмерКартинки = РазмерКартинки.Растянуть;
Рисунок.ВыводитьНаПечать = Истина;

ТабДок.Показать();

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

Вариант 2: Позиционирование через метод Расположить

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

Проанализируем шаги реализации:

  1. Создаем или получаем нужную область в табличном документе через Область(НомерСтроки, НомерКолонки, ...).
  2. Настраиваем размеры этой области (высоту строк и ширину колонок), так как рисунок будет подстраиваться под них.
  3. Используем метод рисунка Расположить(), передавая в него подготовленную область.

Пример кода для вывода штрихкода в конкретную область:


ТДок = Новый ТабличныйДокумент;
// Подготавливаем ячейки под рисунок
ОбластьШтрихкода = ТДок.Область("R1C1:R5C4"); 
ОбластьШтрихкода.ШиринаКолонки = 20; // Устанавливаем ширину в символах
ОбластьШтрихкода.ВысотаСтроки = 50;  // Устанавливаем высоту в пунктах

РисунокШтрихкода = ТДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);

// Предположим, функция получения штрихкода возвращает объект типа Картинка
ПараметрыШтрихкода = Новый Структура("Штрихкод, ТипКода", "1234567890123", 4);
РисунокШтрихкода.Картинка = ГенерацияШтрихкода.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);

// Привязываем рисунок к сетке ячеек
РисунокШтрихкода.Расположить(ОбластьШтрихкода);
РисунокШтрихкода.РазмерКартинки = РазмерКартинки.АвтоРазмер;

ТДок.Показать();

Современный подход: Специализированный тип "Штрихкод"

Начиная с версии платформы 8.3.6, разработчикам стал доступен специализированный ТипРисункаТабличногоДокумента.Штрихкод. Выясним причину, почему это лучше обычного типа Картинка. При использовании этого типа вам не нужно генерировать картинку внешними средствами или компонентами БСП. Объект рисунка сам обладает свойствами ТекстКода, ТипКода и ОтображатьТекст.

Выполним настройку такого объекта программно:


// Добавляем рисунок с типом Штрихкод
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Штрихкод);
Рисунок.Лево = 5;
Рисунок.Верх = 5;
Рисунок.Ширина = 50;
Рисунок.Высота = 25;

// Настраиваем свойства самого штрихкода (доступны только для этого типа рисунка)
Рисунок.ТипКода = 4; // Например, EAN13
Рисунок.Сообщение = "4601234567890";
Рисунок.ОтображатьТекст = Истина;
Рисунок.УголПоворота = 0;

Преимущество: Такой штрихкод генерируется платформой "на лету" и обычно имеет векторную природу, что обеспечивает высокое качество печати на любых принтерах.

Профессиональные приемы работы с графикой в ТабДок

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

1. Управление границами. По умолчанию у добавленного рисунка может отображаться тонкая рамка. Если она не нужна, используйте объект Линия:

Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии);

2. Качество печати и формат SVG. Если вы используете внешние компоненты (например, из состава БСП) для генерации штрихкодов, старайтесь запрашивать изображение в формате SVG. Векторная графика сохраняет четкость линий при любом масштабировании, что критически важно для корректного считывания штрихкода сканером. Растровые форматы (PNG, BMP) могут "замыливаться" при изменении свойств Ширина и Высота.

3. Слоевое управление (Z-порядок). Если вы добавляете несколько изображений (например, подпись поверх печати), используйте методы УстановитьВперед() и УстановитьНазад() для управления наложением объектов друг на друга.

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

Рисунок.Защита = Истина;

Не забудьте при этом включить общую защиту табличного документа: ТабДок.ТолькоПросмотр = Истина;.

Резюме по решению задачи

Подводя итог нашему анализу, выделим ключевые правила программного добавления рисунков:

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

← На главную