Как сделать шрифт жирным в строках табличной части документа 1С:Предприятие 8.3 (управляемые формы) по условию?

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

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

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

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

Подготовка: Добавление вспомогательной колонки для условия

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

  1. Создаем новую колонку в табличной части документа: Откройте конфигуратор, найдите ваш документ, перейдите на вкладку "Данные", разверните вашу табличную часть (например, ТЧТаб). Добавьте новый реквизит табличной части, например, СделатьЖирным, с типом Булево.

  2. Добавляем эту колонку на форму: Откройте форму документа, перетащите реквизит СделатьЖирным из списка реквизитов в табличную часть на форме. Затем в свойствах элемента формы для этой колонки (например, ТЧТабСделатьЖирным) установите свойство Видимость в значение Ложь. Таким образом, колонка будет присутствовать в данных, но не будет видна пользователю.

  3. Заполняем значение вспомогательной колонки в коде: При заполнении табличной части документа, когда мы определяем, должна ли строка быть жирной, мы устанавливаем соответствующее значение в нашей новой колонке СделатьЖирным.

    
    // Предположим, у нас есть запрос, который возвращает данные для табличной части
    РезультатЗапроса = Запрос.Выполнить().Выбрать();
    Пока РезультатЗапроса.Следующий() Цикл
        // Добавляем новую строку в табличную часть документа
        СтрокаТЧ = Объект.ТЧТаб.Добавить();
        // Заполняем основные поля строки
        СтрокаТЧ.НужнаяСтрока = РезультатЗапроса.Ссылка;
        // ... заполняем другие поля ...
    
        // Устанавливаем значение вспомогательной колонки по условию
        Если РезультатЗапроса.АБ = Истина Тогда 
            СтрокаТЧ.СделатьЖирным = Истина; // Если условие истинно, помечаем строку для выделения
        Иначе
            СтрокаТЧ.СделатьЖирным = Ложь; // В противном случае, не выделяем
        КонецЕсли;
    КонецЦикла;
    

    Теперь в каждой строке табличной части у нас есть флаг СделатьЖирным, который точно указывает, нужно ли ее выделять жирным шрифтом. Это значительно упрощает настройку условного оформления.

Подход 1: Декларативная настройка условного оформления в конфигураторе

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

  1. Откройте форму документа в конфигураторе: Перейдите на вкладку "Формы", откройте нужную форму.

  2. Найдите свойство "Условное оформление": В окне свойств формы найдите свойство УсловноеОформление и нажмите кнопку с многоточием [...], чтобы открыть редактор условного оформления.

  3. Добавьте новый элемент оформления: В открывшемся окне нажмите кнопку "Добавить".

  4. Настройте "Оформление":

    • В секции "Оформление" нажмите кнопку с многоточием [...].
    • В открывшемся окне "Редактирование оформления" найдите параметр Шрифт.
    • Нажмите кнопку с многоточием [...] рядом с полем "Шрифт".
    • В окне выбора шрифта установите флажок Жирный. Вы можете также выбрать другой шрифт, размер или начертание, но для нашей задачи достаточно сделать его жирным. Нажмите "ОК".
    • Нажмите "ОК" в окне "Редактирование оформления".
  5. Настройте "Условие":

    • В секции "Условие" нажмите кнопку "Добавить".
    • В открывшемся окне "Условие оформления" в качестве Поля выберите нашу вспомогательную колонку Объект.ТЧТаб.СделатьЖирным.
    • В качестве Вида сравнения выберите "Равно".
    • В качестве Значения выберите Истина.
    • Нажмите "ОК".
  6. Укажите "Оформляемые поля":

    • В секции "Оформляемые поля" нажмите кнопку "Добавить".
    • Здесь мы указываем, к каким полям будет применяться наше оформление.
    • Если мы хотим сделать жирной только конкретную колонку (например, НужнаяСтрока): выберите НужнаяСтрока из списка доступных полей.
    • Если мы хотим сделать жирной всю строку табличной части: вам нужно добавить *каждую видимую колонку* вашей табличной части в список оформляемых полей. Например, если у вас есть колонки "Колонка1", "Колонка2", "Колонка3", вам нужно добавить их все по очереди. Это гарантирует, что жирным будет отображаться текст во всех этих колонках.
    • Нажмите "ОК", чтобы закрыть редактор условного оформления.

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

