Программно открыть отчет СКД с параметрами и отбором

1. serega9507585993 25 02.12.17 18:19 Сейчас в теме
К сожалению, на просторах интернета не нашел подходящей статьи или примера. (чтобы не пришлось переделывать сам отчет) Выкладываю свой пример.

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


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


Остальные параметры формы СКД можно найти в синтаксис- помошнике по ключу "Расширение управляемой формы для отчета "
hydro2588_2015; parker_j; moralex2k; motorkuzbassa.it; sir; romanagatiy; Alex17; Egovigor; user937209; Mahon83; kuznetsov1c; Ligret; Kovekh; user1244690; Kostt; Brook; user708373_fclm2011; improg; gubanoff; eeeio; hottion; extalionos; kamsky93; plnz; dreamerr7; el-gamberro; Andy_NTG; Kazaams; vak_alexrovich_ru; pyotrgr; LinaTrofimenko; adhocprog; rpgshnik; liamkernighan; MonteCriZto; a1x; Serginyos; Lapitskiy; wowik; Meson; serpanik; nikidevel; IT_GG; sertak; Ivan90; slax; dimisa; VIA_1C; nems; CeHbKA; Liily; igarekkkkk; kala4ka; Designer1C; request4t; demart-omsk; garaevilnur; redtram; KAV2; maikl007; amatoravg; acanta; +62 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
10. improg 574 05.04.21 09:10 Сейчас в теме
(1) Спасибо, ваш способ помог.
user937209; serega9507585993; +2 Ответить
2. a30v 02.12.17 21:01 Сейчас в теме
В комментариях пример установки параметров и отбора https://forum.infostart.ru/forum9/topic64306/
3. huzden 11.09.18 16:56 Сейчас в теме
Спасибо, очень помогло
serega9507585993; +1 Ответить
4. kristina 162 03.01.19 10:21 Сейчас в теме
Спасибо большое , очень помогло!
serega9507585993; +1 Ответить
5. Designer1C 448 23.05.19 14:40 Сейчас в теме
Спасибо ! Ваш пример очень помог !
Напишите статью : тема полезная. У Хрусталёвой про это не написано.
serega9507585993; +1 Ответить
6. Baiji 17.10.19 10:01 Сейчас в теме
7. serpanik 25.10.19 17:04 Сейчас в теме
Очень помогло.
Спасибо.
Art_Zidan; user937209; +2 Ответить
8. Serginyos 28.02.20 16:55 Сейчас в теме
Была подобная задача.
Сначала воспользовался этим примером, но есть минус в том, что значения отборов на форме нельзя изменить.
Решил с помощью другого примера из этого форума, ссылка в конце.
Может кому пригодиться и этот вариант решения (и что бы меньше тратить время на поиск):

Задача - сформировать отчет по кнопке на панели функций

1- Создать общую команду

2- Обработка команды

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

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


Взял и немного переделал отсюда
forum.infostart
Yan_Malyakov; nikolav; Wdivine; gubanoff; eeeio; Fox_1n; BarsukM; dreamerr7; M.Nikitin; Kazaams; larson227; pivo_san; serega9507585993; liamkernighan; +14 Ответить
11. Craig 274 09.06.21 17:09 Сейчас в теме
(8)
стрОтборы


Спасибо!

Вопрос, а как можно задать параметр "по ширене листа" ???

Через модуль обекта Процедура ПриКомпоновкеРезультата не получается, так как не заходит.
9. web1984 10.03.21 15:37 Сейчас в теме
Подскажите а как установить отбор на дополнительный реквизит из номенклатуры?

делаю так
ПараметрыОткрытия = Новый Структура("СформироватьПриОткрытии", Истина);
ПараметрыОткрытия.Вставить("Отбор", Новый Структура("Номенклатура.обобщающая характеристика",ОбщаяХарактеристика));
ОткрытьФорму("Отчет.ОстаткиИДоступностьТоваров.Форма",ПараметрыОткрытия,ЭтаФорма,,,,,РежимОткрытияОкнаФормы.Независимый);


Недопустимое значение параметра (параметр номер '1')
{Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(6041)}: ПараметрыОткрытия.Вставить("Отбор", Новый Структура("Номенклатура.обобщающая характеристика",ОбщаяХарактеристика));
12. Eugen-S 389 10.08.21 20:41 Сейчас в теме
Внесу свою лепту в эту тему.

В конфигурации на ОФ мне понадобилось из одного нетипового отчёта СКД открывать обычную форму другого нетипового отчёта СКД, чтобы в ней сразу формировался отчёт, с параметрами первого отчёта.

Найти в ИТС пример кода я не смог, и мне пришлось потратить определённое время на "изобретение велосипеда".

Чтобы в следующий раз не заниматься "изобретением велосипеда" столкнувшись с подобной задачей, я решил написать статью, в ней рассматривается в том числе и решение подобной задачи на управляемых формах.


Программное открытие отчета СКД с параметрами и отбором (УФ / ОФ)
13. Baronello 1 07.09.21 15:13 Сейчас в теме
FYI создавать форму отчета необязательно "Отчет.ОстаткиНоменклатурыПоТипуСклада.Форма.ФормаОтчетаУправляемая", можно и так "Отчет.ОстаткиНоменклатурыПоТипуСклада.Форма"
14. user937209 17.12.21 15:43 Сейчас в теме
15. Obertone 74 12.05.22 09:01 Сейчас в теме
Была похожая задача. Там, правда, задача была вывести команду открытия стандартного отчёта в документ, чтобы при его открытии подтягивался из реквизита документа параметр отчёта. Для этого во внешнюю обработку позаимствовал из отчёта все его макеты, реквизиты и форму. А далее определил внешнюю обработку в модуле объекта как печатную форму с вызовом клиентского метода. Там передавал в отчёт параметр из реквизита документа и открывал форму со стандартным заполнением параметра отчёта.
16. IOrkSAR 28.11.23 15:34 Сейчас в теме
Кто нибудь подскажет как сделать тоже самое, только для обычного приложения? Делаю тоже самое, но само по себе ничего не выводится, а параметры не добавляются. Хотя в управляемом все ок.
Оставьте свое сообщение

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