При разработке интерфейсов на управляемых формах часто возникает задача наглядного представления информации: вывод статусов заказов с цветными пиктограммами, отображение логотипов или фотографий номенклатуры прямо в строках списка. Однако при стандартном добавлении колонки с типом Поле картинки разработчики сталкиваются с тем, что изображение сжимается до микроскопической иконки 16х16 пикселей, а изменение свойств растягивания не дает никакого эффекта. Разберем причины такого поведения платформы и пошагово настроим корректное отображение изображений.
Проанализируем, как управляемая форма рассчитывает габариты строк в таблице динамического списка. По умолчанию высота строки таблицы ориентирована на одну строку стандартного текста (около 19 пунктов). Если у колонки свойство Высота установлено в значение 0 (авто) или 1, платформа интерпретирует поле как компактную пиктограмму строки и жестко ограничивает область вывода размером иконки.
В этом режиме встроенные механизмы масштабирования (такие как РазмерКартинки или ВариантМасштабаКартинки) не могут расширить границы ячейки таблицы самостоятельно, так как динамический список не умеет динамически определять физический размер картинки из двоичных данных или навигационной ссылки для автоматического изменения высоты строки.
Для того чтобы изображение отображалось в желаемом масштабе, выполним следующие настройки в свойствах элемента формы:
Высота и установим значение 2 или более. Единица высоты соответствует высоте стандартной строки текста. Как только значение становится больше 1, платформа переключает режим отрисовки ячейки и разрешает отображение крупного изображения.Ширина (например, 5 или 10 в зависимости от пропорций исходного изображения). Если оставить ширину по умолчанию, ячейка может остаться слишком узкой и изображение будет сплюснуто или обрезано по горизонтали.РазмерКартинки (в более свежих версиях платформы — ВариантМасштабаКартинки):
Пропорционально — сохраняет исходные пропорции изображения, вписывая его целиком в заданные границы ячейки без искажений.Вместить — масштабирует изображение так, чтобы полностью заполнить ячейку с сохранением пропорций.Реальный размер — выводит картинку пиксель в пиксель (если картинка больше размера ячейки, она будет обрезана).Рассмотрим, как правильно организовать передачу изображений в динамический список. Сами двоичные данные картинок не должны считываться запросом динамического списка, иначе это приведет к критическому падению производительности и перерасходу оперативной памяти. Платформа 1С оптимизирована для автоматической подгрузки изображений по строковым навигационным ссылкам.
Разберем пример сохранения навигационной ссылки при записи объекта, в котором хранится изображение. Создадим в объекте реквизит НавигационнаяСсылка со строковым типом:
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ОбъектДанных = ТекущийОбъект;
// Если навигационная ссылка еще не сформирована, генерируем ее
Если НЕ ЗначениеЗаполнено(ОбъектДанных.НавигационнаяСсылка) Тогда
Если ОбъектДанных.ЭтоНовый() Тогда
СсылкаНаОбъект = Справочники[ОбъектДанных.Метаданные().Имя].ПолучитьСсылку();
ОбъектДанных.УстановитьСсылкуНового(СсылкаНаОбъект);
Иначе
СсылкаНаОбъект = ОбъектДанных.Ссылка;
КонецЕсли;
ОбъектДанных.НавигационнаяСсылка = ПолучитьНавигационнуюСсылку(СсылкаНаОбъект, "ХранилищеКартинки");
КонецЕсли;
// Запись двоичных данных из временного хранилища в реквизит объекта
Если ЭтоАдресВременногоХранилища(СсылкаНаКартинку) Тогда
КартинкаОбъекта = Новый Картинка(ПолучитьИзВременногоХранилища(СсылкаНаКартинку));
ОбъектДанных.ХранилищеКартинки = Новый ХранилищеЗначения(КартинкаОбъекта);
КонецЕсли;
КонецПроцедуры
Теперь подключим вывод изображений в динамический список другого документа или журнала, объединив данные с универсальным справочником картинок по значению статуса или категории:
ВЫБРАТЬ
Заказ.Ссылка КАК Ссылка,
Заказ.Проведен КАК Проведен,
Заказ.Номер КАК Номер,
Заказ.Дата КАК Дата,
Заказ.СостояниеЗаявки КАК СостояниеЗаявки,
СпрКартинки.НавигационнаяСсылка КАК Картинка
ИЗ
Документ.ВнутреннийЗаказ КАК Заказ
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Картинки КАК СпрКартинки
ПО Заказ.СостояниеЗаявки = СпрКартинки.ИдентификационноеЗначение
После добавления поля в список убедимся, что для колонки Картинка в свойствах элемента формы указан вид Поле картинки, а в качестве пути к данным выбрано сформированное строковое поле с навигационной ссылкой. Платформа самостоятельно запросит и закеширует графические данные на клиенте.
При работе с графикой в табличных частях и динамических списках важно учитывать сетевую нагрузку и отзывчивость интерфейса:
Поле картинки. В обработчике события таблицы ПриАктивизацииСтроки достаточно передавать навигационную ссылку текущей строки в это отдельное поле.