Подход 2: Программная настройка условного оформления

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

  1. Очистка существующего условного оформления (опционально, но рекомендуется): Если вы настраиваете условное оформление программно и оно может изменяться или пересоздаваться, рекомендуется сначала очистить все ранее установленные правила, чтобы избежать дублирования или конфликтов.

    
    &НаСервере
    Процедура НастроитьУсловноеОформлениеТЧ()
    
        // Очищаем существующие элементы условного оформления формы
        УсловноеОформление.Элементы.Очистить();
        // ... дальнейший код настройки ...
    
    КонецПроцедуры
    
  2. Создание нового элемента условного оформления: Мы создаем новый элемент условного оформления и указываем, что он активен.

    
    // Создаем новый элемент условного оформления
    Перем ЭлементОформления;
    ЭлементОформления = УсловноеОформление.Элементы.Добавить();
    ЭлементОформления.Использование = Истина; // Обязательно устанавливаем Истина, чтобы элемент оформления работал
    
  3. Установка параметров оформления (жирный шрифт):

    Чтобы сделать шрифт жирным, нам нужно создать объект Шрифт. Мы можем получить текущий шрифт элемента формы (например, всей табличной части или конкретной колонки), а затем создать новый шрифт на его основе, изменив только признак жирности.

    
    Перем ТекущийШрифт;
    // Получаем текущий шрифт элемента формы для сохранения его параметров (например, имя, размер)
    // Если хотим получить шрифт конкретной колонки:
    // ТекущийШрифт = Элементы.ТЧТабНужнаяСтрока.Шрифт; 
    // Если хотим получить шрифт всей табличной части или стандартный шрифт формы:
    ТекущийШрифт = Элементы.ТЧТаб.Шрифт; 
    // Или даже так, если нет привязки к конкретному элементу:
    // ТекущийШрифт = Новый Шрифт("Arial", 10); // Можно задать шрифт полностью с нуля
    
    // Создаем новый объект Шрифт, делая его жирным
    // Конструктор: Новый Шрифт(ИсходныйШрифт, ИмяШрифта, Размер, Жирный, Курсив, Подчеркивание, Перечеркивание)
    Перем ЖирныйШрифт;
    ЖирныйШрифт = Новый Шрифт(ТекущийШрифт, , , Истина); // Передаем исходный шрифт и указываем Истина для жирности
    
    // Устанавливаем этот жирный шрифт для нашего элемента оформления
    ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Шрифт", ЖирныйШрифт);
    
    // При желании, мы также можем установить другие параметры оформления, например, цвет текста:
    // ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);
    
  4. Установка условия, при котором применяется оформление:

    Мы используем нашу вспомогательную колонку СделатьЖирным для задания условия отбора.

    
    Перем ЭлементУсловия;
    ЭлементУсловия = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
            
    // Указываем левое значение условия - это путь к данным нашей колонки в объекте
    ЭлементУсловия.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Объект.ТЧТаб.СделатьЖирным");
    // Указываем правое значение - Истина, если колонка помечена
    ЭлементУсловия.ПравоеЗначение = Истина;
    // Устанавливаем вид сравнения
    ЭлементУсловия.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
    // Включаем использование этого условия
    ЭлементУсловия.Использование  = Истина;
    
  5. Определение оформляемых полей:

    Нам нужно указать, какие именно элементы формы (колонки табличной части) будут подвержены этому условному оформлению.

    
    Перем ОформляемоеПоле;
    // Если хотим оформить только одну конкретную колонку, например, "НужнаяСтрока":
    // ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
    // ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("НужнаяСтрока"); // Имя колонки табличной части на форме
    
    // Если хотим оформить ВСЮ строку табличной части (кроме скрытой колонки условия):
    // Мы перебираем все подчиненные элементы (колонки) нашей табличной части на форме
    Для Каждого КолонкаТЧ Из Элементы.ТЧТаб.ПодчиненныеЭлементы Цикл
        // Исключаем нашу вспомогательную скрытую колонку из списка оформляемых полей
        // Имя элемента формы для колонки "СделатьЖирным" будет "ТЧТабСделатьЖирным"
        Если КолонкаТЧ.Имя <> "ТЧТабСделатьЖирным" Тогда 
            ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
            // Для поля компоновки данных указываем имя элемента формы-колонки
            ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(КолонкаТЧ.Имя);
        КонецЕсли;
    КонецЦикла;
    

    Обратите внимание, что для свойства Поле объекта ОформляемоеПоле мы указываем имя *элемента формы*, а не путь к данным объекта (например, "НужнаяСтрока", а не "Объект.ТЧТаб.НужнаяСтрока").

  6. Размещение кода: Всю эту процедуру НастроитьУсловноеОформлениеТЧ() мы можем вызвать, например, в обработчике события формы ПриСозданииНаСервере:

    
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
        // Здесь может быть другой ваш код инициализации формы,
        // например, заполнение табличной части.
        // После того, как табличная часть заполнена данными,
        // вызываем процедуру настройки условного оформления.
    
        НастроитьУсловноеОформлениеТЧ();
    
    КонецПроцедуры
    

Сводный пример программной настройки условного оформления

Давайте соберем все фрагменты кода в единый пример для лучшего понимания.


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    // Пример заполнения табличной части данными из запроса
    ЗаполнитьТЧПоУсловию();
    
    // После заполнения табличной части вызываем процедуру настройки условного оформления
    НастроитьУсловноеОформлениеТЧ();

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

&НаСервере
Процедура ЗаполнитьТЧПоУсловию()

    // Предположим, что у нас есть запрос к базе данных
    // и в нем поле "АБ" определяет условие для жирного шрифта
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    СправочникНоменклатура.Ссылка КАК Ссылка,
    |    ИСТИНА КАК АБ // Пример: всегда ИСТИНА для демонстрации
    |ИЗ
    |    Справочник.Номенклатура КАК СправочникНоменклатура
    |ГДЕ
    |    СправочникНоменклатура.ПометкаУдаления = ЛОЖЬ
    |И (СправочникНоменклатура.Наименование ПОДОБНО ""%услуга%"" ИЛИ СправочникНоменклатура.Наименование ПОДОБНО ""%товар%"")
    |";
    // В реальной ситуации условие для "АБ" будет зависеть от логики вашего документа

    // Очищаем табличную часть перед заполнением (если необходимо)
    Объект.ТЧТаб.Очистить();

    РезультатЗапроса = Запрос.Выполнить().Выбрать();
    Пока РезультатЗапроса.Следующий() Цикл
        // Добавляем новую строку в табличную часть документа
        СтрокаТЧ = Объект.ТЧТаб.Добавить();
        // Заполняем основные поля строки
        СтрокаТЧ.НужнаяСтрока = РезультатЗапроса.Ссылка;
        // ... заполняем другие поля табличной части ...

        // Устанавливаем значение вспомогательной колонки по условию
        Если РезультатЗапроса.АБ = Истина Тогда 
            СтрокаТЧ.СделатьЖирным = Истина; // Помечаем строку для выделения
        Иначе
            СтрокаТЧ.СделатьЖирным = Ложь; // Не помечаем
        КонецЕсли;
    КонецЦикла;

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

&НаСервере
Процедура НастроитьУсловноеОформлениеТЧ()

    // 1. Очищаем существующие элементы условного оформления, чтобы избежать дублирования
    УсловноеОформление.Элементы.Очистить();

    // 2. Создаем новый элемент условного оформления
    Перем ЭлементОформления;
    ЭлементОформления = УсловноеОформление.Элементы.Добавить();
    ЭлементОформления.Использование = Истина; // Активируем элемент оформления

    // 3. Устанавливаем параметры оформления: жирный шрифт
    Перем ТекущийШрифт;
    // Получаем текущий шрифт элемента формы (например, всей табличной части ТЧТаб)
    // Это поможет сохранить параметры шрифта по умолчанию (имя, размер)
    ТекущийШрифт = Элементы.ТЧТаб.Шрифт; 
    
    // Создаем новый объект Шрифт, делая его жирным
    Перем ЖирныйШрифт;
    // В конструкторе Новый Шрифт(ИсходныйШрифт, ИмяШрифта, Размер, Жирный, Курсив, Подчеркивание, Перечеркивание)
    // мы передаем исходный шрифт и указываем Истина для параметра "Жирный" (четвертый параметр).
    ЖирныйШрифт = Новый Шрифт(ТекущийШрифт, , , Истина); 

    // Устанавливаем созданный жирный шрифт для текущего элемента оформления
    ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Шрифт", ЖирныйШрифт);

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

    // 5. Указываем, какие поля табличной части будут оформляться
    // Если мы хотим сделать жирным текст во всей строке (кроме скрытой колонки условия)
    Перем ОформляемоеПоле;
    // Перебираем все подчиненные элементы (колонки) табличной части на форме
    Для Каждого КолонкаТЧ Из Элементы.ТЧТаб.ПодчиненныеЭлементы Цикл
        // Исключаем нашу вспомогательную скрытую колонку из списка оформляемых полей
        // (предполагаем, что имя элемента формы для колонки "СделатьЖирным" - "ТЧТабСделатьЖирным")
        Если КолонкаТЧ.Имя <> "ТЧТабСделатьЖирным" Тогда 
            // Добавляем оформляемое поле
            ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
            // В качестве поля компоновки данных указываем имя элемента формы-колонки
            ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(КолонкаТЧ.Имя);
        КонецЕсли;
    КонецЦикла;
    
    // Если вы хотите сделать жирной только одну конкретную колонку (например, "НужнаяСтрока"):
    // ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
    // ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТЧТабНужнаяСтрока"); // Укажите имя элемента формы для колонки "НужнаяСтрока"

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

Заключение

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

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

← На главную