Программное открытие отчета СКД без формы с передачей параметров

1. independ 1520 06.03.19 13:36 Сейчас в теме
Застрял вроде бы на простом вопросе, есть отчет на СКД, помещенный в справочник Дополнительные отчеты и обработки, без формы
Открываю программно в расширении, нужно передать параметры НачПериода и КонПериода

&НаКлиенте
Процедура Расш_Остатки_ОтчетЧекиККИПосле(Команда)
	
	ВнешнийОтчетОбработкаДляОткрытияСсылка = ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере("Отчет чеки ККМ УТ11");	
	
	ИмяОбработкиСлужебное = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВнешнийОтчетОбработкаДляОткрытияСсылка);
	
	ПараметрыФормы = Новый Структура;
	
	ПараметрыФормы.Вставить("КлючВарианта","Основной2");
	ПараметрыФормы.Вставить("СформироватьПриОткрытии",Истина);
	
	ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;
	ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("НачПериода", НачалоДня(ТекущаяДата()));
	ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("КонПериода", КонецДня(ТекущаяДата()));
	
	ПараметрыФормы.Вставить("ПользовательскиеНастройки",ПользовательскиеНастройки);
	
	ОткрытьФорму("ВнешнийОтчет." + ИмяОбработкиСлужебное + ".Форма",ПараметрыФормы, ЭтаФорма);
	
КонецПроцедуры

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


Но параметры не заполняются. Предполагаю, что пользовательские настройки или настройки нужно получить из схемы компоновки
dseg; Lapitskiy; serverstar; Mihanic555; nekit_rdx; ellavs; +6 Ответить
По теме из базы знаний
Найденные решения
11. independ 1520 07.03.19 09:23 Сейчас в теме
Переделал без получения формы

&НаКлиенте
Процедура Расш_Остатки_ОтчетЧекиККИПосле(Команда)
	
	ВнешнийОтчетОбработкаДляОткрытияСсылка = ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере("Отчет чеки ККМ УТ11");	
	
	ИмяОбработкиСлужебное = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВнешнийОтчетОбработкаДляОткрытияСсылка);
	
	ПараметрыФормы = Новый Структура;
	
	ПараметрыФормы.Вставить("КлючВарианта","Основной2");
	ПараметрыФормы.Вставить("СформироватьПриОткрытии",Истина);
	
	ПользовательскиеНастройки=ПолучитьПользовательскиеНастройки(ВнешнийОтчетОбработкаДляОткрытияСсылка);
	ПараметрыФормы.Вставить("ПользовательскиеНастройки",ПользовательскиеНастройки);
	
	ОткрытьФорму("ВнешнийОтчет." + ИмяОбработкиСлужебное + ".Форма",ПараметрыФормы, ЭтаФорма);
	
КонецПроцедуры

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

&НаСервереБезКонтекста
Функция ПолучитьПользовательскиеНастройки(ВнешнийОтчетОбработкаДляОткрытияСсылка);
	КомпоновщикНастроек=ДополнительныеОтчетыИОбработкиВызовСерве­ра.ПолучитьОбъектВнешнейОбработки(ВнешнийОтчетОбработкаДляОткрытияСсылка).КомпоновщикНастроек;
	Настройки=КомпоновщикНастроек.ПолучитьНастройки();
	Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачПериода",НачалоДня(ТекущаяДата()));
	Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("КонПериода",КонецДня(ТекущаяДата()));
    КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
	Возврат КомпоновщикНастроек.ПользовательскиеНастройки;
КонецФункции
Показать
g_b; qpliz_andrew; timurkarimov; dseg; valkor; blandinko; cyegor; alekslis; assa; mongiilol; user830833; burgomister; zadoy; user847462; Mahon83; AnryMc; inspam; Dimony4; serverstar; Barney06; eeeio; vladir; Mihanic555; iiceberg; nightsun; GetNight; jane_de_rio; Cmapnep; TSSV; nekit_rdx; TuMyP1985; rpgshnik; v_den_v; Marliiin; arbeitenmail; golod; Volchock; specc87; ellavs; singlych; +40 Ответить
Остальные ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
3. singlych 06.03.19 14:04 Сейчас в теме
(1)
ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;
ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("НачПериода", НачалоДня(ТекущаяДата()));
ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("КонПериода", КонецДня(ТекущаяДата()));


почему в допсвойства, а не в элементы?
2. yaroslavkravets 24 06.03.19 13:59 Сейчас в теме
1. сформировать програмно СКД с установкой параметров (рекомендую) используя КомпоновщикНастроек
2. или как то так(не рекомендованно):

Отчет = ПолучитьИмяВнешнегоОбъекта("Отчет по серийным номерам");
ФормаОтчет = ПолучитьФорму("ВнешнийОтчет." + Отчет+ ".Форма.ФормаОтчета");

