Имя: Пароль:
 
1C
 
Дерево значений.
0 antihacker
 
24.12.18
12:47
Всем привет !
Вот код.


   тДерево = РеквизитФормыВЗначение("ДЗ_РезАнализа");

   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
   | Бюджеты.Ссылка КАК ДатаАнализа
   //| Бюджеты.Ссылка КАК Колонка2
   |ИЗ
   | Справочник.Бюджеты КАК Бюджеты
    |УПОРЯДОЧИТЬ ПО
    |    ДатаАнализа ИЕРАРХИЯ";
  
   Выгрузка = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

   Выгрузка1 = Запрос.Выполнить().Выгрузить();
  
   тДерево = Выгрузка;

   ЗначениеВРеквизитФормы(тДерево, "ДЗ_РезАнализа");

Все работает без ошибок. Но почему то не вижу результаты. А если добавить колонкий в ручную, то вижу результаты. Но так не могу, так колонки в дерево значений добавляются динамический.
1 antihacker
 
24.12.18
13:14
Или как удалить все колонки дерево значений ?
2 antihacker
 
24.12.18
13:47
Аууу не уж то ни кто не знает ?
3 Волшебник
 
24.12.18
13:49
(2) пишется "неужто" и "никто"
4 SeriyP
 
24.12.18
13:53
(0) СоздатьКолонки?
5 antihacker
 
24.12.18
13:59
Колонка создается без проблем.

// 1. получаем дерево как програмный объект
ДеревоОбъект = РеквизитФормыВЗначение("ДЗ_РезАнализа");

// 2. добавляем колонку
ДеревоОбъект.Колонки.Добавить("ДатаАнализа", Новый ОписаниеТипов("Строка"));

// 3. создаем РЕКВИЗИТ КОЛОНКИ (невидимая часть, справа в редакторе форм)
МассивДобавляемыхРеквизитов = Новый Массив;

// реквизит принадлежит дереву
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ДатаАнализа", Новый ОписаниеТипов("СправочникСсылка.Бюджеты"), "ДЗ_РезАнализа"));

// добавляем реквизит в форму (невидимая часть, справа в редакторе форм)
ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);

// 4. заполняем дерево (реквизит формы) занчением
ЗначениеВРеквизитФормы(ДеревоОбъект, "ДЗ_РезАнализа");

// 5. добавляем НА ФОРМУ (видимая часть, слева в редакторе форм)
// назовем ДеревоУзел, принадлежит элементу дерева, связан с добавленной колонкой «Узел»
НовыйЭлемент = Элементы.Добавить("ДеревоУзел", Тип("ПолеФормы"), Элементы.ДЗ_РезАнализа);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "ДЗ_РезАнализа.ДатаАнализа";

Но потом нужно будет удалить все колонки и добавить новые динамические колонки. По этому спрашивал. хотя бы как можно удалить все колонки ?
6 antihacker
 
24.12.18
14:53
Мдааааа.
7 antihacker
 
24.12.18
15:40
Пробовал вот так.
Ошибку не выдает, но и не удалеят

ДеревоОбъект1 = РеквизитФормыВЗначение("ДЗ_РезАнализа");

// 3. создаем РЕКВИЗИТ КОЛОНКИ (невидимая часть, справа в редакторе форм)
МассивУдаляемыхРеквизитов = Новый Массив;

// реквизит принадлежит дереву
Для каждого текколонка Из ДеревоОбъект1.Колонки Цикл
МассивУдаляемыхРеквизитов.Добавить("ДЗ_РезАнализа." +текколонка.имя);
КонецЦикла;

////ДеревоОбъект.Строки.Очистить();

попытка
ИзменитьРеквизиты(,МассивУдаляемыхРеквизитов);
исключение
сообщить(Описаниеошибки());
конецпопытки;

ЗначениеВРеквизитФормы(ДеревоОбъект1, "ДЗ_РезАнализа");
8 antihacker
 
25.12.18
07:14
// 1. получаем дерево как програмный объект

ДеревоОбъект1 = РеквизитФормыВЗначение("ДЗ_РезАнализа");


// 3. создаем РЕКВИЗИТ КОЛОНКИ (невидимая часть, справа в редакторе форм)
МассивУдаляемыхРеквизитов = Новый Массив;

// реквизит принадлежит дереву
Для каждого текколонка Из ДеревоОбъект1.Колонки Цикл
МассивУдаляемыхРеквизитов.Добавить("ДЗ_РезАнализа." +текколонка.имя);
КонецЦикла;

