Условное оформление в управляемых формах
Всем привет! Написала внешнюю обработку. На форме таблица значений. Пытаюсь окрасить ячейку в зависимости от значения даты. Но не работает
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭтаФорма.УсловноеОформление.Элементы.Очистить();
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("СчетСтрока");
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Счета.ДатаСдачи");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
ЭлементОтбора.ПравоеЗначение = ТекущаяДата();
НачалоДня(ТекущаяДата())+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Цвета.Оранжевый);
КонецПроцедуры
ПоказатьПрикрепленные файлы:
Ребята! У меня получилось!!! Вторую часть условия оформила в переменную ЭлементОтбора1!!! 2 часа!!! 2 часа я потратила на такую глупость!!!!!!!!!!!!!!
Запустил ваш код, с одним отбором работает, два - нет. Видимо надо попробовать сделать через тип "ГруппаЭлементовОтбораКомпоновкиДанных"
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот