Условное оформление 1С программно задают, когда правило зависит от данных и настроек: подсветить просроченные счета, сделать серыми непроведённые документы, написать «<не назначен>» в пустой колонке, спрятать колонки скидки, если скидки в документе не используются. Мышкой в конструкторе формы это тоже делается, но типовые конфигурации пишут оформление кодом. В УТ 11.4 у формы заказа клиента есть процедура УстановитьУсловноеОформление(), её вызывают из ПриСозданииНаСервере. Код проще сравнивать при обновлении, а значения условий можно взять из констант, функциональных опций и запросов.
Ниже — общий модуль с универсальной процедурой (цвет строки, шрифт, текст, скрытие поля) и примеры для табличной части, динамического списка и расширения. Код для платформы 8.3 и управляемых форм; про клиентский и серверный контекст формы подробнее — в статье об управляемой форме.
В 8.3 условное оформление программно добавляют в один из трёх объектов. Тип у них общий — УсловноеОформлениеКомпоновкиДанных, поэтому одна процедура годится и для формы, и для списка. Разница — в том, как записывать поля, и в контексте.
| Чьё оформление | Оформляемые поля | Поля условия | Контекст |
|---|---|---|---|
Формы: свойство УсловноеОформление | Имена элементов формы: ТоварыСумма | Пути к данным: Объект.Товары.Сумма, Объект.Склад, имя реквизита формы, Список.Статус | Только сервер |
Динамического списка: Список.КомпоновщикНастроек.Настройки.УсловноеОформление | Поля списка: СуммаДокумента; без полей — вся строка | Поля списка без префикса: Проведен | Клиент и сервер |
Отчёта на СКД: КомпоновщикНастроек.Настройки.УсловноеОформление | Поля отчёта | Поля отчёта | См. статью про поля СКД |
Каждое правило — элемент коллекции Элементы из трёх частей:
Поля — что оформлять;Отбор — при каком условии; элементы отбора те же, что в отборе динамического списка;Оформление — как. Параметр задают методом УстановитьЗначениеПараметра(), он же включает его использование.Свойство Представление — имя правила. Оно пригодится при отладке и когда правило нужно найти и удалить.
Создайте общий модуль УсловноеОформлениеСервер с флажком «Сервер». Функция ДобавитьПравило добавляет правило с одним условием за один вызов. Остальные функции нужны для условий «И/ИЛИ» и для строки табличной части целиком.
// Общий модуль УсловноеОформлениеСервер: флажок «Сервер», остальные сняты.
// Принимает любой объект УсловноеОформлениеКомпоновкиДанных:
// оформление формы (УсловноеОформление) или динамического списка
// (Список.КомпоновщикНастроек.Настройки.УсловноеОформление).
#Область ПрограммныйИнтерфейс
// Добавляет правило оформления и, если задан путь к данным, первое условие.
//
// Параметры:
// УсловноеОформление - УсловноеОформлениеКомпоновкиДанных - куда добавить правило.
// ОформляемыеПоля - Строка - имена через запятую: в форме - имена элементов,
// в динамическом списке - поля списка; "" - без полей.
// ПутьКДанным - Строка - поле условия: "Объект.Товары.Количество", "Проведен".
// ВидСравнения - ВидСравненияКомпоновкиДанных - вид сравнения.
// Значение - Произвольный - с чем сравнивать; для ВСписке - СписокЗначений.
// Оформление - Структура - ключ - имя параметра оформления, значение - его значение.
// Представление - Строка - имя правила: по нему правило можно найти и удалить.
//
// Возвращаемое значение:
// ЭлементУсловногоОформленияКомпоновкиДанных - добавленное правило.
//
Функция ДобавитьПравило(УсловноеОформление, Знач ОформляемыеПоля, Знач ПутьКДанным = "",
Знач ВидСравнения = Неопределено, Знач Значение = Неопределено,
Знач Оформление = Неопределено, Знач Представление = "") Экспорт
Правило = УсловноеОформление.Элементы.Добавить();
Правило.Представление = Представление;
Для Каждого ИмяПоля Из СтрРазделить(ОформляемыеПоля, ",", Ложь) Цикл
Имя = СокрЛП(ИмяПоля);
Если Не ПустаяСтрока(Имя) Тогда
ОформляемоеПоле = Правило.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(Имя);
КонецЕсли;
КонецЦикла;
Если Не ПустаяСтрока(ПутьКДанным) Тогда
ДобавитьУсловие(Правило, ПутьКДанным, ВидСравнения, Значение);
КонецЕсли;
Если Оформление <> Неопределено Тогда
Для Каждого Параметр Из Оформление Цикл
// Неизвестное имя параметра вызывает исключение: опечатка видна сразу.
Правило.Оформление.УстановитьЗначениеПараметра(Параметр.Ключ, Параметр.Значение);
КонецЦикла;
КонецЕсли;
Возврат Правило;
КонецФункции
// Добавляет условие в правило или в группу условий. Условия одного уровня
// соединяются по И; для ИЛИ сначала создайте группу функцией ДобавитьГруппуИли.
//
// Параметры:
// Владелец - ЭлементУсловногоОформленияКомпоновкиДанных, ГруппаЭлементовОтбораКомпоновкиДанных.
// ПутьКДанным - Строка - поле условия.
// ВидСравнения - ВидСравненияКомпоновкиДанных - вид сравнения.
// Значение - Произвольный - для Заполнено и НеЗаполнено не нужно.
//
// Возвращаемое значение:
// ЭлементОтбораКомпоновкиДанных - добавленное условие.
//
Функция ДобавитьУсловие(Владелец, Знач ПутьКДанным, Знач ВидСравнения, Знач Значение = Неопределено) Экспорт
Условие = КоллекцияУсловий(Владелец).Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Условие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ПутьКДанным);
Условие.ВидСравнения = ВидСравнения;
Если Значение <> Неопределено Тогда
Условие.ПравоеЗначение = Значение;
КонецЕсли;
Возврат Условие;
КонецФункции
// Добавляет группу «ИЛИ»: правило сработает, если выполнено хотя бы одно условие группы.
//
// Возвращаемое значение:
// ГруппаЭлементовОтбораКомпоновкиДанных - группа, в которую добавляют условия.
//
Функция ДобавитьГруппуИли(Владелец) Экспорт
Группа = КоллекцияУсловий(Владелец).Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
Группа.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
Возврат Группа;
КонецФункции
// Добавляет в оформляемые поля все колонки таблицы формы, в том числе
// вложенные в группы колонок. Так строку табличной части красят целиком.
//
// Параметры:
// Правило - ЭлементУсловногоОформленияКомпоновкиДанных - правило оформления формы.
// ТаблицаФормы - ТаблицаФормы - элемент формы, например Элементы.Товары.
// Исключить - Строка - имена колонок через запятую, которые оформлять не нужно.
//
Процедура ДобавитьКолонкиТаблицы(Правило, ТаблицаФормы, Знач Исключить = "") Экспорт
Исключения = Новый Массив;
Для Каждого ИмяКолонки Из СтрРазделить(Исключить, ",", Ложь) Цикл
Исключения.Добавить(СокрЛП(ИмяКолонки));
КонецЦикла;
ДобавитьКолонкиГруппы(Правило, ТаблицаФормы.ПодчиненныеЭлементы, Исключения);
КонецПроцедуры
// Удаляет правила с указанным представлением, например перед повторной установкой.
//
Процедура УдалитьПравила(УсловноеОформление, Знач Представление) Экспорт
Удаляемые = Новый Массив;
Для Каждого Правило Из УсловноеОформление.Элементы Цикл
Если Правило.Представление = Представление Тогда
Удаляемые.Добавить(Правило);
КонецЕсли;
КонецЦикла;
Для Каждого Правило Из Удаляемые Цикл
УсловноеОформление.Элементы.Удалить(Правило);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция КоллекцияУсловий(Владелец)
Если ТипЗнч(Владелец) = Тип("ЭлементУсловногоОформленияКомпоновкиДанных") Тогда
Возврат Владелец.Отбор.Элементы;
КонецЕсли;
Возврат Владелец.Элементы; // ГруппаЭлементовОтбораКомпоновкиДанных
КонецФункции
Процедура ДобавитьКолонкиГруппы(Правило, ПодчиненныеЭлементы, Исключения)
Для Каждого ЭлементФормы Из ПодчиненныеЭлементы Цикл
Если ТипЗнч(ЭлементФормы) = Тип("ГруппаФормы") Тогда
ДобавитьКолонкиГруппы(Правило, ЭлементФормы.ПодчиненныеЭлементы, Исключения);
ИначеЕсли ТипЗнч(ЭлементФормы) = Тип("ПолеФормы")
И Исключения.Найти(ЭлементФормы.Имя) = Неопределено Тогда
ОформляемоеПоле = Правило.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ЭлементФормы.Имя);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
Что передавать в структуре Оформление (имена — из синтакс-помощника, тип ОформлениеКомпоновкиДанных):
| Параметр | Значение | Пример |
|---|---|---|
ЦветФона, ЦветТекста | Цвет | WebЦвета.Лимонный, Новый Цвет(255, 235, 235) |
Шрифт | Шрифт | Новый Шрифт(, , Истина) — жирный, Новый Шрифт(, , , , , Истина) — зачёркнутый |
Текст | Строка вместо значения | НСтр("ru = '<не указан>'") |
Формат | Форматная строка | "ЧДЦ=2", "ДЛФ=D" |
Видимость | Булево | Ложь — скрыть колонку |
Отображать | Булево | Ложь — не показывать значение в ячейке |
ТолькоПросмотр, Доступность, ОтметкаНезаполненного | Булево | Истина |
По синтакс-помощнику Видимость, Отображать, Доступность и ТолькоПросмотр действуют только на поля в таблице, то есть на колонки.
СтрРазделить(ОформляемыеПоля, ",", Ложь) из пустой строки даёт пустой массив. Правило без полей в динамическом списке оформляет всю строку: так в УТ 11.4 подсвечены заказы с высоким приоритетом.УстановитьЗначениеПараметра() бросает исключение, если параметра с таким именем нет. Опечатка «ЦветФон» вылезет при первом открытии формы, а не через месяц на жалобе пользователя.Значение <> Неопределено пропускает Ложь и 0, поэтому условие «Проведен = Ложь» работает. Для ВСписке передайте СписокЗначений.ДобавитьКолонкиТаблицы обходит колонки рекурсивно, с учётом групп. В оформлении формы «вся строка таблицы» — это все её колонки. Если колонки добавляются кодом, вызывайте функцию после них.УдалитьПравила нужна, когда правила переустанавливают на открытой форме: без неё каждый вызов добавит дубли.Условное оформление табличной части программно — самый частый случай. Пример ниже — форма своего документа с табличной частью «Товары» (Номенклатура, Количество, Цена, ПроцентСкидки, СуммаСкидки, Сумма, Склад) и реквизитами шапки Склад и РучнаяСкидка. Элементы колонок названы по умолчанию: ТоварыКоличество, ТоварыСумма и так далее. Условное оформление формы программно задают в серверной процедуре, которую вызывают из ПриСозданииНаСервере.
// Модуль формы документа с табличной частью «Товары».
// Реквизит формы ЦеныЗафиксированы (Булево) выведен на форму флажком.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
// 1. Количество не заполнено - красный текст во всей строке.
Правило = УсловноеОформлениеСервер.ДобавитьПравило(УсловноеОформление, "",
"Объект.Товары.Количество", ВидСравненияКомпоновкиДанных.Равно, 0,
Новый Структура("ЦветТекста", WebЦвета.Красный), "Строка без количества");
УсловноеОформлениеСервер.ДобавитьКолонкиТаблицы(Правило, Элементы.Товары);
// 2. Крупная сумма - жирный шрифт только в колонке «Сумма».
УсловноеОформлениеСервер.ДобавитьПравило(УсловноеОформление, Элементы.ТоварыСумма.Имя,
"Объект.Товары.Сумма", ВидСравненияКомпоновкиДанных.БольшеИлиРавно, 100000,
Новый Структура("Шрифт", Новый Шрифт(, , Истина)));
// 3. Склад в строке пуст, но указан в шапке - подсказка вместо пустой ячейки.
Правило = УсловноеОформлениеСервер.ДобавитьПравило(УсловноеОформление, Элементы.ТоварыСклад.Имя,
"Объект.Товары.Склад", ВидСравненияКомпоновкиДанных.НеЗаполнено, ,
Новый Структура("Текст, ЦветТекста", НСтр("ru = '<как в шапке>'"), WebЦвета.Серый));
УсловноеОформлениеСервер.ДобавитьУсловие(Правило, "Объект.Склад", ВидСравненияКомпоновкиДанных.Заполнено);
// 4. Ручная скидка в шапке выключена - колонки скидки скрыты целиком.
УсловноеОформлениеСервер.ДобавитьПравило(УсловноеОформление,
Элементы.ТоварыПроцентСкидки.Имя + "," + Элементы.ТоварыСуммаСкидки.Имя,
"Объект.РучнаяСкидка", ВидСравненияКомпоновкиДанных.Равно, Ложь,
Новый Структура("Видимость", Ложь));
// 5. Номенклатура не выбрана - цену и сумму в этой строке не показываем.
УсловноеОформлениеСервер.ДобавитьПравило(УсловноеОформление,
Элементы.ТоварыЦена.Имя + "," + Элементы.ТоварыСумма.Имя,
"Объект.Товары.Номенклатура", ВидСравненияКомпоновкиДанных.НеЗаполнено, ,
Новый Структура("Отображать", Ложь));
// 6. Флажок на форме - цена только для просмотра, с цветным фоном.
// Условие по реквизиту формы: при смене флажка сервер не нужен.
УсловноеОформлениеСервер.ДобавитьПравило(УсловноеОформление, Элементы.ТоварыЦена.Имя,
"ЦеныЗафиксированы", ВидСравненияКомпоновкиДанных.Равно, Истина,
Новый Структура("ТолькоПросмотр, ЦветФона", Истина, WebЦвета.Роса));
КонецПроцедуры
Элементы.ТоварыСумма.Имя, а не строка «ТоварыСумма». Если элемент переименуют, форма упадёт при открытии с понятной ошибкой.Объект.Товары.Сумма проверяется для каждой строки, Объект.Склад — одно на всю таблицу. Правило 3 сочетает оба: оно сработает в пустых строках, только если склад указан в шапке.Видимость с условием по шапке скрывает колонку целиком. Отображать с условием по строке оставляет колонку, но не показывает значение в подходящих строках. Так же устроены типовые правила УТ 11.4: колонки НДС скрываются по налогообложению из шапки, единица измерения не выводится в строках с заполненной упаковкой.ПриИзменении с вызовом сервера не нужен.Условное оформление таблицы формы, связанной с реквизитом типа ТаблицаЗначений, пишется так же: условие — ТаблицаОстатков.Остаток, поле — имя элемента колонки. Как вывести такую таблицу, рассказано в статье о таблице значений на форме.
Условное оформление динамического списка программно пишут в его компоновщик: в правилах участвуют только поля списка. Пример — форма списка документа «Счёт».
// Модуль формы списка документа «Счёт» (реквизиты СуммаДокумента,
// СуммаОплаты, СрокОплаты, Ответственный, Срочный). Основной реквизит - Список.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьОформлениеСписка();
КонецПроцедуры
&НаСервере
Процедура УстановитьОформлениеСписка()
// Правила самого списка: поля - без префикса «Список.»,
// правило без оформляемых полей красит всю строку.
ОформлениеСписка = Список.КомпоновщикНастроек.Настройки.УсловноеОформление;
// Не проведён и не помечен на удаление - серый текст.
Правило = УсловноеОформлениеСервер.ДобавитьПравило(ОформлениеСписка, "",
"Проведен", ВидСравненияКомпоновкиДанных.Равно, Ложь,
Новый Структура("ЦветТекста", WebЦвета.Серый), "Счёт не проведён");
УсловноеОформлениеСервер.ДобавитьУсловие(Правило, "ПометкаУдаления",
ВидСравненияКомпоновкиДанных.Равно, Ложь);
// Помечен на удаление - зачёркнутый шрифт (шестой параметр конструктора).
УсловноеОформлениеСервер.ДобавитьПравило(ОформлениеСписка, "",
"ПометкаУдаления", ВидСравненияКомпоновкиДанных.Равно, Истина,
Новый Структура("Шрифт", Новый Шрифт(, , , , , Истина)), "Помечен на удаление");
// Срок оплаты прошёл, а оплаты нет. Вместо ТекущаяДатаСеанса() -
// стандартная дата «начало этого дня», как в БСП.
Правило = УсловноеОформлениеСервер.ДобавитьПравило(ОформлениеСписка, "СрокОплаты",
"СрокОплаты", ВидСравненияКомпоновкиДанных.Меньше,
Новый СтандартнаяДатаНачала(ВариантСтандартнойДатыНачала.НачалоЭтогоДня),
Новый Структура("ЦветТекста, Шрифт", WebЦвета.ТемноКрасный, Новый Шрифт(, , Истина)),
"Оплата просрочена");
УсловноеОформлениеСервер.ДобавитьУсловие(Правило, "СрокОплаты", ВидСравненияКомпоновкиДанных.Заполнено);
УсловноеОформлениеСервер.ДобавитьУсловие(Правило, "СуммаОплаты", ВидСравненияКомпоновкиДанных.Равно, 0);
// Срочный ИЛИ крупный счёт - фон всей строки.
Правило = УсловноеОформлениеСервер.ДобавитьПравило(ОформлениеСписка, "", , , ,
Новый Структура("ЦветФона", WebЦвета.Лимонный), "Срочные и крупные");
ГруппаИли = УсловноеОформлениеСервер.ДобавитьГруппуИли(Правило);
УсловноеОформлениеСервер.ДобавитьУсловие(ГруппаИли, "Срочный",
ВидСравненияКомпоновкиДанных.Равно, Истина);
УсловноеОформлениеСервер.ДобавитьУсловие(ГруппаИли, "СуммаДокумента",
ВидСравненияКомпоновкиДанных.БольшеИлиРавно, 1000000);
// Текст в колонке - правилом формы, как в УТ 11.4: поле - имя элемента,
// условие - путь «Список.<поле>».
УсловноеОформлениеСервер.ДобавитьПравило(УсловноеОформление, Элементы.СписокОтветственный.Имя,
"Список.Ответственный", ВидСравненияКомпоновкиДанных.НеЗаполнено, ,
Новый Структура("Текст, ЦветТекста", НСтр("ru = '<не назначен>'"), WebЦвета.Серый));
КонецПроцедуры
СписокОтветственный, условие — Список.Ответственный. Так в УТ 11.4 подменяется текст в колонке статуса заказа.СтандартнаяДатаНачала вместо ТекущаяДатаСеанса() — приём из БСП (СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата). Дата, вычисленная в коде, застынет на момент открытия формы.Элементы.Очистить() и стирают правила, заданные в конструкторе. В своей форме очищать не обязательно.Элемент отбора сравнивает поле со значением. «Оплачено меньше половины» — уже выражение над двумя полями. Есть два пути: добавить в запрос списка поле ВЫБОР КОГДА Счет.СуммаОплаты * 2 < Счет.СуммаДокумента ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ и оформлять по нему обычным правилом либо красить строки в обработчике ПриПолученииДанныхНаСервере.
// Обработчик события ПриПолученииДанныхНаСервере таблицы «Список»
// (назначается в палитре свойств таблицы). Платформа 8.3.10 и выше.
&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
Для Каждого КлючИЗначение Из Строки Цикл
СтрокаСписка = КлючИЗначение.Значение;
Данные = СтрокаСписка.Данные;
// Оплачено меньше половины: выражение над двумя полями,
// элементом отбора такое условие не записать.
Если Данные.СуммаДокумента = 0 Или Данные.СуммаОплаты = 0
Или Данные.СуммаОплаты * 2 >= Данные.СуммаДокумента Тогда
Продолжить;
КонецЕсли;
// Оформление есть только у видимых ячеек: красим все - выходит вся строка.
Для Каждого Ячейка Из СтрокаСписка.Оформление Цикл
Ячейка.Значение.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СветлоЖелтый);
Если Ячейка.Ключ = "СуммаОплаты" Тогда
Ячейка.Значение.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(, , Истина));
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Обработчик доступен с платформы 8.3.10 и по синтакс-помощнику должен иметь директиву &НаСервереБезКонтекста. Коллекция Оформление содержит только видимые ячейки. Поля, которые читает код, выведите в колонки или отметьте «Использовать всегда». Обработчик срабатывает при каждом получении данных списком: никаких запросов в цикле, при необходимости — один запрос по Строки.ПолучитьКлючи().
В типовой форме модуль не правят, а правила добавляют из расширения. Пример — УТ 11.4, форма ФормаСписка документа ЗаказКлиента. Типовая УстановитьУсловноеОформление() вызывается из ПриСозданииНаСервере. Она очищает оформление списка и формы и заново добавляет типовые правила: цвета приоритетов, текст статуса, формат даты. Всё, что расширение добавило раньше (в обработчике «Перед» или в конструкторе заимствованной формы), исчезнет. Поэтому правила вешают аннотацией &После прямо на типовую процедуру.
// Расширение с префиксом Расш1_. Заимствована форма ФормаСписка
// документа ЗаказКлиента; имена сверены по УТ 11.4.
&НаСервере
&После("УстановитьУсловноеОформление")
Процедура Расш1_УстановитьУсловноеОформлениеПосле()
// Типовая процедура уже очистила оформление и добавила свои правила.
// Наши правила идут после неё, поэтому Очистить() их не сотрёт.
ОформлениеСписка = Список.КомпоновщикНастроек.Настройки.УсловноеОформление;
// Заказ не согласован, а желаемая дата отгрузки уже наступила - красным.
Правило = ОформлениеСписка.Элементы.Добавить();
Правило.Представление = НСтр("ru = 'Расш1: пора отгружать, заказ не согласован'");
Условие = Правило.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Условие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Статус");
Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Условие.ПравоеЗначение = Перечисления.СтатусыЗаказовКлиентов.НеСогласован;
Условие = Правило.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Условие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЖелаемаяДатаОтгрузки");
Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
Условие.ПравоеЗначение = Новый СтандартнаяДатаНачала(ВариантСтандартнойДатыНачала.НачалоСледующегоДня);
Условие = Правило.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Условие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЖелаемаяДатаОтгрузки");
Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Правило.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);
// Крупный заказ - сумма жирным, только в своей колонке.
Правило = ОформлениеСписка.Элементы.Добавить();
Правило.Представление = НСтр("ru = 'Расш1: крупный заказ'");
ОформляемоеПоле = Правило.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("СуммаДокумента");
Условие = Правило.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Условие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СуммаДокумента");
Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
Условие.ПравоеЗначение = 500000;
Правило.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(, , Истина));
КонецПроцедуры
&НаСервере. Имя типовой процедуры в аннотации записано строкой, поэтому после обновления конфигурации проверяйте, что она на месте.ПриСозданииНаСервере с вызовом «После». Как заимствовать форму и назначить обработчик, разобрано в статье о расширении формы.Новый ПолеКомпоновкиДанных("Объект.Товары.Сумма") в Поля ничего не оформит, ошибки тоже не будет. В полях формы пишут имя элемента, в условии — путь к данным.УсловноеОформление есть только на сервере. В процедуре &НаКлиенте модуль не скомпилируется: «Переменная не определена (УсловноеОформление)». У динамического списка свойство УсловноеОформление доступно и на клиенте.Видимость и Отображать действуют на колонки таблиц. Поле шапки скрывают свойством элемента: Элементы.Склад.Видимость = Ложь.ПриСозданииНаСервере или удаляйте старые по представлению.ТекущаяДатаСеанса() в правом значении запоминает момент, когда правило добавили. Для «сегодня» берите СтандартнаяДатаНачала.Элементы.Очистить() правило сотрёт. Добавляйте правила после неё.Проще всего сделать условие по реквизиту формы: меняете реквизит на клиенте, оформление пересчитывается само. Если правило нужно перестроить, вызовите серверную процедуру: УдалитьПравила() и добавьте правило заново или выключите его через Правило.Использование = Ложь.
Не добавляйте оформляемые поля в правило самого списка. В оформлении формы строку таблицы красят перечислением всех колонок — для этого в модуле есть ДобавитьКолонкиТаблицы.
По синтакс-помощнику правым значением элемента отбора может быть поле: Условие.ПравоеЗначение = Новый ПолеКомпоновкиДанных("СуммаДокумента"). Арифметику (половина суммы, разница дат в днях) так не записать — нужно поле в запросе списка или обработчик ПриПолученииДанныхНаСервере.
В обычных формах толстого клиента у табличного поля есть событие ПриВыводеСтроки. В нём меняют ОформлениеСтроки.ЦветФона или оформление отдельной ячейки через ОформлениеСтроки.Ячейки. Код из этой статьи — для управляемых форм.
Если правил десятки, они зависят от регистров и прав, а типовую форму можно менять только расширением, быстрее отдать задачу программисту в рамках доработки 1С. Опишите, что и при каком условии подсветить, и разместите задачу: оценка бесплатная, ответ — в течение рабочего дня.
Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.