Имя: Пароль:
1C
1С v8
Промежуточный запрос в СКД
0 MadFatCat
 
03.06.13
17:35
Всем привет.
8.2 Обычное приложение.
Ситуация такая. Ну очень нужно иметь возможность отбора(по сотрудникам и тп) в СКД, это я делаю через табличное поле Данные устанавливаю КомпоновщикНастроек.Настройки.Отбор. Полученные данные мне надо обработать и уже на основе их сформировать отчет, предполагаю сделать через набор данных объект загрузив в него таблицу значений.

Вопрос в том как мне с начало выполнить запрос с отбором а затем загрузить таблицу значений и сформировать отчет.
1 Господин ПЖ
 
03.06.13
17:37
прочитать настройки
выполнить простой запрос в теле отчета
выгрузить в тз
передать тз в скд

успiх?
2 ILM
 
гуру
03.06.13
17:40
Нах, такие заморочки.  Копируй отбор в запрос - демонически )) На базе отбора делаешь запрос и его в СКД передавайте.
3 Господин ПЖ
 
03.06.13
17:45
(2) настройки не свалятся все?
4 ILM
 
гуру
03.06.13
17:57
Это как делать будете))
1) В запрос добавляем условия и параметры перебирая элементы отбора
2) Присваиваем значения параметров из значений отбора.
3) Выполняем отчет, если погуглить, то на мисте это уже обсуждалось: "Запрос из отбора".
5 Господин ПЖ
 
03.06.13
17:59
(4) так я в (1) что не так написал? или там текст запроса в скд тоже меняется?
6 azernot
 
03.06.13
18:01
Ну вот как-то так:


   Состояние("Выполнятется запрос к данным ИБ...");
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,КомпоновщикНастроек.Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
   ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
   
   ТаблицаИсходныхДанных = Новый ТаблицаЗначений;
   
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
   ПроцессорВывода.УстановитьОбъект(ТаблицаИсходныхДанных);
   
   Попытка
       ПроцессорВывода.Вывести(ПроцессорКомпоновки);
   Исключение
       Сообщить(ОписаниеОшибки());
       Возврат;
   КонецПопытки;
   
   Состояние("Выполнятется расчет показателей формы...");
   ВыполнитьРасчетПоказателей(ТаблицаИсходныхДанных); //Тут делаешь, чего тебе надо..
   
   
   Состояние("Выполнятется вывод данных...");
   ВнешниеНаборыДанных = Новый Структура;
   ВнешниеНаборыДанных.Вставить("ТаблицаРасчитанныхДанных", ТаблицаИсходныхДанных);
   
   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанныхДляВывода,КомпоновщикНастроекДляВывода.Настройки,ДанныеРасшифровкиОтчета,,Тип("ГенераторМакетаКомпоновкиДанных"));
   ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
   ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборыДанных,ДанныеРасшифровкиОтчета, Истина);
   
   ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   ПроцессорВывода.ОтображатьПроцентВывода = Истина;
   ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.ДокументРезультат);
   
   ТабДокумент = ЭлементыФормы.ДокументРезультат;
   ТабДокумент.Очистить();
   ТабДокумент.Вывести(ПолучитьСворачиваемыйЗаголовок(СтруктураПоказателей));
   
   ПроцессорВывода.Вывести(ПроцессорКомпоновки);
7 ILM
 
гуру
03.06.13
18:23
Можно сразу запрос в СКД и параметры в СКД, без ТЗ. ТС отчет нужен, а не само ТЗ. Скорее всего большой разницы не будет, если конечно ТЗ не на сотню тысяч строк.