Как в обычной форме списка 1С вывести иконку скрепки при наличии файлов

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

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

Шаг 1. Настройка колонки табличного поля в конфигураторе

Прежде чем писать программный код, подготовим элементы интерфейса в редакторе формы:

  1. Откроем нужную форму списка в конфигураторе.
  2. В свойствах табличного поля (списка документов или справочника) добавим новую колонку, например, с именем ЕстьФайлы.
  3. Если у объекта уже есть булев реквизит ЕстьФайлы, свяжем колонку с ним через свойство Данные. Если реквизита в объекте нет и признак рассчитывается динамически, свойство Данные можно оставить пустым.
  4. Для шапки колонки в свойстве КартинкаШапки можно выбрать иконку скрепки из библиотеки картинок конфигурации.
  5. Зададим фиксированную ширину колонки (обычно от 1 до 3 символов) и установим свойство ИзменениеРазмера = ИзменениеРазмераКолонки.НеИзменять, чтобы значок не растягивался.

Шаг 2. Заполнение ячейки в событии ПриПолученииДанных

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

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


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

Проанализируем ключевые моменты данного решения:

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

Шаг 3. Реализация в событии ПриВыводеСтроки

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


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

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

← На главную