Условное оформление в управляемых формах
Всем привет! Написала внешнюю обработку. На форме таблица значений. Пытаюсь окрасить ячейку в зависимости от значения даты. Но не работает
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭтаФорма.УсловноеОформление.Элементы.Очистить();
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("СчетСтрока");
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Счета.ДатаСдачи");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ЭлементОтбора.ПравоеЗначение = ТекущаяДата();
НачалоДня(ТекущаяДата())+4*60*60*24;
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Счета.ДатаСдачи");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбора.ПравоеЗначение = НачалоДня(ТекущаяДата())+1*60*60*24;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Оранжевый);
КонецПроцедуры
ПоказатьПо теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3) Natalito,
Вот этой строкой настроенное оформление с конфигуратора будет удалено.
А ещё у меня есть другое условное оформление, которое я настроила на самой форме.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭтаФорма.УсловноеОформление.Элементы.Очистить();
Вот этой строкой настроенное оформление с конфигуратора будет удалено.
вот пример работающего оформления, можете взять как пример:
&НаСервере
Процедура УстановитьУсловноеОформлениеОтработанногоВремени()
// Часть условного оформления установлена непосредственно в свойствах формы
Для каждого ЭлементСписка Из СписокВыбора Цикл
ЭлементОформления = ЭтаФорма.УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Использование = Истина;
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДетальныеЗаписиОтработанногоВремени.ВидВремени");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ПравоеЗначение = ЭлементСписка.Значение;
Текст = ЭлементОформления.Оформление.Элементы.Найти("Текст");
Текст.Использование = Истина;
Представление = ?(ПустаяСтрока(ЭлементСписка.Представление), ЭлементСписка.Значение, ЭлементСписка.Представление);
Текст.Значение = Представление;
ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Использование = Истина;
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДетальныеЗаписиОтработанногоВремениВидВремени");
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформлениеПоПараметрам(КодОформления, ЦветОформления, Шрифт)
Для нн = 1 По 32 Цикл
ЭлементОформления = ЭтаФорма.УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Использование = Истина;
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СводнаяТаблица.День"+(нн+32));
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ПравоеЗначение = КодОформления;
//ЦветФона = ЭлементОформления.Оформление.Элементы.Найти("ЦветФона");
//ЦветФона.Использование = Истина;
//ЦветФона.Значение = ЦветОформления;
ЦветТекста = ЭлементОформления.Оформление.Элементы.Найти("ЦветТекста");
ЦветТекста.Использование = Истина;
ЦветТекста.Значение = ЦветОформления;
//Шрифт = ЭлементОформления.Оформление.Элементы.Найти("Шрифт");
//Шрифт.Использование = Истина;
//Шрифт.Значение = Шрифт;
ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Использование = Истина;
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("СводнаяТаблицаДень"+нн);
КонецЦикла
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
Шрифт = Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Истина);
УстановитьУсловноеОформлениеПоПараметрам("ДатаЗапрета", WebЦвета.Серый, Шрифт);
УстановитьУсловноеОформлениеПоПараметрам("Ошибка", WebЦвета.Красный, Шрифт);
УстановитьУсловноеОформлениеОтработанногоВремени();
КонецПроцедуры
Показать&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭтаФорма.УсловноеОформление.Элементы.Очистить();
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ЭлементУсловногоОформления.Использование = Истина; // вот это
ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("СчетСтрока");
ОформляемоеПоле.Использование = Истина; // вот это
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Счета.ДатаСдачи");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ЭлементОтбора.ПравоеЗначение = ТекущаяДата();
ЭлементОтбора.Использование = Истина; // вот это
НачалоДня(ТекущаяДата())+4*60*60*24;
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Счета.ДатаСдачи");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбора.ПравоеЗначение = НачалоДня(ТекущаяДата())+1*60*60*24;
ЭлементОтбора.Использование = Истина; // вот это
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Оранжевый);
КонецПроцедуры
Показать
(17) spezc, и чего ты мне минусы лепишь? я написал работающий вариант который максимально эффективно работает и используется в ЗУП 3.0 на управляемых формах. а судя по объёму переписки Вы ерунду городите. Таблицы на управляемых формах крайне нестабильно работают в плане оформления.
Вы пытаетесь решить задачу, которая изначально неверным способом решена.
Вы пытаетесь решить задачу, которая изначально неверным способом решена.
(37) spezc, ты опять не прочитал мой пост. я ж написал что задача неправильная! и таблица стабильно не работает. Ответы Натальи это чётко демонстрируют. А как только пойдёте правильным путём, сразу всё получится. Динамический список решает гораздо больше задач, чем таблица.
(18) spezc, там немного неправильно скопировала. на самом деле условия для даты такие
и
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ЭлементОтбора.ПравоеЗначение = НачалоДня(ТекущаяДата())+4*60*60*24;
и
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбора.ПравоеЗначение = НачалоДня(ТекущаяДата())+1*60*60*24;
(25) spezc,
Вот код
Вот код
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УсловноеОформление.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ЭлементУсловногоОформления.Использование = Истина;
ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Счета.СчетСтрока");
ОформляемоеПоле.Использование = Истина;
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Счета.ДатаСдачи");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ЭлементОтбора.ПравоеЗначение = НачалоДня(ТекущаяДата())+4*60*60*24;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Счета.ДатаСдачи");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбора.ПравоеЗначение = НачалоДня(ТекущаяДата())+1*60*60*24;
ЭлементОтбора.Использование = Истина;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Оранжевый);
КонецПроцедуры
ПоказатьПрикрепленные файлы:
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот