Как выделить первую строку табличной части жирным шрифтом на управляемой форме?

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

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

Почему не работают обработчики событий и прямое назначение шрифта

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

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


Элемент.Шрифт.Жирный = Истина; // Вызовет исключение: свойство доступно только для чтения (Read Only)

В объектной модели 1С объект Шрифт является неизменяемым. Изменить начертание, размер или гарнитуру существующего экземпляра нельзя — требуется создавать новый объект через конструктор Новый Шрифт(...).

Вторая проблема заключается в том, как управляемая форма работает с визуальными элементами. Если попытаться переопределить шрифт у элемента управления целиком:

Элемент.Шрифт = Новый Шрифт(,, Истина);

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

Единственным штатным инструментом для построчного изменения внешнего вида ячеек и строк на управляемых формах является Условное оформление.

Способ 1. Интерактивная настройка условного оформления в конфигураторе

Если условие оформления заранее известно и является статическим, наиболее простым решением будет настройка свойств формы без написания программного кода. Разберем этот процесс по шагам:

  1. Откроем нужную управляемую форму в конфигураторе.
  2. В окне элементов или реквизитов выделим корневой элемент Форма и перейдем в панель Свойства.
  3. Найдем свойство УсловноеОформление и нажмем кнопку открытия (три точки).
  4. В открывшемся окне добавим новый элемент оформления и настроим три обязательные вкладки:
    1. Оформление: отмечаем флажком свойство Шрифт и указываем начертание Жирный.
    2. Условие: добавляем отбор. В левом значении выбираем путь к данным, например: Объект.ИмяТабличнойЧасти.НомерСтроки, вид сравнения — Равно, в правом значении указываем 1.
    3. Оформляемые поля: указываем элементы интерфейса — саму таблицу формы (чтобы применить стиль ко всей строке целиком) либо конкретные колонки таблицы, которые требуется выделить. Обратите внимание: указывать необходимо именно элементы формы, а не реквизиты данных.
  5. Сохраняем настройку нажатием кнопки «ОК».

Способ 2. Программное создание условного оформления на сервере

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

Посмотрим на пример кода:


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

В данном примере поле компоновки данных "Объект.Товары.НомерСтроки" указывает на реквизит данных табличной части, а поле "Товары" в оформляемых полях соответствует имени элемента таблицы на форме.

Важные нюансы и ограничения

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

  1. Сортировка данных пользователем: реквизит НомерСтроки фиксирует физический номер записи в коллекции. Если пользователь кликнет по заголовку любой колонки для сортировки, визуальный порядок строк изменится. При этом оформление останется привязано к строке с НомерСтроки = 1, которая визуально может оказаться в середине или в конце списка.
  2. Таблицы значений в реквизитах формы: если источником данных таблицы выступает не табличная часть документа/справочника, а добавленная в реквизиты формы произвольная таблица значений, стандартного реквизита НомерСтроки у неё нет. В этом случае в таблицу добавляют числовую колонку с номером либо используют служебный реквизит-флаг.
  3. Выделение через служебный флаг: для более сложных сценариев рекомендуется добавить в строки таблицы булев реквизит (например, ВыделятьЖирным). В условном оформлении задается проверка Объект.ИмяТабличнойЧасти.ВыделятьЖирным = Истина, а само значение флага рассчитывается серверными алгоритмами при заполнении или изменении строк. Это исключает зависимость от сортировок и номеров строк.
← На главную