Добавление условного оформления одной строкой в элементы формы: ДинамическийСписок, ТаблицаФормы - поддерживает добавление сравниваемого значения при виде сравнения ВСписке - создание/подбор (отборы будут дополнены) элемента отбора - замена (т.е. удаление и создание заново, в т.ч. отборы - удаление (без создания) - исключение ПравоеЗначение из отбора, но не удалять само оформление
// Устанавливает Элемент УсловноеОформление
// 1) создает ЭлементУО (УсловноеОформление.Элементы; если не ПустаяСтрока(Представление) - пробует подобрать существующий)
// 2) создает ЭлементОформления (ЭлементУО.Поля.Элементы; если ЭлементУО подобран - не создает)
// 3) создает ЭлементОтбора (ЭлементУО.Отбор.Элементы; пробует сначала подобрать существующий по ПутьКДаннымПоля и ВидСравнения=ВСписке - в таком случае дополняет ПравоеЗначение)
// СДЕЛАНО вынесено в срксСерверныйОбщий из документ.ПеремещениеТоваров.Формы.ФормаДокумента
// Доступность: Сервер
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения, Произвольный - Коллекция с реквизитом УсловноеОформление типа Тип("УсловноеОформлениеКомпоновкиДанных")
// Элемент - ТаблицаФормы
// Представление - Строка - произвольное человекочитаемое имя УсловноеОформление.Элементы[N].Имя
// Параметр - Строка - Имя параметра который нужно оформлять, напр. "ЦветФона", или "Шрифт"
// Значение - Произвольный - Значение которое нужно установить параметру, напр. Новый Шрифт(...) или Новый Цвет(...)
// ПутьКДаннымПоля - Строка - Путь к данным на форме для отбора по условию , напр. "Объект.Товары.Номенклатура"
// ВидСравнения - ВидСравненияКомпоновкиДанных
// ПравоеЗначение - Произвольный - данные с которыми сравнивать, напр. Справочники.Номенклатура.НайтиПОНаименованию("Пакет")
// Действие - Число - 0 = просто создать/подобрать (отборы будут дополнены), 1 = заменить (т.е. удалить и создать заново, в т.ч. отборы), 2 = удалить (и не создавать),
// 3 = исключить ПравоеЗначение из отбора, но не удалять само оформление. Нужно для удобной смены отборов
Процедура УстановитьЭлементУсловногоОформления(Форма, Элемент, Представление = "", Параметр = Неопределено, Значение = Неопределено, ПутьКДаннымПоля = Неопределено, ВидСравнения = Неопределено, Знач ПравоеЗначение = Неопределено, Действие = 0) Экспорт
//ОН = срксСерверныйОбщий;
//Если Форма = Неопределено Тогда // для исп. в форме, как рекомендуют разработчики https://its.1c.ru/db/v8std/content/710/hdoc
// Форма = ЭтаФорма
//КонецЕсли;
// Инициализация параметров оформления и отбора
Если ПутьКДаннымПоля = Неопределено ИЛИ Не СтрНайти(ПутьКДаннымПоля, Элемент.ПутьКДанным) Тогда
ПутьКДаннымПоля = Элемент.ПутьКДанным + "." + ?(ЗначениеЗаполнено(ПутьКДаннымПоля), ПутьКДаннымПоля, "НомерСтроки")
КонецЕсли;
Если ВидСравнения = Неопределено Тогда
ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке
ИначеЕсли ТипЗнч(ВидСравнения) = Тип("Строка") Тогда
ВидСравнения = ВидСравненияКомпоновкиДанных[ВидСравнения]
КонецЕсли;
Если ПравоеЗначение = Неопределено Тогда
ПравоеЗначение = 1
КонецЕсли;
Если Параметр = Неопределено Тогда
Параметр = "ЦветФона";
Значение = ЦветаСтиля.ЦветАктивности;
КонецЕсли;
Если Значение = Неопределено Тогда
Значение = ЦветаСтиля.ЦветАктивности;
КонецЕсли;
// Подбор/создание элемента условного оформления
Если Не ПустаяСтрока(Представление) Тогда Для Каждого _ Из Форма.УсловноеОформление.Элементы Цикл Если _.Представление = Представление Тогда
ЭлементУсловногоОформления = _;
Если Действие > 0 Тогда
Если Действие < 3 Тогда
Форма.УсловноеОформление.Элементы.Удалить(ЭлементУсловногоОформления);
ИначеЕсли Действие = 3 Тогда
_ПравоеЗначение = ЭлементУсловногоОформления.Отбор.Элементы[0].ПравоеЗначение;
Если ТипЗнч(_ПравоеЗначение) = Тип("СписокЗначений") Тогда
_НайденныйЭлемент = _ПравоеЗначение.НайтиПоЗначению(ПравоеЗначение);
Если _НайденныйЭлемент <> Неопределено Тогда
_ПравоеЗначение.Удалить(_НайденныйЭлемент);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Действие = 1 Тогда
УстановитьЭлементУсловногоОформления(Элемент, Представление, параметр, Значение, ПутьКДаннымполя, ВидСравнения, ПравоеЗначение)
КонецЕсли;
Возврат;
КонецЕсли;
ДобавитьОформление = Ложь;
Прервать;
КонецЕсли КонецЦикла КонецЕсли;
Если Действие > 1 Тогда
Возврат
КонецЕсли;
Если ЭлементУсловногоОформления = Неопределено Тогда
ЭлементУсловногоОформления = Форма.УсловноеОформление.Элементы.Добавить();
ЭлементУсловногоОформления.Представление = Представление;
ДобавитьОформление = Истина;
КонецЕсли;
// добавляет элемент к оформлению (напр. элементы.Товары)
Если ДобавитьОформление Тогда
ЭлементОформления = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ЭлементОформления.Поле = Новый ПолеКомпоновкиДанных(Элемент.Имя);
ЭлементОформления.Использование = Истина;
КонецЕсли;
// добавляет отбор (напр. по номеру строки из списка)
ДобавитьОтбор = Истина;
Для Каждого _ Из ЭлементУсловногоОформления.Отбор.Элементы Цикл
Если строка(_.ЛевоеЗначение) = ПутьКДаннымПоля И
_.ВидСравнения = ВидСравнения И
ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке
Тогда
Если _.ПравоеЗначение.НайтиПоЗначению(ПравоеЗначение) = Неопределено Тогда
_.ПравоеЗначение = Массив(_.ПравоеЗначение, ПравоеЗначение);
КонецЕсли;
ДобавитьОтбор = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если ДобавитьОтбор Тогда
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ПутьКДаннымПоля);
ЭлементОтбора.ВидСравнения = ВидСравнения;
ЭлементОтбора.ПравоеЗначение = ?(ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке И Не ТипЗнч(ПравоеЗначение) = Тип("СписокЗначений"), Массив(Новый СписокЗначений, ПравоеЗначение), ПравоеЗначение);
ЭлементОтбора.Использование = Истина;
КонецЕсли;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра(Параметр, Значение);
//ЭлементУсловногоОформления.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
//ЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = "Предустановленный";
//ЭлементУсловногоОформления.Представление = НСтр("en='By status color';ru='По цвету статуса '");
//ЭлементУсловногоОформления.Использование = Истина;
КонецПроцедуры
УстановитьУсловноеОформлениеДереваПодсистем (БСП)
ЗаполнитьУсловноеОформлениеСпискаФайлов (БСП)
ЗаполнитьУсловноеОформлениеСпискаПапок (БСП)
Новый элемент условного оформления
СнятьУсловноеОформлениеСпискаЗначений (БСП)
Программное добавление условного оформления документа
УстановитьУсловноеОформлениеСпискаСертификатов (БСП)
Условное оформление на обычных формах (ОФ)