Программное условное оформление строк ДереваЗначений. Условие по Родителю
Управляемые формы. Необходимо раскрасить строки дерева значений в зависимости от значений строки-родителя. Например, если в строке-родителе Количество=0, тогда все подчиненные строки раскрашиваем в зеленый цвет. Как этого добиться?
Написал такой код, но как в нем обратиться к родителю?
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоЗначений1.КоличествоНаСкладеВсего"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбора.ПравоеЗначение = 0; ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ДеревоЗначений1"); ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);
Никак. Добавь в строку колонку с признаком, который изменяешь при изменении количества в родителе и заполняй его по всем подчиненным строкам
1+ Запись условного оформления не может быть привязана к конкретной строке дерева (таблицы), но должна иметь возможность определить, красить данную строку или нет.
Потому алгоритм только один нужен признак в каждой строке, по которому будет ориентироваться УО. И не обязательно им рулить программно.
Источник
Управляемые формы. Как раскрасить дерево значений?
Очень хочется раскрасить групповые строки. Через условное оформление не понятно как установить условие.
Может кто знает выход?
(0) Добавь в дерево числовой реквизит Уровень, и крась в условном оформлении формы основываясь на нём.
(1)+1
А что у тебя в дереве? Можно ставить условие на незаполненность значения в родительских строках
(2) так наверное будет лучше
а можно как-то не выводить в дочерних строках общие значения для них?
например в родительской строке шапка документа, а в дочерних только строки.
(3)Как? Состав колонок ведь одинаков независимо от того родительская строка это или дочерняя. Может ты имеешь ввиду группировочную колонку?
(2) делаешь колонку с названием, например, «Сервис/Услуга» — если это просто текст, то заполняешь данными для каждого уровня, для того параметр Уровень и вводился. Если это справочники, то при генерации дерева заполняешь пустым значением нужного справочника.
Получится что-то вида:
ур1 + Экорт в баню
ур2 — Предоставить шайку
ур2 — предоставить мочалку
ур2 — мыло отобрать и т.д.
Только придётся сделать свои кнопки добавления Сервиса и Услуги. Стандартное добавление мне не подошло.
Как-то так.
7+ В обработчике кнопки добавления и проверишь: Сервис заполнен? тогда добавим услугу, иначе как-то популярно отказать.
При большом желании сделай колонку с картинкой «+» для добавления ниже лежащих уровней, в обработчике ПередНачаломРедактирования — отлови в какой колонке щёлкнули мышью и добавляй или удаляй нижний уровень
(3) я для этого в одну колонку складываю значения разных типов.
Например, у родителя будет контрагенты, а у дочерних в этой же колонке номенклатура
Источник
Условное оформление дерева значений на управляемой форме
Предположим, мы создали некую обработку, которая выполняет те или иные действия над каталогом товаров. При этом у пользователя должна быть возможность выбирать категории товаров, для которых будут применяться эти действия. Логичным выбором будет выведение на форму иерархического списка категорий, где пользователь сможет галочками выбирать необходимые категории. Если пользователь отмечает галочкой категорию верхнего уровня, то подразумевается, что все вложенные категории также будут обработаны. Логично будет закрыть вложенные строки для редактирования и как-то пометить их, чтобы пользователю было понятно, что они будут обработаны вместе с родительской категорией. Вот здесь нам и пригодится условное оформление.
Предлагаемая обработка демонстрирует управление доступностью отдельных строк в дереве значений (кстати, аналогичный метод можно использовать и для таблицы значений). Вот как это выглядит:
Работа с условным оформлением хорошо описана здесь:
Единственное, столкнулся с интересным нюансом. В отборе компоновки (который используется, чтобы нам оформить именно нужные строки) и в оформляемых полях (которые указывают колонки, которые мы будем оформлять) имена полей разные, хотя тип один и тот же — ПолеКомпоновкиДанных.
При отборе мы указываем путь к данным:
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоКаталог.Категория"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; ЭлементОтбора.ПравоеЗначение = СписокОтб; ЭлементОтбора.Использование = Истина;
А в полях оформления мы указываем путь к полю формы:
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить(); ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ДеревоКаталогКатегория"); ПолеОформления.Использование = Истина;
Протестировано на платформе 1С 8.3.11.3034
Источник
Раскрасить дерево значений
Добрый день. Дерево значение имеет структуру 3х уровней. Подскажите как раскрасить элементы последнего уровня если они есть. Т.Е.
Уровень1
Уровень2
Уровень3(его надо раскрасить)
Уровень2
Уровень2
Уровень3(его надо раскрасить)
Уровень1
P.S Формы обычные
СтрокаДереваЗначений (ValueTreeRow)
Уровень (Level)
Синтаксис:
Уровень()
Возвращаемое значение:
Тип: Число.
Для строки, не имеющей родителя, уровень будет равен 0.
Описание:
Получает уровень строки дерева значений.
Сервер, толстый клиент, внешнее соединение.
Примечание:
Нумерация уровней дерева значений начинается с 0.
(3) (2) это то понятно, как перебирать
Тип будет СтрокаДереваЗначения, а не ТабличноеПоле. Соответствие как навести? Индексов нет, перебирать ЭлементыФормы.ДеревоЗначений.Значение.Строки нельзя
ПриПолученииДанных(Элемент, ОформленияСтрок)
Для каждого ОформлениеСтроки
Если ОформлениеСтроки.ДанныеСтроки.Строки.Количество()=0 Тогда
ОформлениеСтроки.ЦветТекста = Новый Цвет(255,255,0);
КонецЕсли;
используй условное оформление формы.
(5) угу. а что делать, когда добавили строку?
При выводи строки
Если ДанныеСтроки.уровень() = 2 Тогда
ОформлениеСтроки.ЦветФона = Новый Цвет(255,255,0);
КонецЕсли;
(9) если нужно что-то делать в табличной части (форма, отчет) лучше использовать условное оформление.
Источник