Имя: Пароль:
1C
 
Программное открытие отчёта с заполнением параметров.
0 РыбаАист
 
19.02.26
10:50
Добрый день. Хочу, чтоб отчёт открывался по кнопке.
Сделал общую команду, запихнул куда мне надо, а в команде такой код.


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

И вот отбор (на сдельныйНаряд) работает, а вот параметр Период_ ни в какую не заполняется.
Отчёт открывается либо вообще без периода, либо период заполняется последний запомненный в этом отчете. И подозреваю что какие-то запомненные настройки как раз и перекрывают мой параметр при открытии отчёта, но не могу разобраться, где и в каком месте.
1 toypaul
 
гуру
19.02.26
11:10
Не уверен, что с отчетом сработает, но можно попробовать передать все через параметр "Отбор" в параметрах формы. Но только в том случае когда отборы на "равно" (одно значение) или "в списке".

Либо передавать через параметры формы сформированные "ПользовательскиеНастройки".
2 toypaul
 
гуру
19.02.26
11:12
3 РыбаАист
 
19.02.26
11:13
(1) Не, если пытаться передать через отбор, он там параметр не находит. Пишет, что поля "период_" нет, что очевидно. Это ведь не поле, чтоб отбор по нему делать.

Второе попробую.
4 РыбаАист
 
19.02.26
14:32
Вопрос всё ещё актуален.
5 Мультук
 
гуру
19.02.26
14:36
(0)

Поставить в отладчике две точки остановки на строках

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


ФормаОтчета.СкомпоноватьРезультат();


и посмотреть (и нам показать), список из
КомпоновщикНастроек.Настройки.ПараметрыДанных

с именами, типами и значениями ?

До установки параметра и после ?
6 arsik
 
гуру
19.02.26
14:41
(0) БСП в конфигурации есть? Если есть то примерно так
Отбор = Новый Структура;
Отбор.Вставить("Контрагент",            Контрагент);
Отбор.Вставить("ДоговорВзаиморасчетов", ДоговорВзаиморасчетов);
ОтчетыПлатформаКлиент.ОткрытьОтчет("Отчет.ВзаиморасчетыСКонтрагентом", "ВзаиморасчетыКомпании",,,, Отбор, ДатаНачалаОтчета, ДатаКонцаОтчета);
7 Мультук
 
гуру
19.02.26
14:44
(6)

Я думаю, что БСП не в курсе про параметр "Период_"

Впрочем, возможно, я чего-то не знаю.
8 РыбаАист
 
19.02.26
14:49
(5)
До
https://disk.yandex.ru/i/6oyCc7UTn97Q0w

после
https://disk.yandex.ru/i/cZDX9TF9xtoB1g

НачалоПериода и КонецПериода проставлять отдельно от периода тоже пробовал если что.
9 РыбаАист
 
19.02.26
15:10
Ладно, пользовательские настройки потрогать всё же помогло.

Заменил:    

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

на:

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

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