Передать параметр в форму отчета

1. Sp1k3 12 23.08.22 09:45 Сейчас в теме
Добрый день! Подскажите, как передать параметр в форму отчета из другой формы, не создавая при этом форму отчета в самом отчете? Как я понимаю можно с использованием формы отчета БСП провернуть, но не догоняю как.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sp1k3 12 23.08.22 09:50 Сейчас в теме
Пока получилось только с помощью формы, которую я сам добавил в отчет.

Кнопка вызова отчета:
&НаКлиенте
Процедура НайтиДелаАрхива(Команда)	
	СсылкаЗаявки = Элементы.Список.ТекущиеДанные.Ссылка;		
	ПараметрыОткрытия = Новый Структура("ЗаявкаВАрхивНаСсылка", СсылкаЗаявки);		
	ОткрытьФорму("Отчет.МестоположениеДел.Форма", ПараметрыОткрытия, ЭтаФорма, Истина);
КонецПроцедуры


В форме отчета:
&НаСервере
Процедура ПередЗагрузкойВариантаНаСервере(Настройки)
        ПараметрЗаявкаВАрхивНаСсылка = ЭтаФорма.Параметры.ЗаявкаВАрхивНаСсылка;
        Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Ссылка", ПараметрЗаявкаВАрхивНаСсылка);	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	СкомпоноватьРезультат();	 
КонецПроцедуры
Показать
3. Gendelf 23.08.22 10:29 Сейчас в теме
(2) ОткрытьФорму("Отчет.МестоположениеДел.ФормаОбъекта")
4. Sp1k3 12 23.08.22 10:44 Сейчас в теме
(3) Изменил. По отладчику запустилась процедура ПриСозданииНаСервере в модуле общей формы "форма отчета". Параметр "ЗаявкаВАрхивНаСсылка" тоже передался.
А как теперь параметр то в форму подставить? Неужели без изменения БСПшных форм не обойтись?
5. Gendelf 23.08.22 10:51 Сейчас в теме
(4) Попробуйте использовать расширения. Создать и добавить программно на форму этот реквизит.
6. ImHunter 327 23.08.22 10:54 Сейчас в теме
7. Sp1k3 12 24.08.22 06:12 Сейчас в теме
(6) Спасибо! Сработало, но с небольшими корректировками.
8. VZyryanov 24.08.22 09:10 Сейчас в теме
//Общий модуль Клиент

Процедура СКДНастройкиУстановитьПараметр(Настройки,Параметр,Значение,Использовать=Истина) Экспорт
	Если ТипЗнч(Настройки)=Тип("НастройкиКомпоновкиДанных") Тогда
		Элементы=Настройки.ПараметрыДанных.Элементы;
	Иначе
		Элементы=Настройки.Элементы;
	КонецЕсли;
	Для каждого Пар Из Элементы Цикл
		Если ""+Пар.Параметр=Параметр Тогда
			Пар.Использование=Использовать;
			Пар.Значение=Значение;
			Возврат;
		КонецЕсли;
	КонецЦикла;		
КонецПроцедуры

Процедура СКДОтчетОткрыть(ИмяОтчета, ПараметрыОтчета) Экспорт	

	Настройки=КфСерверВызов.СКДНастройки("ИмяОтчета");
	ПользовательскиеНастройки=КфСерверВызов.СКДПользовательскиеНастройки("ИмяОтчета");
	ФиксированныеНастройки=КфСерверВызов.СКДФиксированныеНастройки("ИмяОтчета");
	
	Для каждого Параметр Из ПараметрыОтчета Цикл
		СКДНастройкиУстановитьПараметр(Настройки,Параметр.Ключ,Параметр.Значение);
		СКДНастройкиУстановитьПараметр(ПользовательскиеНастройки,Параметр.Ключ,Параметр.Значение);
		СКДНастройкиУстановитьПараметр(ФиксированныеНастройки,Параметр.Ключ,Параметр.Значение);
	КонецЦикла; 

	ПараметрыФормы=Новый Структура("СформироватьПриОткрытии,ФиксированныеНастройки,ПользовательскиеНастройки,Настройки",
		Истина,ФиксированныеНастройки,ПользовательскиеНастройки,Настройки);
	Уникальность=ТекущаяДата();
	ОткрытьФорму("Отчет."+ИмяОтчета+".Форма",ПараметрыФормы,,Уникальность,,,,РежимОткрытияОкнаФормы.Независимый);

