Имя: Пароль:
1C
1С v8
Уложить таблицу значений в ПостроительОтчета
,
0 al_zzz
 
20.04.12
21:21
Имеется таблица значений, которую получаю с помощью построителя отчета. Потом хочу произвести над ней некоторые действия и передать опять же параметров в построитель отчета. Но возникает ошибка: "Содержимое объекта данных может быть выбрано только во временную таблицу". Поискал в интернете - единственное требование, чтоб колонки быыли типизированы. Но типизация тоже ничего не дала.
Код: тз = ПостроительОтчета.Результат.Выгрузить();  
   КЧ = Новый КвалификаторыЧисла(12,5);
   Массив = Новый Массив;
   Массив.Добавить(Тип("Число"));
   Массив.Добавить(Тип("Null"));
   тз.Колонки.Добавить("КоэффициентВариации",Новый ОписаниеТипов(Массив,,КЧ));
   //тз.ВыбратьСтроку();
   Для Каждого Стр Из ТЗ Цикл
       стр.КоэффициентВариации = ?(стр.Среднее=0,0,sqrt(стр.СКОНаДней)/стр.Среднее*100);
   КонецЦикла;    
   тз.Сортировать("КоэффициентВариации Возр");
   запрос = Новый Запрос;
   Запрос.текст = "ВЫБРАТЬ
                  |    тз.Номенклатура,
                  |    тз.Код,
                  |    тз.ABC,
                  |    тз.Факты,
                  |    тз.Среднее,
                  |    тз.КоэффициентВариации,
                  |    ВЫБОР
                  |        КОГДА тз.КоэффициентВариации < &Xдо
                  |            ТОГДА &Перечисление_X
                  |        ИНАЧЕ ВЫБОР
                  |                КОГДА тз.КоэффициентВариации < &Yдо
                  |                    ТОГДА &Перечисление_Y
                  |                ИНАЧЕ &Перечисление_Z
                  |            КОНЕЦ
                  |    КОНЕЦ КАК XYZ
                  |ИЗ
                  |    &тз КАК тз,
                  |    Перечисление.XYZКлассификация КАК XYZКлассификация";
   Запрос.УстановитьПараметр("тз",тз);
   Запрос.УстановитьПараметр("Перечисление_X",Перечисления.XYZКлассификация.XКласс);
   Запрос.УстановитьПараметр("Перечисление_Y",Перечисления.XYZКлассификация.YКласс);
   Запрос.УстановитьПараметр("Перечисление_Z",Перечисления.XYZКлассификация.ZКласс);
   Запрос.УстановитьПараметр("Xдо",XДо);
   Запрос.УстановитьПараметр("Yдо",YДо);
   Результат = Запрос.Выполнить().Выгрузить();
Что я неверно делаю?
1 catena
 
20.04.12
21:27
(0)У Сожалению, построитель отчета не работает с временными таблицами. В СКД можно организовать :)
2 al_zzz
 
20.04.12
21:33
В обработке требуется извлечь квадратный корень. В СКД такое возможно? Может у кто-нибудь поделится XYZ-анализом на СКД?
3 le_
 
20.04.12
22:02
4 catena
 
21.04.12
06:08
(3)Не вижу там примера ПОСТРОИТЕЛЯ с тз.
5 DimVad
 
21.04.12
06:40
(0) ТЗ можно использовать непосредственно в качестве источника данных для построителя отчета. Там надо указать тип источника данных.

Я так делам - брал тз, загружал в запрос, из запроса получал уже совсем готовый тз, засовывал его в построитель. Работало.
6 catena
 
21.04.12
07:03
(5)Бывают ситуации, когда ТЗ нужна именно в запросе. Например, для каких-то доп.вычислений, которые запрос не умеет.
7 echo77
 
21.04.12
08:17
(1) Как в СКД засунуть временную таблицу? Таблицу значений - понятно можно, а временную как?
8 le_
 
21.04.12
11:38
(4) Формируешь ТЗ каким угодно способом и передаешь ее построителю в качестве источника данных.
9 catena
 
21.04.12
12:18
(7)А зачем в СКД пихать временную, если можно засунуть ТЗ и соединить с запросом?

(8)А если я не хочу ТЗ, а хочу результат запроса? Со всеми итогами и группировками?
10 le_
 
21.04.12
12:47
(9) Результат запроса со всеми итогами и группировками передать построителю? Зачем?

Построение отчета можно свести к следующему:
1. Формирование набора данных
2. Представление набора данных пользователю (со всякими красивостями, группировками и т.п.)

Первый пункт реализуется запросом или описанием источника данных.
Второй - средствами вывода (построитель отчета, СКД или вручную).

Повторюсь, формируешь такую ТЗ, которая тебе нужна. Если формируешь запросом - будь там хоть 100 таблиц в запросе, с временными, внешними и т.п. - как хочешь. И передаешь эту готовую ТЗ построителю в качестве источника дынных. Всё.
11 al_zzz
 
22.04.12
13:02
(10) Как сгруппировать таблицу значений в построителе, если её передать в качестве источника данных?
Можно по-подробнее про 2-ой пункт?
12 le_
 
22.04.12
13:32
(11) Габец, Гончаров, Козырев, Кухлевский, Радченко - Профессиональная разработка в системе 1С:Предприятие 8
Глава 13 (стр. 415) - про построитель отчета.
Стр. 464 - про внешние источники данных.
13 catena
 
22.04.12
18:54
(12)Если у меня вирутальный параметр, например, в срезе последних, то с построителем придется:
1) сформировать пользователю допустимые поля и отборы
2) сформировать запрос с пользовательскими настройками
3) выгрузить в тз, обработать, запихнуть тз в построитель
4) наложить все группировки и сортировки.

В СКД делается одним телодвижением...
14 ptiz
 
22.04.12
19:05
Можно так:
1) При инициализации построителя подсовываем "пустышку" нужной структуры, которая помещается им в врем.таблицу, например
ВЫБРАТЬ
1 КАК Колонка1,
"а" КАК Колонка2
ПОМЕСТИТЬ ТЗ;

2) Для получения результата делаем Запрос = Построитель.ПолучитьЗапрос();
и в тесте запроса меняем текст на
ВЫБРАТЬ
ТЗ.Колонка1,
ТЗ.Колонка2
ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ

Всё.
Остается только: Результат = Запрос.Выполнить()
15 le_
 
22.04.12
19:39
(13) Я не спорю. СКД гораздо лучше, удобнее )
Сам пользуюсь только СКД. Изредка приходится старенькие отчетики на построителе править...
16 al_zzz
 
23.04.12
17:14
(15) Так как реализовать на СКД извлечение квадратного корня в промежуточных вычислениях?
17 vmv
 
23.04.12
17:17
уложить и произвести с ней некоторые действия - звучит лирично
18 le_
 
23.04.12
17:24
(16) POW, SQRT
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn