Имя: Пароль:
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
Можно сразу запрос в СКД и параметры в СКД, без ТЗ. ТС отчет нужен, а не само ТЗ. Скорее всего большой разницы не будет, если конечно ТЗ не на сотню тысяч строк.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан