Как правильно выводить изображения с реальными размерами в макет печатной формы 1С?

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

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

Подготовка макета: используем предопределенный объект

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

  1. Откроем нужный макет в конфигураторе.
  2. Нажмем кнопку Вставить рисунок.
  3. В появившемся диалоговом окне не выбираем файл, а просто нажмем ОК.
  4. Разместим созданный объект в нужной области макета и зададим ему подходящие размеры.
  5. В палитре свойств рисунка укажем имя, например, КрасивыйРисунок.
  6. В свойстве РазмерКартинки выберем значение Пропорционально или РеальныйРазмер в зависимости от задачи.
  7. В свойстве Узор установим Нет заливки.

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

Программный вывод изображения без временных файлов

Часто в коде встречается избыточное создание временных файлов на диске сервера через Записать(). Мы можем значительно оптимизировать этот процесс, передавая двоичные данные напрямую из временного хранилища. Рассмотрим, как это сделать:


// Получаем двоичные данные из хранилища
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);

// Создаем объект Картинка напрямую
ОбъектКартинка = Новый Картинка(ДвоичныеДанные);

// Присваиваем объекту в макете
ОбластьМакета.Рисунки.КрасивыйРисунок.Картинка = ОбъектКартинка;

Этот подход работает быстрее и не создает «мусор» на сервере, что положительно сказывается на стабильности системы.

Расчет размеров с учетом коэффициента масштабирования

Если специфика задачи требует программного добавления рисунков через метод Рисунки.Добавить(), необходимо учитывать разницу в единицах измерения. Платформа 1С работает с объектом ТабличныйДокумент в миллиметрах, в то время как характеристики самой картинки (ширина и высота) возвращаются в пикселях. Чтобы изображение не стало «миллиметровым», используем коэффициент пересчета 0.26458.

Разберем пример реализации, где мы создаем рисунок программно и задаем его параметры:


Коэф = 0.26458;
КартинкаДляВывода = Новый Картинка(ДанныеФайла.ДвоичныеДанные);

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

// Устанавливаем настройки отображения
Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;
Рисунок.Ширина = КартинкаДляВывода.Ширина * Коэф;
Рисунок.Высота = КартинкаДляВывода.Высота * Коэф;

// Убираем лишние границы
Рисунок.ГраницаСверху = Ложь;
Рисунок.ГраницаСлева = Ложь;
Рисунок.ГраницаСнизу = Ложь;
Рисунок.ГраницаСправа = Ложь;
Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии, 1);

// Присваиваем саму картинку
Рисунок.Картинка = КартинкаДляВывода;

Почему важны параметры РазмерКартинки

При выводе изображений критически важно понимать поведение платформы в зависимости от установленного свойства РазмерКартинки:

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

← На главную