Имя: Пароль:
1C
1С v8
Генерация данных для отчета СКД в самом отчете
0 apd123
 
04.03.15
13:35
Хочу сделать что бы данные, на основе которых строится отчет в СКД генерились прямо в процессе формирования отчета (после нажатия на кнопку "сформировать").

Алгоритм представляю себе так:
1) Пользователь открывает форму отчета и задает параметры
2) Нажимает кнопку "Сформировать"
3) Параметры передаются в процедуру, которая на их основе заполняет определенный регистр сведений
4) Отчет строится из данных, выбранных из этого регистра

Проблема возникла в пункте 3, никак не могу получить значения параметров (параметр "Период" в данном случае).
Пробовал массой способов, например в обработке события ОбработкаПроверкиЗаполненияНаСервере() формы отчета вот так:

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
    СхемаКомпоновкиДанных = Отчеты.ОтчетТест.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
        КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
    
    URLСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных);
    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСхемы));
    КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);

    ТестПараметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Период"));

    Сообщить(ТестПараметр.Значение);
КонецПроцедуры


Выводится пустое сообщение.
Пробовал через собитие ПриКомпоновкеРезультата модуля отчета.
Пробовал подменять кнопку "Сформировать" своей командой, но оттуда тоже параметров не видно.

Подскажите куда копать?
1 Адский плющ
 
04.03.15
13:40
Вот, пример (не лучший, но рабочий) построения СКД отчета по данным из ТЗ

В модуле объекта отчета:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = ложь;
    
    ТаблицаДокументов = ПрочитатьДокументы(); // в процедуре в ТЗ собираются данные откуда нужно
    
    ДокументРезультат.Очистить();
    
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    
    //Передаем в макет компоновки схему, настройки и данные расшифровки
    МакетКомпоновки = КомпоновщикМакета.Выполнить(
        СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки,,Тип("ГенераторМакетаКомпоновкиДанных"));
    

    ВнешниеНаборыДанных = Новый Структура;
    ВнешниеНаборыДанных.Вставить("ТаблицаДокументов", ТаблицаДокументов);    
    
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(
        МакетКомпоновки, ВнешниеНаборыДанных,
        ДанныеРасшифровки);
    
    // Выводим результат в табличный документ
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
    
КонецПроцедуры



В СКД, соответственно, описан источник данных с колонками как в ТЗ.
2 apd123
 
04.03.15
13:48
(1) Вот мне надо примерно тоже самое, только в ПрочитатьДокументы() нужно передавать параметры, которые пользователь выбрал в форме.
Никак не могу понять как их получить.
3 Адский плющ
 
04.03.15
13:49
(2) Передать туда настройки


Настройки = КомпоновщикНастроек.ПолучитьНастройки();


ТаблицаДокументов = ПрочитатьДокументы(Настройки); // в процедуре в ТЗ собираются данные откуда нужно

    
Состав настроек настроить в виде параметров в схеме.
4 rincewind
 
04.03.15
13:53
(2) В отчете создать необходимые реквизиты, вынести их на форму отчета. В проц. ПриКомпоновкеРезультата можно будет их использовать.
5 Адский плющ
 
04.03.15
13:59
(4) И самое главное - никому не показывать, шоб не засмеяли.
6 rincewind
 
04.03.15
14:01
(4) Почему же? ТСу нужны параметры для предварительной подготовки данных. Зачем нужно их пихать в макет СКД, если они там использоваться не будут?
7 fisher
 
04.03.15
14:04
(0) Если УФ, то указанные пользователем значения параметров нужно доставать из КомпоновщикНастроек.ПользовательскиеНастройки
8 Адский плющ
 
04.03.15
14:05
(6) Как не будут? Если это параметры, то не обязательно что они должны быть в запросе. Зато они будут сохраняться с настройками и можно будет использовать стандартную морду БСП-ного отчета.
9 apd123
 
04.03.15
16:11
(3) Спасибо, работает. Только я решил передавать в функцию заполнения не целиком Настройки, а только нужный параметр. Так вроде покрасивее.

Кстати, изначально моя ошибка была в том что я не использовал ПолучитьНастройки(), поэтому параметры, к которым я обращался были пустыми. Правда непонятно почему не сработал метод компоновщика Инициализировать(), ну да ладно..