Вопрос по условному оформлению дерева на управляемой форме
Хочу установить условное оформление колонки дерева таким образом, чтоб вместо его значения выводилось значение из другой колонки.
Пытаюсь сделать так:
УО = ЭтаФорма.УсловноеОформление;
УО.Элементы.Очистить();
Оформляемоеполе = ЭлементУО.Поля.Элементы.Добавить(); // Поля таблицы для которых будет действовать оформление
Оформляемоеполе.Поле = Новый ПолеКомпоновкиДанных(«ДеревоНоменклатурыНоменклатураИзОблака»);
Оформляемоеполе.Использование = ИСТИНА;
ЭлементУО.Оформление.УстановитьЗначениеПараметра(«Текст», Новый ПолеКомпоновкиДанных(«ДеревоНоменклатурыНоменклатураИзОблакаСТР»));
По факту, если я меняю значение в колонке «НоменклатураИзОблакаСТР», то колонка «НоменклатураИзОблака» как была пустой, так и отображается.
ЧЯДНТ? Можно ли как-то вообще это сделать?
Условное оформление не предполагает изменение значений поля. Оформление меняет цвет, видимость, вывод и т.п.
А если
ЭлементУО.Оформление.УстановитьЗначениеПараметра(«Текст», Новый ПолеКомпоновкиДанных(«ДеревоНоменклатуры.НоменклатураИзОблакаСТР»));
(3) Вот точно — отбор не добавлял. Попробую.
(2) Тоже попробую вариант.
(4) Ага, я так и хотел.
Спасибо! Отпишусь, по результату.
Переделал:
ЭлементУО = УО.Элементы.Добавить();
Оформляемоеполе = ЭлементУО.Поля.Элементы.Добавить(); // Поля таблицы для которых будет действовать оформление
Оформляемоеполе.Поле = Новый ПолеКомпоновкиДанных(«ДеревоНоменклатурыНоменклатураИзОблака»);
Оформляемоеполе.Использование = ИСТИНА;
ЭлементОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»)); // отбор текущей строки таблицы
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«ДеревоНоменклатурыНоменклатураИзОблакаСТР»);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ЭлементУО.Оформление.УстановитьЗначениеПараметра(«Текст», Новый ПолеКомпоновкиДанных(«ДеревоНоменклатуры.НоменклатураИзОблакаСТР»));//ДеревоНоменклатуры.НоменклатураИзОблакаСТР»));
(6) ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«ДеревоНоменклатуры.НоменклатураИзОблакаСТР»);
Или просто .ЛевоеЗначение = Истина; .ПравоеЗначение = Истина
ЭлементОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»)); // отбор текущей строки таблицы
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Истина;//Новый ПолеКомпоновкиДанных(«ДеревоНоменклатурыНоменклатураИзОблакаСТР»);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;
ЭлементУО.Оформление.УстановитьЗначениеПараметра(«Текст», Новый ПолеКомпоновкиДанных(«ДеревоНоменклатуры.НоменклатураИзОблакаСТР»));
Тоже не хочет работать.
Что ещё можно попробовать?
(8) Попробуй в диалоге (свойства формы, закладка Оформление) накликать это УО, код пока убрать.
Если заработает, смотри в отладке что там.
у меня вот такое для ТЧ точно работает
УО = ЭтаФорма.УсловноеОформление;
УО.Элементы.Очистить();
ЭлементУО = УО.Элементы.Добавить();
Оформляемоеполе = ЭлементУО.Поля.Элементы.Добавить(); // Поля таблицы для которых будет действовать оформление
Оформляемоеполе.Поле = Новый ПолеКомпоновкиДанных(«ТабличнаяЧасть1Реквизит2»);
Оформляемоеполе.Использование = ИСТИНА;
ЭлементУО.Оформление.УстановитьЗначениеПараметра(«Текст», Новый ПолеКомпоновкиДанных(«Объект.ТабличнаяЧасть1.Реквизит1»));
ЭлОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлОтбора.Использование = Истина;
ЭлОтбора.ЛевоеЗначение = Истина;
ЭлОтбора.ПравоеЗначение= Истина;
(11) так там не ДС скорее всего, а ДанныеФормыДерево
(10) сравни элементы УО который ты в форме накликал, и который кодом заполняешь. Может даже где-то есть готовая обработка которая транслирует текущее УО в программный код)
(12) Мне достаточно так как сейчас работает. Ваш код, кстати, тоже попробовал, переделав под свой случай, но он тоже не заработал.
Источник
Программное условное оформление строк ДереваЗначений. Условие по Родителю
Управляемые формы. Необходимо раскрасить строки дерева значений в зависимости от значений строки-родителя. Например, если в строке-родителе Количество=0, тогда все подчиненные строки раскрашиваем в зеленый цвет. Как этого добиться?
Написал такой код, но как в нем обратиться к родителю?
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЗначений1.КоличествоНаСкладеВсего"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора.ПравоеЗначение = 0; ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЗначений1"); ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);
Никак. Добавь в строку колонку с признаком, который изменяешь при изменении количества в родителе и заполняй его по всем подчиненным строкам
1+ Запись условного оформления не может быть привязана к конкретной строке дерева (таблицы), но должна иметь возможность определить, красить данную строку или нет.
Потому алгоритм только один нужен признак в каждой строке, по которому будет ориентироваться УО. И не обязательно им рулить программно.
Источник
Мои заметки по 1с
Собственные наработки и набитые шишки в моей практике по программированию в 1С.
Страницы
четверг, 15 марта 2018 г.
Примеры Условного оформления (программно)
Примеры Условного Оформления форм:
&НаСервере
Процедура УстановитьОформлениеФормыНаСервере()
ИменаСлужебныхПрефиксов = НазначитьПрефиксИменСлужебныхЗначений();
ПрефиксИмениИнтервал = ИменаСлужебныхПрефиксов.Интервал;
ПрефиксИмениРучИзмЦены = ИменаСлужебныхПрефиксов.РучноеИзменениеЦены;
УсловноеОформление.Элементы.Очистить();
//
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Представление = «СозданПрограммно»;
//Отбор
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«ДеревоЦен.ЭтоГруппа»);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;
//Оформление
ЭлементОформления.Оформление.УстановитьЗначениеПараметра(«Шрифт», Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню,,11,Истина. ));
//Поле оформления
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(«ДеревоЦен»);
//
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Представление = «СозданПрограммно»;
//Отбор
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«ДеревоЦен.ЭтоГруппа»);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Ложь;
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«ДеревоЦен.БазоваяЦена»);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = 0;
//Оформление
ЭлементОформления.Оформление.УстановитьЗначениеПараметра(«ЦветФона», WebЦвета.Розовый);
ЭлементОформления.Оформление.УстановитьЗначениеПараметра(«Текст», «»);
ЭлементОформления.Оформление.УстановитьЗначениеПараметра(«ЦветТекста», WebЦвета.Серый);
//Поле оформления
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(«ДеревоЦенБазоваяЦена»);
//оформление программно созданных колонок «Интервалы»
Для Каждого СтрокаИнтервала Из Интервалы Цикл
ИдентификаторИнтервала = СтрокаИнтервала.ИдентификаторИнтервала;
ИмяПоля_РИзмЦены = СтрЗаменить(ИдентификаторИнтервала, ПрефиксИмениИнтервал, ПрефиксИмениРучИзмЦены);
//
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
//
ЭлементОформления.Представление = «СозданПрограммно»;
//Отбор
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«ДеревоЦен.»+ИмяПоля_РИзмЦены);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;
//Оформление
ЭлементОформления.Оформление.УстановитьЗначениеПараметра(«ЦветФона», WebЦвета.Бежевый);
ЭлементОформления.Оформление.УстановитьЗначениеПараметра(«ЦветТекста», WebЦвета.Синий);
//Поле оформления
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(ИдентификаторИнтервала);
//
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
//
ЭлементОформления.Представление = «СозданПрограммно»;
//Отбор
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«ДеревоЦен.»+ИдентификаторИнтервала);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = 0;
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«ДеревоЦен.ЭтоГруппа»);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Ложь;
//Оформление
ЭлементОформления.Оформление.УстановитьЗначениеПараметра(«ЦветФона», WebЦвета.Розовый);
ЭлементОформления.Оформление.УстановитьЗначениеПараметра(«Текст», «»);
ЭлементОформления.Оформление.УстановитьЗначениеПараметра(«ЦветТекста», WebЦвета.Серый);
//Поле оформления
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(ИдентификаторИнтервала);
КонецЦикла;
КонецПроцедуры
Пример2:
С использованием общей процедуры.
Процедура СкопироватьПоляУсловногоОформления(ЭлементУсловногоОформления, ЭлементКомпоновщика, ИмяТаблицыОформления, ПрефиксИмениЭлементовФормы=»»)
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ПрефиксИмениЭлементовФормы+Строка(ЭлементПоля.Поле));
Процедура СкопироватьОтборУсловногоОформления(ЭлементУсловногоОформления, ЭлементКомпоновщика, ИмяТаблицыОформления)
СкопироватьОтборУсловногоОформления(ЭлементУсловногоОформления, ЭлементОтбора, ИмяТаблицыОформления);
НовыйЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяТаблицыОформления+».» + Строка(ЭлементОтбора.ЛевоеЗначение));
Источник
Условное оформление Дерева на УФ
Прошу помощи у специалистов по УФ. Сам таковым пока не являюсь. Хочется выделить строки дерева значений «ДеревоПлатежей», расположенного на форме. Строки с незаполненным значением колонки «ВидНалога» в дереве имеются. Не ругается, но и не оформляет ничего.
ЭлементОтбора = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«ДеревоПлатежей.ВидНалога»);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ЭлементОтбора.Использование = Истина;
ЭлементЦветаОформления = НовыйЭлементУсловногоОформления.Оформление.Элементы.Найти(«TextColor»);
ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ОтметкаОтрицательногоВыполненияЗадачи.Значение;
ЭлементЦветаОформления.Использование = Истина;
КонецПроцедуры
(0) у тебя статичный набор критериев раскраски, зачем программно красить?
В свойствах ДС (самого, а не у элемента формы) установи что тебе и как раскрасить.
(1) Действительно, поля указать забыл. Добавил в конец
НовыйЭлемент = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();
НовыйЭлемент.Поле = Новый ПолеКомпоновкиДанных(«ВидНалога»);
Вот тут наверное надо конкретный цвет указывать.
ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ОтметкаОтрицательногоВыполненияЗадачи.Значение;
(3). Реквизитом отчета, добавленного на форму является ДеревоЗначений, а не динамический список. Я не могу настроить его не программно.
Источник