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