При работе с печатными формами в 1С часто возникает задача вывода изображений, которые хранятся на сервере или в информационной базе. Разработчики нередко сталкиваются с тем, что изображение при выводе либо искажается, либо отображается в неверном масштабе, занимая лишь малую часть отведенной области. Рассмотрим, как решить эту проблему, чтобы картинки выводились предсказуемо и в правильных пропорциях.
Самый надежный способ управления внешним видом изображения — заранее создать его в конфигураторе. Вместо того чтобы программно добавлять рисунки «на лету», выполним следующие шаги:
КрасивыйРисунок.Пропорционально или РеальныйРазмер в зависимости от задачи.Нет заливки.Использование предопределенного имени позволяет нам обращаться к объекту напрямую в коде, минуя сложный процесс динамического создания рисунков.
Часто в коде встречается избыточное создание временных файлов на диске сервера через Записать(). Мы можем значительно оптимизировать этот процесс, передавая двоичные данные напрямую из временного хранилища. Рассмотрим, как это сделать:
// Получаем двоичные данные из хранилища
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
// Создаем объект Картинка напрямую
ОбъектКартинка = Новый Картинка(ДвоичныеДанные);
// Присваиваем объекту в макете
ОбластьМакета.Рисунки.КрасивыйРисунок.Картинка = ОбъектКартинка;
Этот подход работает быстрее и не создает «мусор» на сервере, что положительно сказывается на стабильности системы.
Если специфика задачи требует программного добавления рисунков через метод Рисунки.Добавить(), необходимо учитывать разницу в единицах измерения. Платформа 1С работает с объектом ТабличныйДокумент в миллиметрах, в то время как характеристики самой картинки (ширина и высота) возвращаются в пикселях. Чтобы изображение не стало «миллиметровым», используем коэффициент пересчета 0.26458.
Разберем пример реализации, где мы создаем рисунок программно и задаем его параметры:
Коэф = 0.26458;
КартинкаДляВывода = Новый Картинка(ДанныеФайла.ДвоичныеДанные);
// Добавляем рисунок в табличный документ
Рисунок = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
// Устанавливаем настройки отображения
Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;
Рисунок.Ширина = КартинкаДляВывода.Ширина * Коэф;
Рисунок.Высота = КартинкаДляВывода.Высота * Коэф;
// Убираем лишние границы
Рисунок.ГраницаСверху = Ложь;
Рисунок.ГраницаСлева = Ложь;
Рисунок.ГраницаСнизу = Ложь;
Рисунок.ГраницаСправа = Ложь;
Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии, 1);
// Присваиваем саму картинку
Рисунок.Картинка = КартинкаДляВывода;
При выводе изображений критически важно понимать поведение платформы в зависимости от установленного свойства РазмерКартинки:
РеальныйРазмер: картинка будет выведена в исходном размере пикселей. Если заданный контейнер (область) меньше, картинка будет обрезана. Используйте этот режим, если важна пиксельная точность.Пропорционально: наиболее безопасный вариант для печатных форм. Система сама вычислит масштаб, чтобы изображение вписалось в границы контейнера, сохраняя исходные пропорции.Растянуть: позволяет принудительно вписать картинку в область, но может привести к визуальным искажениям (растягиванию).Рекомендуем при разработке всегда явно указывать свойство РазмерКартинки, чтобы поведение системы было предсказуемым независимо от параметров входящего файла.