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