КонецПроцедуры
Показать


//Общий модуль СерверВызов

Функция СКДНастройки(Отчет) Экспорт
	О=Отчеты[Отчет].Создать();
	Возврат О.КомпоновщикНастроек.Настройки;
КонецФункции

Функция СКДПользовательскиеНастройки(Отчет) Экспорт
	О=Отчеты[Отчет].Создать();
	Возврат О.КомпоновщикНастроек.ПользовательскиеНастройки;
КонецФункции

Функция СКДФиксированныеНастройки(Отчет) Экспорт
	О=Отчеты[Отчет].Создать();
	Возврат О.КомпоновщикНастроек.ФиксированныеНастройки;
КонецФункции
Показать
9. Sp1k3 12 24.08.22 09:57 Сейчас в теме
(8) Не очень понимаю, в каких общих модулях это вызывать?
10. VZyryanov 24.08.22 10:38 Сейчас в теме
(9) Эти процедуры размещены в общих модулях (клиент, сервер+вызов сервера). Вызывать не требуется в общих модулях. Вызывайте, например, в процедуре .НайтиДелаАрхива.

Пример:
В модуле формы:
&НаКлиенте
Процедура Команда1(Команда)
	ТестОткрытияОтчета();
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьПодразделение(Наименование)
	Возврат Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию(Наименование);
КонецФункции

&НаКлиенте
Процедура ТестОткрытияОтчета()
	
	ИмяОтчета="ПТПЗаПроизвольныйПериод";
	ПараметрыОтчета=Новый Структура;        
	Период=Новый СтандартныйПериод();
	Период.Вариант=ВариантСтандартногоПериода.ПроизвольныйПериод;
	Период.ДатаНачала='20180101';
	Период.ДатаОкончания=КонецМесяца(Период.ДатаНачала);
	ПараметрыОтчета.Вставить("Период",Период);
	ПараметрыОтчета.Вставить("БезПредложений",Истина);
	ПараметрыОтчета.Вставить("Подразделение1",ПолучитьПодразделение("ОКС"));
	
	КФКлиент30.СКДОтчетОткрыть(ИмяОтчета, ПараметрыОтчета);
	
КонецПроцедуры
Показать


В общем модуле КФКлиент30 (исправил ошибки в процедуре):
Процедура СКДОтчетОткрыть(ИмяОтчета, ПараметрыОтчета) Экспорт	

	Настройки=КфСерверВызов.СКДНастройки(ИмяОтчета);
	ПользовательскиеНастройки=КфСерверВызов.СКДПользовательскиеНастройки(ИмяОтчета);
	ФиксированныеНастройки=КфСерверВызов.СКДФиксированныеНастройки(ИмяОтчета);
	
	Для каждого Параметр Из ПараметрыОтчета Цикл
		СКДНастройкиУстановитьПараметр(Настройки,Параметр.Ключ,Параметр.Значение);
		СКДНастройкиУстановитьПараметр(ПользовательскиеНастройки,Параметр.Ключ,Параметр.Значение);
		СКДНастройкиУстановитьПараметр(ФиксированныеНастройки,Параметр.Ключ,Параметр.Значение);
	КонецЦикла; 

	ПараметрыФормы=Новый Структура("СформироватьПриОткрытии,ФиксированныеНастройки,ПользовательскиеНастройки,Настройки",
		Истина,ФиксированныеНастройки,ПользовательскиеНастройки,Настройки);
	Уникальность=ТекущаяДата();
	ОткрытьФорму("Отчет."+ИмяОтчета+".Форма",ПараметрыФормы,,Уникальность,,,,РежимОткрытияОкнаФормы.Независимый);

КонецПроцедуры
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот