Как добавить и отобразить картинку в строке списка на обычных формах 1С

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

При работе с обычными формами в 1С:Предприятие 8.3 начинающие разработчики часто сталкиваются с трудностями при попытке кастомизировать внешний вид списков документов или справочников. В отличие от управляемых форм, где многие вещи автоматизированы через свойства динамического списка, в обычных формах управление визуализацией строк требует прямого взаимодействия с объектами оформления. Рассмотрим подробно, как реализовать вывод картинок в строках табличного поля.

Подготовительный этап: Настройка свойств в конфигураторе

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

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

Использование события ПриВыводеСтроки

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

Для начала нам нужно обратиться к параметру ОформлениеСтроки, который передается в обработчик. Этот объект содержит коллекцию Ячейки. Рассмотрим пример кода, который устанавливает картинку для конкретной колонки:


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

КонецПроцедуры

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


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

Оптимизация производительности: ПриПолученииДанных

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

Разберем, в чем преимущество: это событие срабатывает один раз для всей "пачки" строк, которые в данный момент видны на мониторе. Оно получает массив объектов оформления сразу для всех видимых строк. Посмотрим на пример реализации:


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

Работа с картинками состояния

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

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

ОформлениеСтроки.Ячейки.ИмяКолонки.ИндексКартинки = НомерИконки;

Особенности для иерархических списков

Если мы работаем со справочником, у которого включена иерархия (папки), нужно помнить, что стандартные иконки групп и элементов могут конфликтовать с вашими настройками. В обычных формах иконка иерархии выводится в той колонке, у которой в конфигураторе установлен признак Иерархия. Если вы хотите выводить свои картинки вместо папок, вам придется программно менять индекс именно в этой "иерархической" колонке.

Использование флажков вместо картинок

Иногда задача стоит не просто вывести картинку, а показать состояние "Включено/Выключено". В этом случае эффективнее использовать встроенный функционал флажков (CheckBox), который работает быстрее графических объектов. Рассмотрим, как это настроить в коде:


Ячейка = ОформлениеСтроки.Ячейки.ФлагАктивности;
Ячейка.ОтображатьКартинку = Ложь;
Ячейка.ОтображатьТекст = Ложь;
Ячейка.ОтображатьФлажок = Истина;
Ячейка.Флажок = ДанныеСтроки.Активен; // Присваиваем Булево значение

Резюме и практические советы

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

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

← На главную