// установка параметров.
ФормаОтчет .Этаформа.Номенклатура = Объект.Номенклатура;
ФормаОтчет .Этаформа.СерийныеНомера = Объект.СерийныйНомер;

// запуск процедур
ФормаОтчет .ОбновитьСписокСН();
ФормаОтчет .СформироватьПоНоменклатуреНаСервере();

// открытие формы отчета.
ОткрытьФорму(ФормаОтчетПоСерийнымНомерам);
independ; +1 Ответить
9. independ 1520 06.03.19 21:37 Сейчас в теме
(2)
(7)
Заработало, получил форму отчета, далее Отчет.КомпоновщикНастроек, дальше дело техники, всем спасибо

Процедура Расш_Остатки_ОтчетЧекиККИПосле(Команда)
	
	ВнешнийОтчетОбработкаДляОткрытияСсылка = ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере("Отчет чеки ККМ УТ11");	
	
	ИмяОбработкиСлужебное = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВнешнийОтчетОбработкаДляОткрытияСсылка);
	
	ПараметрыФормы = Новый Структура;
	
	ПараметрыФормы.Вставить("КлючВарианта","Основной2");
	ПараметрыФормы.Вставить("СформироватьПриОткрытии",Истина);
	
	Форма=ПолучитьФорму("ВнешнийОтчет." + ИмяОбработкиСлужебное + ".Форма");
	ПользовательскиеНастройки=ПолучитьПользовательскиеНастройки(Форма.Отчет.КомпоновщикНастроек);
	ПараметрыФормы.Вставить("ПользовательскиеНастройки",ПользовательскиеНастройки);
	
	ОткрытьФорму("ВнешнийОтчет." + ИмяОбработкиСлужебное + ".Форма",ПараметрыФормы, ЭтаФорма);
	
КонецПроцедуры

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

&НаСервереБезКонтекста
Функция ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере(ИмяОтчетаОбработки)
	Возврат Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(ИмяОтчетаОбработки).Ссылка;
КонецФункции
Показать
4. independ 1520 06.03.19 15:02 Сейчас в теме
Делал по примеру https://www.e-du.ru/2018/03/1c-open-ext-report.html\
Но у меня нет формы для отчета СКД, думаю как получить настройки из внешнего отчета типа
	ОтчетОбъект=Отчеты.Отчет1.Создать();
	КМ=ОтчетОбъект.КомпоновщикНастроек;
	Настройки=КМ.ПолучитьНастройки();
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачПериода", НачалоДня(ТекущаяДата()));
	Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("КонПериода", КонецДня(ТекущаяДата()));
    КМ.ЗагрузитьНастройки(Настройки);
5. singlych 06.03.19 15:24 Сейчас в теме
(4) Попробуй просто сунуть параметры в элементы пользовательских настроек, может проканает.
типа там

ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;
ЭлементНастройки = ПользовательскиеНастройки.Элементы.Добавить(Тип("ПараметрКомпоновкиДанных"));
ЭлементНастройки.Использование = Истина;
ЭлементНастройки.Параметр = Новый ПараметрКомпоновкиДанных("НачПериода");
ЭлементНастройки.Значение = НачалоДня(ТекущаяДата());
6. independ 1520 06.03.19 15:57 Сейчас в теме
(5) Не взлетело, пришлось сделать по деревенски через ХранилищеОбщихНастроек, перед открытием отчета заполняю структуру параметров и помещаю в ХранилищеОбщихНастроек. В отчете в модуле объекта в процедуре ПриКомпоновкеРезультата читаю эту структуру параметров из ХранилищеОбщихНастроек, заполняю и т.д. и т.п.
Работает
7. toypaul 63 06.03.19 17:38 Сейчас в теме
(4) а если все-таки попробовать ПолучитьФорму? даже если ее нет ПолучитьФорму("ВнешнийОтчет.МойОтчет.Форма"). по идее должно "дать" автосегнеренную форму
independ; +1 Ответить
8. independ 1520 06.03.19 19:06 Сейчас в теме
(7) а из нее достучаться до Отчет.КомпоновщикНастроек.Настройки? Можно попробовать.
10. toypaul 63 07.03.19 07:54 Сейчас в теме
11. independ 1520 07.03.19 09:23 Сейчас в теме
Переделал без получения формы

