Имя: Пароль:
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) Спасибо, работает. Только я решил передавать в функцию заполнения не целиком Настройки, а только нужный параметр. Так вроде покрасивее.

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