Как вывести несколько пиктограмм в одну колонку динамического списка

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке интерфейсов на платформе «1С:Предприятие 8.3» программисты часто сталкиваются с ограничением динамического списка: штатно в одну колонку можно вывести только одну картинку из коллекции. Если задача требует отображения сразу нескольких статусных иконок (например, «Оплачено», «Просрочено», «Заблокировано» и т.д.) в одном поле, стандартного функционала становится недостаточно. Разберем детально проверенные способы решения этой задачи, их преимущества и недостатки.

Способ 1. Использование группы колонок с типом «В ячейке»

Это наиболее гибкий и простой в реализации метод, который позволяет имитировать наличие нескольких иконок в одной ячейке за счет стандартных средств оформления формы. Проанализируем алгоритм настройки этого механизма:

  1. Откроем редактор формы и найдем элемент Таблица, связанный с динамическим списком.
  2. Создадим новую группу элементов внутри таблицы. Для этого нажмем «Добавить» и выберем тип Группа колонок.
  3. В свойствах созданной группы установим параметр Группировка в значение В ячейке.
  4. Перенесем в эту группу все колонки, которые содержат нужные нам пиктограммы. Каждая такая колонка должна быть связана с числовым полем динамического списка, где хранится индекс картинки из коллекции.

Для того чтобы визуально иконки располагались плотно друг к другу и выглядели как единое целое, нам потребуется выполнить дополнительную настройку свойств вложенных колонок:

Важный нюанс: платформенные стили могут добавлять небольшие отступы между колонками в группе «В ячейке». Если иконок много (более 3-4), ячейка может стать слишком широкой.

Способ 2. Создание комбинаторной коллекции (мега-коллекция)

Этот метод заключается в подготовке специального графического ресурса, который содержит все возможные комбинации состояний. Рассмотрим ситуацию: у нас есть три независимых флага. Каждый может быть либо включен, либо выключен. Это дает нам 2 в кубе, то есть 8 вариантов отображения.

Алгоритм реализации следующий:

  1. Подготовим в графическом редакторе одну общую картинку-коллекцию, где каждый кадр 16х16 уже содержит нужную комбинацию значков (например, первый кадр — пусто, второй — только первая иконка, третий — первая и вторая и т.д.).
  2. Загрузим эту картинку в метаданные как ОбщаяКартинка.
  3. В запросе динамического списка вычислим итоговый индекс картинки. Это можно сделать прямо в тексте SQL-запроса через конструкцию ВЫБОР КОГДА.

Посмотрим на пример формирования индекса в запросе для трех состояний:


ВЫБРАТЬ
    Ссылка,
    (ВЫБОР КОГДА ПометкаУдаления ТОГДА 1 ИНАЧЕ 0 КОНЕЦ +
     ВЫБОР КОГДА Проведен ТОГДА 2 ИНАЧЕ 0 КОНЕЦ +
     ВЫБОР КОГДА Оплачено ТОГДА 4 ИНАЧЕ 0 КОНЕЦ) КАК ИндексСостояния
ИЗ
    Документ.РеализацияТоваровУслуг

Затем в условном оформлении или в свойствах колонки мы указываем использование нашей мега-коллекции и связываем ее с полем ИндексСостояния. Этот метод позволяет вывести иконки «встык» без лишних пикселей, но он становится крайне трудозатратным, если состояний больше 4-х (для 6 флагов потребуется нарисовать 64 комбинации).

Способ 3. Использование Unicode-символов и Emoji

Если нам не принципиально использование именно графических файлов из коллекции картинок 1С, мы можем воспользоваться поддержкой Unicode. Это один из самых эффективных способов вывода множества индикаторов в одну текстовую колонку.

Проанализируем, как это реализовать в запросе динамического списка. Мы можем объединять строки, содержащие спецсимволы, в зависимости от условий:


ВЫБРАТЬ
    ВЫБОР КОГДА Срочно ТОГДА "🔴" ИНАЧЕ "" КОНЕЦ + 
    ВЫБОР КОГДА Проверено ТОГДА "✅" ИНАЧЕ "" КОНЕЦ +
    ВЫБОР КОГДА ЕстьФайлы ТОГДА "📎" ИНАЧЕ "" КОНЕЦ КАК СтатусыТекст
ИЗ
    Справочник.Задачи

Преимущества данного подхода:

Способ 4. Программное формирование подсказок и информационных панелей

Рассмотрим ситуацию, когда иконок действительно много (от 6 и выше). С точки зрения юзабилити, перегрузка строки списка мелкими картинками делает интерфейс «шумным» и трудночитаемым. Выясним причину, по которой эксперты рекомендуют альтернативные методы визуализации:

Во-первых, можно использовать свойство ТекстПодсказки. Мы выводим одну общую иконку статуса, а при наведении курсора на ячейку показываем пользователю подробную расшифровку всех шести (или более) показателей в текстовом виде. Это сохраняет чистоту списка и дает детальную информацию по требованию.

Во-вторых, эффективным решением является вынос детальных иконок на отдельную Информационную панель. Разместим под динамическим списком или справа от него группу элементов, которая будет обновляться при активизации строки. Для этого используем событие ПриАктивизацииСтроки:


&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
    ТекущиеДанные = Элемент.ТекущиеДанные;
    Если ТекущиеДанные <> Неопределено Тогда
        // Обновляем видимость или значения иконок на панели формы
        Элементы.ИконкаОплаты.Видимость = ТекущиеДанные.СтатусОплаты;
        Элементы.ИконкаДоставки.Видимость = ТекущиеДанные.СтатусДоставки;
    КонецЕсли;
КонецПроцедуры

Рекомендации по выбору метода

Подведем итог нашему анализу. Выбор метода зависит от конкретных требований к интерфейсу:

  1. Если нужно 2-3 иконки и допустимы небольшие отступы — используйте группу «В ячейке».
  2. Если критична плотность отображения и состояний немного — используйте комбинированную картинку.
  3. Если требуется быстрый результат и современный вид — используйте Unicode/Emoji.
  4. Если данных слишком много — используйте информационную панель, чтобы не перегружать пользователя визуальным шумом.

Помните, что динамический список — это инструмент для быстрой навигации, и его главная задача — оставаться производительным и понятным для конечного пользователя.

← На главную