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