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