Как вывести пиктограмму по условию в журнале или списке документов в 1С?

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

При разработке интерфейса в 1С часто возникает необходимость визуально выделить строки в журнале или списке документов (например, подсветить значком закрытые документы, флаг запрета редактирования или особый статус проведения). Рассмотрим, как реализовать вывод пиктограммы на платформе 1С Предприятие 8 по заданному условию.

Вариант 1. Программная установка картинки в событии ПриПолученииДанных (Обычные формы)

Если разработка ведется на обычных формах, наиболее оптимальным способом с точки зрения производительности является использование события ПриПолученииДанных элемента ТабличноеПоле. В отличие от события ПриВыводеСтроки, этот обработчик получает порцию данных массово, что существенно ускоряет работу списка.

Разберем по шагам порядок действий:

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

Проанализируем пример кода для установки значка в конкретную ячейку колонки:


Процедура ДокументСписокПриПолученииДанных(Элемент, ОформленияСтрок)
    Для Каждого ОС Из ОформленияСтрок Цикл
        // Проверяем условие по реквизиту текущей строки
        Если ОС.Данные.ВыводитьПиктограмму = Истина Тогда
            // Устанавливаем необходимую картинку в нужную колонку
            ОС.Ячейки.ИмяКолонки.УстановитьКартинку(БиблиотекаКартинок.ЗначокИнформация);
        Иначе
            // Очищаем картинку для остальных строк
            ОС.Ячейки.ЯчейкаИконки.УстановитьКартинку(Новый Картинка);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Важное замечание: При программной установке картинки убедитесь, что у соответствующей ячейки или колонки установлено свойство ОтображатьКартинку = Истина, иначе пиктограмма не появится на экране.

Вариант 2. Использование свойств КартинкаСтрок и ДанныеКартинкиСтрок без написания кода

Для простых сценариев в обычных формах можно вовсе избежать написания кода. Платформа 1С позволяет связать индекс выводимой картинки напрямую с числовым или булевым реквизитом строки.

Выясним порядок настройки через палитру свойств:

  1. В палитре свойств элемента ТабличноеПоле найдем свойство КартинкаСтрок и выберем коллекцию пиктограмм (общую картинку, содержащую несколько иконок одинакового размера).
  2. В свойстве ДанныеКартинкиСтрок укажем имя реквизита (например, ВыводитьПиктограмму или числовое поле с индексом картинки).

При таком подходе платформа автоматически сопоставляет значение реквизита с индексом картинки в коллекции. Если реквизит имеет тип Булево, значение Ложь соответствует первому значку коллекции (индекс 0), а Истина — второму значку (индекс 1).

Вариант 3. Условное оформление и динамические списки (Управляемые формы)

В управляемом приложении работа со списками строится на объекте ДинамическийСписок. Вывести картинку по условию здесь можно двумя основными путями:

  1. Через Условное оформление: В свойствах динамического списка (или элемента формы Таблица) открываем Условное оформление. Добавляем элемент оформления, в параметрах выбираем Картинка, указываем нужный значок, а в условиях прописываем ВыводитьПиктограмму = Истина. В оформляемых полях укажем колонку, где должен отображаться значок.
  2. Через свойство ПутьКДаннымКартинкиСтроки: В запросе динамического списка формируем вычисляемое поле с индексом картинки (например, с помощью конструкции ВЫБОР КОГДА ... ТОГДА ...). Устанавливаем для этого поля флаг Использовать всегда, а в свойствах таблицы формы указываем ПутьКДаннымКартинкиСтроки и выбираем коллекцию в КартинкаСтрок.

Рекомендация по производительности: Категорически не рекомендуется выполнять дополнительные запросы к базе данных внутри визуальных обработчиков (таких как ПриПолученииДанных или ПриВыводеСтроки). Все данные, необходимые для расчета условий вывода иконок, должны содержаться в самом источнике данных списка.

← На главную