&НаКлиенте
Процедура Расш_Остатки_ОтчетЧекиККИПосле(Команда)
	
	ВнешнийОтчетОбработкаДляОткрытияСсылка = ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере("Отчет чеки ККМ УТ11");	
	
	ИмяОбработкиСлужебное = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВнешнийОтчетОбработкаДляОткрытияСсылка);
	
	ПараметрыФормы = Новый Структура;
	
	ПараметрыФормы.Вставить("КлючВарианта","Основной2");
	ПараметрыФормы.Вставить("СформироватьПриОткрытии",Истина);
	
	ПользовательскиеНастройки=ПолучитьПользовательскиеНастройки(ВнешнийОтчетОбработкаДляОткрытияСсылка);
	ПараметрыФормы.Вставить("ПользовательскиеНастройки",ПользовательскиеНастройки);
	
	ОткрытьФорму("ВнешнийОтчет." + ИмяОбработкиСлужебное + ".Форма",ПараметрыФормы, ЭтаФорма);
	
КонецПроцедуры

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

&НаСервереБезКонтекста
Функция ПолучитьПользовательскиеНастройки(ВнешнийОтчетОбработкаДляОткрытияСсылка);
	КомпоновщикНастроек=ДополнительныеОтчетыИОбработкиВызовСерве­ра.ПолучитьОбъектВнешнейОбработки(ВнешнийОтчетОбработкаДляОткрытияСсылка).КомпоновщикНастроек;
	Настройки=КомпоновщикНастроек.ПолучитьНастройки();
	Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачПериода",НачалоДня(ТекущаяДата()));
	Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("КонПериода",КонецДня(ТекущаяДата()));
    КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
	Возврат КомпоновщикНастроек.ПользовательскиеНастройки;
КонецФункции
Показать
g_b; qpliz_andrew; timurkarimov; dseg; valkor; blandinko; cyegor; alekslis; assa; mongiilol; user830833; burgomister; zadoy; user847462; Mahon83; AnryMc; inspam; Dimony4; serverstar; Barney06; eeeio; vladir; Mihanic555; iiceberg; nightsun; GetNight; jane_de_rio; Cmapnep; TSSV; nekit_rdx; TuMyP1985; rpgshnik; v_den_v; Marliiin; arbeitenmail; golod; Volchock; specc87; ellavs; singlych; +40 Ответить
13. CMK0001 24.06.19 09:22 Сейчас в теме
(11) Огромное спасибо , редко когда нахожу инфу, которая нужна, просто копируя текст и все после этого работает .
28. Touch_Of_Soul 29 15.02.23 14:33 Сейчас в теме
(11)
КомпоновщикНастроек=ДополнительныеОтчетыИОбработкиВызовСервера.ПолучитьОбъектВнешнейОбработки(ВнешнийОтчетОбработкаДляОткрытияСсылка).КомпоновщикНастроек;


Метод объекта не обнаружен (ПолучитьОбъектВнешнейОбработки)
В Управление нашей фирмой, редакция 3.0 (3.0.2.112). Хотел как у Вас сделать.
30. debug 17.02.23 14:36 Сейчас в теме
(28) в УНФ метод называется по другому - ОбъектВнешнейОбработки
31. CherTolik_26rus 26.04.23 12:21 Сейчас в теме
(11) Скорее все в новых версиях БСП метод "ПолучитьОбъектВнешнейОбработки "
ДополнительныеОтчетыИОбработкиВызовСервера.ПолучитьОбъектВнешнейОбработки
был заменен на "ОбъектВнешнейОбработки"
ДополнительныеОтчетыИОбработкиВызовСервера.ОбъектВнешнейОбработки
14. golod 18.10.19 17:36 Сейчас в теме
Огромное спасибо, прямо то что надо!
serverstar; +1 Ответить
15. parshin 78 17.04.20 09:43 Сейчас в теме
Спасибо, очень помогло!
Если у кого-то этот код не сработает, то обратите внимание чтобы параметры были включены в пользовательские настройки (Галка "Включать в пользовательские настройки").
23. German_Tagil 42 02.07.20 08:17 Сейчас в теме
(15) Спасибо за предупреждение - во вторник часа 2 убил прежде чем понял
16. German_Tagil 42 29.06.20 13:57 Сейчас в теме
Хорошо! А каким образом передать в отчет ссылку на документ из которого данный отчет вызывается (в отчете формы нет).
Суть проблемы. Вызываю из документа счетнаоплатупоставщика внешний отчет СКД - сформировал данные и хочу записать их в форму документа из которой они вызывались.
Отчет вызывается данные формируются а вот вернуть их обратно не получается.
Пока просто пишу в ДокЗаказ = Документы.Счетнаоплатупоставщика.СоздатьДокумент();
а хотелось бы вернуть данные сразу в открытый документ
17. independ 1520 29.06.20 14:20 Сейчас в теме
(16) т.е. отчет на СКД формирует некие данные, которые выведутся в табличный документ отчета - и их оттуда нужно получить?
18. German_Tagil 42 30.06.20 06:16 Сейчас в теме
(17) данные уже получены
формирую два источника данных табличный документ и ТЗ для записи
в отчете стоит признак выводить или нет
после того как пользователь понял что он все настроил и нужная инфа на экране
устанавливает приз формирует отчет и записывает ТЗ в документ
так вот каким образом получить форму документа из которой вызывался отчет?
остальное все сделано
19. independ 1520 30.06.20 07:19 Сейчас в теме
(18) ВладелецФормы в форме отчета
21. German_Tagil 42 30.06.20 11:45 Сейчас в теме
(19) Пытаюсь запустить и передать хотябы даты - не получается
отчет запускается но параметры не передаются
20. German_Tagil 42 30.06.20 09:53 Сейчас в теме
а формы нету...
Может быть возможно передать владелецформы.объект как параметр?
22. German_Tagil 42 30.06.20 13:26 Сейчас в теме
ну немного разобрался даты передаются
но вот что делать с владельцем формы?
24. KindLion 02.07.20 11:32 Сейчас в теме
Спасибо большое!
Помогли!
25. proger1c81 05.07.21 19:38 Сейчас в теме
написал внешний отчет без формы. Есть только СКД. Что нужно в модуле объекта прописать, чтобы задать программно параметры отчета? Бьюсь уже несколько часов, не могу понять этот БСП...
26. Froloid 66 01.04.22 20:04 Сейчас в теме
В настоящий момент для этого есть типовой метод в ОМ ДополнительныеОтчетыИОбработкиКлиент

