В процессе разработки интерфейсов на платформе 1С:Предприятие 8.3 (особенно в управляемых формах) часто возникает необходимость визуализировать данные. Одной из популярных задач является вывод иконок или фотографий товаров непосредственно в строках табличной части. Это значительно повышает удобство работы пользователя, позволяя быстрее ориентироваться в списках. Однако начинающие разработчики часто путают механизмы вывода служебных картинок строк и пользовательских изображений в конкретных колонках. В этой статье мы подробно разберем, как правильно настроить отображение картинок и, что не менее важно, как заставить систему реагировать на нажатие по этим изображениям.
Для начала проанализируем типичную ошибку, упомянутую в обсуждении. Существует свойство таблицы КартинкаСтрок и соответствующий путь к данным ПутьКДаннымКартинкиСтрок. Важно понимать: эти свойства отвечают за отображение иконки в самой левой части таблицы — там, где обычно отображается номер строки или маркер состояния (например, пометка удаления). Если ваша задача — вывести изображение в отдельную колонку (например, "Просмотр", "Фото" или "Статус"), эти свойства вам не подходят.
Для размещения картинки в произвольном месте таблицы мы должны работать с конкретным элементом формы, который связан с реквизитом табличной части. Разберем пошагово, как это реализовать.
Если нам нужно выводить одну и ту же иконку для всех строк (например, кнопку-лупу для просмотра), мы можем использовать ресурсы конфигурации. Рассмотрим этот процесс:
Число (для индекса картинки) или Строка (для навигационной ссылки).Вид в значение Поле картинки.КартинкаЗначения выберем нужное изображение из стандартной библиотеки или из добавленных вами картинок в метаданных.После этих действий в каждой строке таблицы в данной колонке будет отображаться выбранное изображение. Однако, как было замечено в дискуссии, простое отображение часто бывает недостаточным — пользователю нужно кликнуть по картинке, чтобы открылось дополнительное окно или выполнилось действие.
Проблема в том, что у элемента Поле картинки, размещенного внутри таблицы, событие Нажатие может не отрабатывать так, как ожидается. Выясним причину: когда пользователь кликает в ячейку таблицы, система по умолчанию пытается перевести строку в режим редактирования. Чтобы "поймать" клик именно по картинке, мы можем использовать три подхода.
Вариант А: Использование события "Выбор" таблицы
Это самый надежный программный способ. Вместо того чтобы пытаться обработать нажатие на само поле, мы будем использовать обработчик события всей таблицы. Проанализируем пример кода:
&НаКлиенте
Процедура СписокТоваровВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
// Проверяем, что пользователь нажал именно на колонку с картинкой
Если Поле.Имя = "ТоварыПросмотр" Тогда
// Отменяем стандартное поведение (открытие карточки или вход в режим редактирования)
СтандартнаяОбработка = Ложь;
// Получаем данные текущей строки
ТекущиеДанные = Элементы.СписокТоваров.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ПоказатьОповещениеПользователя("Просмотр изображения для: " + ТекущиеДанные.Номенклатура);
// Здесь может быть логика открытия формы с большой картинкой
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Вариант Б: Свойство "Гиперссылка"
Чтобы поле вело себя как активный элемент, необходимо в свойствах элемента формы (колонки) установить флаг Гиперссылка. Но будьте внимательны: это свойство корректно работает в таблицах только тогда, когда для поля установлено свойство ТолькоПросмотр в значение Истина. В противном случае щелчок будет интерпретирован как начало правки текста в ячейке.
Вариант В: Поле кнопки с картинкой
Если нам нужно именно действие, мы можем изменить Вид колонки на Поле кнопки. В свойствах кнопки можно указать Отображение — Картинка и выбрать саму картинку. У кнопки событие Нажатие является основным и работает безупречно.
Часто требуется выводить не статичную иконку, а уникальное изображение для каждой строки, хранящееся в базе. В этом случае тип реквизита в табличной части должен быть Строка, а хранить мы там будем навигационную ссылку.
Рассмотрим ситуацию: у нас есть справочник Номенклатура, к которому прикреплены файлы картинок. Нам нужно вывести их в таблицу обработки. Разберем алгоритм заполнения:
&НаСервере
Процедура ЗаполнитьКартинкиНаСервере()
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
// Получаем ссылку на файл, привязанный к номенклатуре
// Предположим, что в справочнике Номенклатура есть реквизит ФайлКартинки
СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(СтрокаТЧ.Номенклатура.ФайлКартинки, "ДанныеФайла");
// Записываем ссылку в строковый реквизит табличной части
СтрокаТЧ.АдресКартинки = СсылкаНаКартинку;
КонецЦикла;
КонецПроцедуры
В свойствах элемента формы (колонки) ПутьКДанным должен указывать на Объект.Товары.АдресКартинки, а свойство Вид должно быть установлено в Поле картинки. 1С автоматически загрузит изображение по указанному адресу.
Если логика смены картинок простая (например, "зеленая галочка", если товар в наличии, и "красный крестик", если нет), мы можем вообще не писать код в модуле. Для этого используется Условное оформление формы.
Проанализируем шаги настройки:
Условное оформление.Оформление выберем Картинка и укажем нужную иконку из библиотеки.Условии укажем логику: Объект.Товары.Остаток Больше 0.Оформляемых полях выберем нашу колонку "Статус".Этот метод очень производителен, так как отрисовка происходит на уровне платформенных механизмов без лишних вызовов серверного кода при прокрутке таблицы.
При работе с картинками в таблицах важно не забывать про визуальную составляющую. Посмотрим на ключевые свойства оформления:
Пропорционально. Это позволит вписать изображение в ячейку, не искажая его пропорций.ВысотаСтроки и установите значение, например, 3 или 4. Это увеличит ячейки, сделав картинки разборчивыми.КартинкиСтрок. Там должна быть выбрана одна картинка-библиотека, представляющая собой "ленту" из иконок одинакового размера. Тогда индекс 0 покажет первый фрагмент ленты, 1 — второй и так далее.Используя предложенные методики, мы можем создавать профессиональные и интуитивно понятные интерфейсы, в которых таблицы не просто содержат текст, но и предоставляют визуальную информацию с возможностью быстрой интерактивной работы.