Имя: Пароль:
1C
1С v8
СКД Программный запуск отчета с параметром
0 lg2marvel
 
20.09.19
12:49
Привет.
Вызываю форму отчета:

    Форма = ПолучитьФорму("Отчет.ТабельБН.Форма");
    НастройкиОтчета = ПолучитьНастройки(Форма.Отчет.КомпоновщикНастроек); // получаем настройки
    
    ПараметрПодразделение = НастройкиОтчета.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Подразделение"));
    ПараметрПодразделение.Значение = Подразделение;
    ПараметрПодразделение.Использование = истина;    
    
    Форма.Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиОтчета);
    Форма.СкомпоноватьРезультат();
    Форма.Открыть();

и обработка компоновщика:

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

Но проблема в следующем: на форме параметр меняется, а при формировании отчета не используется. Как использовать переданный параметр в отчете? До момента Настройки = КомпоновщикНастроек.ПолучитьНастройки(); параметр есть в КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы
1 toypaul
 
гуру
20.09.19
12:53
вот так

    Форма.Открыть();

    Форма.Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиОтчета);
    Форма.СкомпоноватьРезультат();
2 lg2marvel
 
20.09.19
12:59
(1) Ничего не изменилось.
3 toypaul
 
гуру
20.09.19
13:03
Форма.Открыть();

Форма.Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра(блаблабла)
Форма.СкомпоноватьРезультат();
4 lg2marvel
 
20.09.19
14:02
(3) Все то же самое

    Форма.Открыть();
    Форма.Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Подразделение",Подразделение);
    Форма.СкомпоноватьРезультат();

Может как-то надо подругому получать настроки при компоновке?

    Настройки = КомпоновщикНастроек.ПолучитьНастройки();      
    
    КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;    
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
5 toypaul
 
гуру
20.09.19
14:07
ПолучитьНастройки формируется настройки с учетом пользовательских.
6 toypaul
 
гуру
20.09.19
14:09
Форма.Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра(блаблабла)

устанавливает значение источника, на который ссылается польз. настройка.

я хз почему не работает. тут надо мозг включать и отладку.

можно не делать ПолучитьНастройки, но это некрасиво

можно установить значение параметра ч/з польз. настройки. но ... как-то это странно. если на форме параметр отображется при этом, значит параметр был через "просто настройки" установлен верно
7 lg2marvel
 
20.09.19
14:38
ПараметрПодразделениеЗначение = неопределено;
    Если  не КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Подразделение").Значение = неопределено Тогда
        ПараметрПодразделениеЗначение = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Подразделение").Значение;
    КонецЕсли;    
    
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();           
    ПараметрПодразделение = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Подразделение"));
    ПараметрПодразделение.Значение = ПараметрПодразделениеЗначение;
    ПараметрПодразделение.Использование = истина;
    
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;    
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);    

Так работает, но если отчет открывать не по команде в форме, то параметра подразделение он попросту не видит, только если открыть настройки (там параметр есть) и нажать закрыть и сформировать - тогда формируется правильно.
8 lg2marvel
 
20.09.19
14:49
Так работает.

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

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