Процедура ОткрытьВариантДополнительногоОтчета(Ссылка, КлючВарианта) Экспорт
29. Touch_Of_Soul 29 15.02.23 14:36 Сейчас в теме
(26) можете выложить пример как по кнопке на форме документа открыть ВнешнийОтчет что хранится в базе дополнительные отчеты и обработки?

Рабочего решения не нашел. Спасибо.
27. Obertone 74 12.04.22 14:22 Сейчас в теме
По программному открытию внешней обработки и внешнего отчёта есть универсальное решение на основе метода БСП:

Как программно открыть внешний отчет из "Дополнительных отчетов и обработок" и передать параметры (при помощи БСП)
32. serko8547 110 13.10.23 16:50 Сейчас в теме
Сделал рабочий код с текущим вариантом отчета:
Проверял работу на УТ 11.4
//Данные не передавал, стояла задача просто открыть отчет с текущим вариантом отчета.


&НаКлиенте
Процедура НеотгруженныеОрдера(Команда)
	 КомандаОткрытьВнешнийОтчет("\\192.168.0.3\Отчеты\Другие отчеты\НеотгруженныеОрдера.erf");
КонецПроцедуры


&НаКлиенте
Процедура КомандаОткрытьВнешнийОтчет(Путь)

ОписаниеОповещения = Новый ОписаниеОповещения("ПоместитьФайлВХранилищеЗавершениеОтчет", ЭтотОбъект);
НачатьПомещениеФайла(ОписаниеОповещения, , Путь, Ложь);
КонецПроцедуры

&НаКлиенте
Процедура ПоместитьФайлВХранилищеЗавершениеОтчет(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт 
    
РезЗапроса = ПодключитьВнешнийОтчетНаСервереОтчет(Адрес);  
ИмяОтчета = РезЗапроса.ИмяОтчета;
КлючВарианта = РезЗапроса.ВариантОтчета;
ПараметрыОткрытия = Новый Структура("КлючВарианта", КлючВарианта);
Уникальность ="ВнешнийОтчет." + ИмяОтчета;
ОткрытьФорму("ВнешнийОтчет." + ИмяОтчета + ".Форма", ПараметрыОткрытия, Неопределено, Уникальность)

КонецПроцедуры

&НаСервере
Функция ПодключитьВнешнийОтчетНаСервереОтчет(АдресХранилища)

    результат = Новый Структура;
    ИмяОтчета = ВнешниеОтчеты.Подключить(АдресХранилища); 
    ВариантыОтчета =  ХранилищеВариантовОтчетов.ПолучитьСписок("Отчет."+ИмяОтчета); 
    КлючОбъекта = "ВнешнийОтчет."+ИмяОтчета+"/КлючТекущегоВарианта";
    ВариантОтчета = ОбщегоНазначения.ХранилищеСистемныхНастроекЗагрузить(КлючОбъекта, "");
    Мт = ВариантыОтчета.НайтиПоЗначению(ВариантОтчета);
    Если МТ <> Неопределено Тогда
        ВариантОтчета = МТ.Представление;
    КонецЕсли;
    результат.Вставить("ИмяОтчета",ИмяОтчета);
    результат.Вставить("ВариантОтчета",ВариантОтчета);
    
    Возврат Результат;     
КонецФункции    

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

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