Имя: Пароль:
1C
1С v8
Результат запроса aka ТЗ на УФ
0 andrewks
 
05.01.12
17:05
копаю тут УФ. что, такая связка в общем случае не предусмотрена?
реквизит у формы типа ТЗ сделал, НаСервере отрабатывает запрос, результат выгружается в этот реквизит (ДанныеФормыКоллекция).
а как показать-то её? если не задать у ТЗ колонки - она не отображается, если задать - появляется зависимость от текста конкретного запроса.

или щас уже так не модно, и нужно для этого Таблицу пользовать?
1 andrewks
 
05.01.12
17:27
короче, никак, да? или есть изощрённый способ?
2 Новиков
 
05.01.12
17:34
Ну это, динамическим списком там чутка поиграть, не?
3 andrewks
 
05.01.12
17:44
(2) ну, интересен именно случай с ТЗ.

думаю щас в сторону ИзменитьРеквизиты(). правильно мыслю?
4 nicxxx
 
05.01.12
17:46
на клиенте ТЗ нет. и не будет.
5 andrewks
 
05.01.12
17:47
(4) ну, как бы в реквизите и на форме-то есть
6 nicxxx
 
05.01.12
17:51
ну как бы тип данных - не ТЗ а Коллекция
7 andrewks
 
05.01.12
17:55
(6) в курсе. сути это не меняет. тип данных реквизита указывается как ТЗ, отображается тоже в ТЗ
8 nicxxx
 
05.01.12
17:59
ну да, только на клиента надо передавать эту ТЗ кодом, например:
ЗначениеВДанныеФормы(ДеревоБДРФорма, ДеревоБДР);
9 nicxxx
 
05.01.12
18:00
ну или как там у тебя реквизиты называются:
ЗначениеВДанныеФормы(ТЗ_результатЗапроса, ТЗ_реквизитФормы);
10 andrewks
 
05.01.12
18:00
(8) ну так и делаю. просто структура колонок должна быть привязана к конкретному запросу. а интересно, можно ли универсализировать
11 nicxxx
 
05.01.12
18:04
если только программно добавлять реквизиты ТЗ:
ТипЧисло = Новый ОписаниеТипов("Число",
                   Новый КвалификаторыЧисла(8,0));                    
   МассивТипов = Новый Массив;
МассивТипов.Добавить("СправочникСсылка.СтатьиДоходовРасходов");
   ТипСтатья = Новый ОписаниеТипов(МассивТипов);
   ДобавляемыеРеквизиты = Новый Массив;
   КолонкаДерева = Новый РеквизитФормы("СтатьяДР",
                   ТипСтатья,
                   "ДеревоБДР",
                   "СтатьяДР");
   ДобавляемыеРеквизиты.Добавить(КолонкаДерева);
       ИзменитьРеквизиты(ДобавляемыеРеквизиты);
12 andrewks
 
05.01.12
18:06
(11) вот так и хочу щас попробовать, просто пока занят в соседней ветке :)
13 nicxxx
 
05.01.12
18:09
скорее взлетит, чем нет, но подумать над реализацией придется...
14 andrewks
 
05.01.12
18:26
сопсна, во: v8: СКД 8.2: программный вывод в дерево значений на форме
я не первый извращенец :)
15 andrewks
 
06.01.12
09:16
срослось, однако.

короче, в реквизитах создаём коллекцию с типом "ТаблицаЗначений" без колонок, элемент формы не создаём.
(т.к. программно удалять можно только программно добавленные реквизиты и элементы)

потом на сервере, после выполнения запроса:


   //динамически обновляем реквизиты формы для принятия нашей ТЗ
   
   МассивДобавляемыхРеквизитов = Новый Массив;
   МассивУдаляемыхРеквизитов = Новый Массив;
   ИдКоллекции="Коллекция1";
   ИдТаблицы="Таблица1";
   КоллФормы=РеквизитФормыВЗначение(ИдКоллекции);

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

16 andrewks
 
06.01.12
09:28
важное дополнение:

если таблицу надо потом позволить редактировать, то лучше исключить из описаний типов Null, пришедший к нам из выгрузки результата запроса.

для этого немного модифицируем вот здесь:


   Для каждого ТекКол из ТабРез.Колонки Цикл
       ТекТипы=Новый ОписаниеТипов(ТекКол.ТипЗначения,,"Null");
       МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы(ТекКол.Имя,ТекТипы,ИдКоллекции));
   КонецЦикла;
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший