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