Имя: Пароль:
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) Спасибо. Теперь я с чистой совестью брошу поиск простого решеня этой задачи, тем более, что для решения через назад передача данных через реквизит формы не так уж плохо.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший