Дерево значений в управляемой форме

image_pdfimage_print

Печать (Ctrl+P)
Свойства и методы универсальных коллекции значений типа дерево значений как и  таблицы значений не доступны в тонком клиенте. Их нужно создавать на сервере, а затем методом контекста формы  ЗначениеВРеквизитФормы(<Значение>, <ИмяРеквизита>)    преобразовать  значение объекта в   реквизит управляемой формы  с указанным именем ИмяРеквизита

Мне дали задание  –  создать форму списка заказа в виде дерева значений, как показано на рис 1

Форма создается очень просто в конфигураторе  ( см рис 2)

Рис 2 Управляемая форма с деревом значений

 

Однако, у меня не получилось  на сервере создавать дерево значений в путем выгрузки результата запроса по группировкам в дерево таким образом :
Дерево = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
У меня возникала  ошибка при вызове метода контекста формы:
ЗначениеВРеквизитФормы(Дерево, “ДеревоЗаказов”);
Возможно?!, причина была в том, что структура колонок реквизита формы ДеревоЗаказов не соответствовала структуре объекта  дерево, полученного в результате выгрузки запроса. Я не стал глубоко об этом думать и решил создавать дерево значений  в цикле. Программный код показан ниже:

&НаСервере
Процедура ЗаполнитьДеревоНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Заказ.Ссылка КАК Ссылка,
| НАЧАЛОПЕРИОДА(Заказ.ДатаПриема, ЧАС) КАК Время
|ИЗ
| Документ.Заказ КАК Заказ
|ГДЕ
| Заказ.ДатаПриема МЕЖДУ &ДатаНач И &ДатаКон
|
|УПОРЯДОЧИТЬ ПО
| Заказ.ДатаПриема
|ИТОГИ ПО
| Время";

Запрос.УстановитьПараметр("ДатаКон", Период.ДатаОкончания);
Запрос.УстановитьПараметр("ДатаНач", Период.ДатаНачала);
РезультатЗапроса = Запрос.Выполнить();
// Так не получается и пришлось создать дерево в цикле. Тема  статьи
//Дерево = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); 
Дерево = Новый ДеревоЗначений;
Дерево.Колонки.Добавить("Время");
Дерево.Колонки.Добавить("Заказ");
ВыборкаВремя = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаВремя.Следующий() Цикл
Строка = Дерево.Строки.Добавить();
Строка.Время= ВыборкаВремя.Время;
ВыборкаДетальныеЗаписи = ВыборкаВремя.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Нов=Строка.Строки.Добавить(); 
Нов.Заказ= ВыборкаДетальныеЗаписи.Ссылка; 
КонецЦикла;
КонецЦикла;
ЗначениеВРеквизитФормы(Дерево, "ДеревоЗаказов");
КонецПроцедуры

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *