Имя: Пароль:
1C
1С v8
v8: Как вывести дерево значений на управляемую форму?
0 vol2hv
 
30.04.13
20:27
Здравствуйте!
В серверной процедуре формируется ДеревоЗначений как попроще можно поместить этот объект на управляемую форму
Спасибо.
1 Wobland
 
30.04.13
20:30
я деревом на клиенте занимался
2 Wobland
 
30.04.13
20:31
об=РеквизитФормыВЗначение("Объект");
Кедр=Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
об.Продажи=Кедр;
ЗначениеВРеквизитФормы(об, "Объект");
3 vol2hv
 
30.04.13
20:49
(2) Эту стандартную схему я знаю. Но хотелось бы более универсальный метод: из любой серверной процедуры (а не только серверная процедура модуля формы) вывести дерево значений на управляемую форму, причем элементы формы формируются динамически на основе данных о колонках дерева
4 Wobland
 
30.04.13
20:56
(3) лови пример про ТЗ

&НаКлиенте
Процедура УдалитьНекоторыеКолонки(Команда)
   Н=0;
   Если ВвестиЧисло(Н, "Какую колонку оставить?") Тогда
       Если Н>0 И Н<100 Тогда
           УдалитьКолонки(Н);
           ПоказатьТЗ();
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура УдалитьКолонки(Н)
   УдаляемыеРеквизитыТЗ=Новый Массив;
   ОставляемаяКолонка="ОстатокНаСкладе"+Формат(Н, "ЧЦ=2; ЧВН=");
   ТЗ=Объект.ТЗ.Выгрузить();
   й=ТЗ.Колонки.Количество();
   Пока й>3 Цикл
       й=й-1;
       ТекКолонка=ТЗ.Колонки.Получить(й).Имя;
       Если ТекКолонка<>ОставляемаяКолонка Тогда
           ТЗ.Колонки.Удалить(й);
           УдаляемыеРеквизитыТЗ.Добавить("Объект.ТЗ."+ТекКолонка);
       КонецЕсли;
   КонецЦикла;
   ИзменитьРеквизиты(, УдаляемыеРеквизитыТЗ);
   Объект.ТЗ.Загрузить(ТЗ);
КонецПроцедуры
5 GANR
 
30.04.13
20:57
(0) На худой конец как костыль сойдет сообщение № 22 из ветки v8: Заполнить ДеревоЗначений из иерархического справочника
6 Wobland
 
30.04.13
20:57
формирование забыл ;)

&НаСервере
Процедура Инициализация()
   ГСЧ=Новый ГенераторСлучайныхЧисел;
   ДобавляемыеРеквизитыТЗ=Новый Массив;
   УдаляемыеРеквизитыТЗ=Новый Массив;
   
   ТЗ=Объект.ТЗ.Выгрузить();
   Для й=4 По ТЗ.Колонки.Количество() Цикл
       УдаляемыеРеквизитыТЗ.Добавить("Объект.ТЗ."+ТЗ.Колонки[й-1].Имя);
   КонецЦикла;
   ИзменитьРеквизиты(, УдаляемыеРеквизитыТЗ);
   ТЗ=Объект.ТЗ.Выгрузить();
   
   ОписаниеЧисла=Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Неотрицательный));
   ТЗ=Новый ТаблицаЗначений;
   ТЗ.Колонки.Добавить("Товар", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
   ТЗ.Колонки.Добавить("ДатаПрихода", Новый ОписаниеТипов("Дата"));
   ТЗ.Колонки.Добавить("КоличествоПрихода", ОписаниеЧисла);
   Для й=1 По КоличествоСкладов Цикл
       ИмяКолонки="ОстатокНаСкладе"+Формат(й, "ЧЦ=2; ЧВН=");
       ТЗ.Колонки.Добавить(ИмяКолонки);
       ДобавляемыеРеквизитыТЗ.Добавить(Новый РеквизитФормы(ИмяКолонки, ОписаниеЧисла, "Объект.ТЗ"));
   КонецЦикла;
   
   Для й=0 По ГСЧ.СлучайноеЧисло(1, 99) Цикл
       НоваяСтрока=ТЗ.Добавить();
       НоваяСтрока.Товар=СерверныйМодуль.ПолучитьСлучайнуюНоменклатуру();
       НоваяСтрока.ДатаПрихода='20010101'+ГСЧ.СлучайноеЧисло(0, 12*365*86400);
       НоваяСтрока.КоличествоПрихода=ГСЧ.СлучайноеЧисло(0, 99);
       Для ж=1 По КоличествоСкладов Цикл
           НоваяСтрока["ОстатокНаСкладе"+Формат(ж, "ЧЦ=2; ЧВН=")]=ГСЧ.СлучайноеЧисло(0, 99);
       КонецЦикла;
   КонецЦикла;
   
   ИзменитьРеквизиты(ДобавляемыеРеквизитыТЗ);
   Объект.ТЗ.Загрузить(ТЗ);
   Элементы.ТЗ.Обновить();
КонецПроцедуры
7 vol2hv
 
30.04.13
21:46
Спасибо, за помощь мужики. Решение через реквизит формы или глобальную переменную модуля я теперь с вашей помощью знаю. Но хочется большего и местами недостижимого :-). задумка такая.
В инструментальную обработку кладу универсальные программы и пустую форму. В отлаживаемой процедуре на сервере выполняем запрос, Вызываем инструментальную процедуру, которая по выборке из результатов запроса формирует таблицу или дерево значений и выводит его на форму из инструментальной обработки.
моя проблема в том, что работать с запросами и открывать формы можно на серверной и клиентской стороне соответственно. Хотелось бы  пересечь эту границу с минимальным отладочным кодом в отлаживаемой процедуре.
8 Wobland
 
30.04.13
21:51
(7) в управляемом приложении за тебя работает управляемое приложение, на то оно и управляемое ;) осуществимо, да. но через назад
9 vol2hv
 
30.04.13
22:00
(8) Спасибо. Теперь я с чистой совестью брошу поиск простого решеня этой задачи, тем более, что для решения через назад передача данных через реквизит формы не так уж плохо.
Программист всегда исправляет последнюю ошибку.