попытка
ИзменитьРеквизиты(,МассивУдаляемыхРеквизитов);
исключение
сообщить(Описаниеошибки());
конецпопытки;

ЗначениеВРеквизитФормы(ДеревоОбъект1, "ДЗ_РезАнализа");

Элементы.ДЗ_РезАнализа.Обновить();

// 1. получаем дерево как програмный объект
ДеревоОбъект = РеквизитФормыВЗначение("ДЗ_РезАнализа");

// 2. добавляем колонку
ДеревоОбъект.Колонки.Добавить("ДатаАнализа", Новый ОписаниеТипов("Строка"));

// 3. создаем РЕКВИЗИТ КОЛОНКИ (невидимая часть, справа в редакторе форм)
МассивДобавляемыхРеквизитов = Новый Массив;

// реквизит принадлежит дереву
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("ДатаАнализа", Новый ОписаниеТипов("СправочникСсылка.Бюджеты"), "ДЗ_РезАнализа"));

// добавляем реквизит в форму (невидимая часть, справа в редакторе форм)
ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);

// 4. заполняем дерево (реквизит формы) занчением
ЗначениеВРеквизитФормы(ДеревоОбъект, "ДЗ_РезАнализа");

// 5. добавляем НА ФОРМУ (видимая часть, слева в редакторе форм)
// назовем ДеревоУзел, принадлежит элементу дерева, связан с добавленной колонкой «Узел»

НовыйЭлемент = Элементы.Добавить("ДеревоУзел", Тип("ПолеФормы"), Элементы.ДЗ_РезАнализа);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "ДЗ_РезАнализа.ДатаАнализа";

  
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
   | Бюджеты.Ссылка КАК ДатаАнализа
   //| Бюджеты.Ссылка КАК Колонка2
   |ИЗ
   | Справочник.Бюджеты КАК Бюджеты
   |УПОРЯДОЧИТЬ ПО
   |    ДатаАнализа ИЕРАРХИЯ";
  
   тДерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

    ЗначениеВРеквизитФормы(тДерево, "ДЗ_РезАнализа");

    
  
   для каждого текзнч из тДерево.Строки Цикл
    сообщить(текзнч.ДатаАнализа);  
   конеццикла;

Вот так работает.

Здесь

ДеревоОбъект1 = РеквизитФормыВЗначение("ДЗ_РезАнализа");


// 3. создаем РЕКВИЗИТ КОЛОНКИ (невидимая часть, справа в редакторе форм)
МассивУдаляемыхРеквизитов = Новый Массив;

// реквизит принадлежит дереву
Для каждого текколонка Из ДеревоОбъект1.Колонки Цикл
МассивУдаляемыхРеквизитов.Добавить("ДЗ_РезАнализа." +текколонка.имя);
КонецЦикла;

попытка
ИзменитьРеквизиты(,МассивУдаляемыхРеквизитов);
исключение
сообщить(Описаниеошибки());
конецпопытки;

Удаляю реквизиты колонок.

Но теперь при повторном нажатие ругаться на это

НовыйЭлемент = Элементы.Добавить("ДеревоУзел", Тип("ПолеФормы"), Элементы.ДЗ_РезАнализа);


Оно и понятно. Реквизит удалить то  я удалил, но элемент на форме не удалил. Как удалить ? Не получается.
9 antihacker
 
25.12.18
08:47
Тема закрыта.

Решил вот так.

КолЭлемент = Элементы.ФДЗ_РезАнализа.ПодчиненныеЭлементы.Количество();

    Если КолЭлемент > 0 Тогда
        МассивУдаления = Новый Массив;
        МассивПоля = Новый Массив;
        Для Каждого УдаляемыйЭлемент Из Элементы.ФДЗ_РезАнализа.ПодчиненныеЭлементы Цикл
            ЭлементУдаления = УдаляемыйЭлемент.ПутьКДанным;
            ПолеУдаляемогоЭлемента = Элементы.ФДЗ_РезАнализа.ПодчиненныеЭлементы.Найти(УдаляемыйЭлемент.ПутьКДанным);
            МассивПоля.Добавить(УдаляемыйЭлемент);
            МассивУдаления.Добавить(ЭлементУдаления);
        КонецЦикла;
        Для Каждого Стр Из Массивполя Цикл
            Элементы.Удалить(Стр);
        КонецЦикла;
        ИзменитьРеквизиты(,МассивУдаления);
        МассивУдаления.Очистить();
        //СписокРеквизитов.Очистить();
    КонецЕсли;