|
вопросы по работе с деревом значений. | ☑ | ||
---|---|---|---|---|
0
Zakella86
11.08.17
✎
13:59
|
Добрый день. Есть исходный код. Он программно создает дерево значений . Все норм работает, но проблемы начинаются на уровне оформления и развертки строк.
Хотел развернуть строки таким методом КоллекцияЭлементовДерева=ДеревоБюджет.ПолучитьЭлементы(); //Свернуть дерево Для Каждого Строка Из КоллекцияЭлементовДерева Цикл ИдентификаторСтроки=Строка.ПолучитьИдентификатор(); Элементы.ДеревоБюджет.Свернуть(ИдентификаторСтроки); КонецЦикла; Но проблема в том что на форме у меня нет ДеревоБюджет как данныеформыдерево. потому что он создается программно. Естественно синтаксис ругается на отсуствие ДеревоБюджет . Можно ли таблица формы Элементы.ДеревоБюджет как таблица формы перевести в ДеревоБюджет как данныеформыдерево? Или есть другой способ? И второй вопрос , как мне сделать жирным через условное офоррмление только те строки дерева, у которых есть подстроки в иерархии? Т.е по сути жирным должны быть только итоги. Вот пример кода который нашел в интернете, похожий сделал и у себя ДеревоОбъект = Новый ДеревоЗначений; ДеревоОбъект.Колонки.Добавить("Узел", Новый ОписаниеТипов("Строка")); Для к1 = 1 По 3 Цикл СтрокаУ1 = ДеревоОбъект.Строки.Добавить(); СтрокаУ1.Узел = "Узел"+к1; Для к2 = 1 По 3 Цикл СтрокаУ2 = СтрокаУ1.Строки.Добавить(); СтрокаУ2.Узел = СтрокаУ1.Узел+к2; Для к3 = 1 По 3 Цикл СтрокаУ3 = СтрокаУ2.Строки.Добавить(); СтрокаУ3.Узел = СтрокаУ2.Узел+к3; КонецЦикла; КонецЦикла; КонецЦикла; // Создание Реквизита формы типа ДанныеФормыДерево МассивДобавляемыхРеквизитов = Новый Массив; МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Дерево", Новый ОписаниеТипов("ДеревоЗначений"))); Для Каждого Колонка Из ДеревоОбъект.Колонки Цикл МассивДобавляемыхРеквизитов.Добавить( Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "Дерево")); КонецЦикла; ИзменитьРеквизиты(МассивДобавляемыхРеквизитов); // Преобразование объекта прикладного типа ДеревоЗначений // в реквизит управляемой формы (данные формы) ЗначениеВРеквизитФормы(ДеревоОбъект, "Дерево"); // Создание элемента формы типа ТаблицаФормы для отображения дерева ЭлементДерево = Элементы.Добавить("Дерево", Тип("ТаблицаФормы")); ЭлементДерево.ПутьКДанным = "Дерево"; ЭлементДерево.Отображение = ОтображениеТаблицы.Дерево; Для Каждого Колонка Из ДеревоОбъект.Колонки Цикл НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ЭлементДерево); НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; НовыйЭлемент.ПутьКДанным = "Дерево." + Колонка.Имя; КонецЦикла; |
|||
1
Dvoe4nik
11.08.17
✎
16:53
|
(0) если тебе преобразовать ТЗ в ДЗ то делай запрос с итогами к тз и выгружай в дерево. по второму- обходишь рекурсивно все строки дерева, и если у них есть Строки.Количество()>0 то ставишь условное оформление
|
|||
2
aleks_default
11.08.17
✎
17:32
|
"Но проблема в том что на форме у меня нет ДеревоБюджет как данныеформыдерево. потому что он создается программно"
Че? Если ты создал программно элемент формы значит он есть, просто может называется по-другому Я для оформления добавил колонку "Уровень" которую и заполнял при формировании дерева. И в УФ уже завязывался на нее. |
|||
3
Zakella86
11.08.17
✎
18:03
|
я не очень понимаю где и как мне вставить условное оформление. Если кому не сложно подскажите. Вот код
&НаСервере Функция ОбновитьДерево () МассивКолонк = Новый Массив; МесяцыНомер = Новый Соответствие; //КолонкиСостава = ДеревоБюджетОбъект.Колонки; МассивТипов = Новый Массив; МассивТипов.Добавить(Тип("Число")); КЧ = Новый КвалификаторыЧисла(19,2); ОписаниеЧисло = Новый ОписаниеТипов(МассивТипов,КЧ); Запрос = Новый Запрос; Запрос.УстановитьПараметр("Субпрограмма", Справочники.Субпрограммы.ПустаяСсылка()); Запрос.Текст = "ВЫБРАТЬ | Субпрограммы.Владелец КАК Программа, | Субпрограммы.Ссылка КАК Субпрограмма |ИЗ | Справочник.Субпрограммы КАК Субпрограммы | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | &Субпрограмма, | &Субпрограмма |ГДЕ | ЛОЖЬ |ИТОГИ ПО | Программа"; ПредДеревоЗнач = РеквизитФормыВЗначение("ДеревоБюджет"); ДеревоБюджетОбъект = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Для каждого СтрокаРодитель Из ДеревоБюджетОбъект.Строки Цикл Для каждого Строка Из СтрокаРодитель.Строки Цикл Строка.Программа = Строка.Субпрограмма; КонецЦикла; КонецЦикла; //ДеревоБюджетОбъект.Колонки.Удалить(ДеревоБюджетОбъект.Колонки.Субпрограмма); Для каждого ТекКолонка Из ДеревоБюджетОбъект.Колонки Цикл Если Лев(ТекКолонка.Имя,5) = "Месяц" ИЛИ ТекКолонка.Имя = "Итого" Тогда МассивКолонк.Добавить(ТекКолонка); КонецЕсли; КонецЦикла; Для каждого ТекКолонка Из МассивКолонк Цикл ДеревоБюджетОбъект.Колонки.Удалить(ТекКолонка); КонецЦикла; МассивКолонк = Новый Массив; Для каждого ТекКолонка Из ДеревоБюджетОбъект.Колонки Цикл Если Лев(ТекКолонка.Имя,5) = "Месяц" ИЛИ ТекКолонка.Имя = "Итого" Тогда МассивКолонк.Добавить(ТекКолонка); КонецЕсли; КонецЦикла; Для каждого ТекКолонка Из МассивКолонк Цикл ДеревоБюджетОбъект.Колонки.Удалить(ТекКолонка); КонецЦикла; Если ЗначениеЗаполнено(Объект.ДатаНачала) И ЗначениеЗаполнено(Объект.ДатаОкончания) Тогда Н = 0; ДатаТек = НачалоМесяца(Объект.ДатаНачала); Пока ДатаТек <= КонецДня(Объект.ДатаОкончания) Цикл Н = Н + 1; ДеревоБюджетОбъект.Колонки.Добавить("Месяц"+Н, ОписаниеЧисло, Формат(ДатаТек, "ДФ='MMMM yyyy'"), 19); МесяцыНомер.Вставить(ДатаТек, Н); ДатаТек = ДобавитьМесяц(ДатаТек, 1); КонецЦикла; ДеревоБюджетОбъект.Колонки.Добавить("Итого", ОписаниеЧисло, "Итого", 19); КонецЕсли; РасчитатьДанныеПоСТрокамДерева(ДеревоБюджетОбъект,МесяцыНомер); МассивДобавляемыхРеквизитов = Новый Массив; Для Каждого Колонка Из ДеревоБюджетОбъект.Колонки Цикл Если ПредДеревоЗнач.Колонки.Найти(Колонка.Имя)=Неопределено Тогда МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "ДеревоБюджет")); КонецЕсли; КонецЦикла; ИзменитьРеквизиты(МассивДобавляемыхРеквизитов); ДеревоБюджет.ПолучитьЭлементы().Очистить(); ЗначениеВРеквизитФормы(ДеревоБюджетОбъект,"ДеревоБюджет"); // добавить колонки для элемента формы ДеревоЗначений Для Каждого Колонка Из ДеревоБюджетОбъект.Колонки Цикл Если Элементы.ДеревоБюджет.ПодчиненныеЭлементы.Найти(Колонка.Имя)=Неопределено Тогда НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), Элементы.ДеревоБюджет); НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; НовыйЭлемент.ПутьКДанным = "ДеревоБюджет." + Колонка.Имя; НовыйЭлемент.Заголовок = Колонка.Заголовок; Если Колонка.Имя ="Субпрограмма" Тогда НовыйЭлемент.Видимость = Ложь ; КонецЕсли; НовыйЭлемент.УстановитьДействие("ПриИзменении", "МесяцПриИзменении"); КонецЕсли; КонецЦикла; КлючНастроек = "ПериодыМесяц"; Настройки = Новый Соответствие; Настройки.Вставить("МесяцыНомер", МесяцыНомер); ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ПериодыМесяц", КлючНастроек, Настройки); ПоказатьПрограммыБезСубПРограмм(); КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |