Программно получить текущий вариант отчета СКД

1. user771753 19.02.18 10:18 Сейчас в теме
Всем привет!

Пользователь запускает отчет. жмет "Сформировать", после чего мне нужно получить программно его текущий вариант отчета, где(в модуле объекта, на форме отчета) и как можно это сделать?
По теме из базы знаний
Найденные решения
3. user771753 19.02.18 10:35 Сейчас в теме
(2)

Да. вот так получилось:

если НастройкиОтчета.ДополнительныеСвойства.ВариантНаименование = "Основной" тогда
        НовыйЭлементОтбора = НастройкиОтчета.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ПолеОтбора = Новый ПолеКомпоновкиДанных("МенеджерДокумента");
        НовыйЭлементОтбора.ЛевоеЗначение = ПолеОтбора;
        НовыйЭлементОтбора.Использование = Истина;
        НовыйЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        НовыйЭлементОтбора.ПравоеЗначение = Справочники.Пользователи.НайтиПоНаименованию("Мой пользователь");
    конецесли;
begemot; MikeI; Gulnaz-Lady; user705522_constantin_h; +4 Ответить
2. kuzev 47 19.02.18 10:31 Сейчас в теме
(1) посмотрите в справке про КлючТекущегоВарианта.
Andrei_Ivanov; user705522_constantin_h; user771753; +3 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. kuzev 47 19.02.18 10:31 Сейчас в теме
(1) посмотрите в справке про КлючТекущегоВарианта.
Andrei_Ivanov; user705522_constantin_h; user771753; +3 Ответить
3. user771753 19.02.18 10:35 Сейчас в теме
(2)

Да. вот так получилось:

если НастройкиОтчета.ДополнительныеСвойства.ВариантНаименование = "Основной" тогда
        НовыйЭлементОтбора = НастройкиОтчета.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ПолеОтбора = Новый ПолеКомпоновкиДанных("МенеджерДокумента");
        НовыйЭлементОтбора.ЛевоеЗначение = ПолеОтбора;
        НовыйЭлементОтбора.Использование = Истина;
        НовыйЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        НовыйЭлементОтбора.ПравоеЗначение = Справочники.Пользователи.НайтиПоНаименованию("Мой пользователь");
    конецесли;
begemot; MikeI; Gulnaz-Lady; user705522_constantin_h; +4 Ответить
4. kuzev 47 19.02.18 10:36 Сейчас в теме
(1) можете событие формы отчета посмотреть:
&НаСервере
Процедура ПриОбновленииСоставаПользовательскихНастроекНаСервере(СтандартнаяОбработка)
	
	Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("КлючВарианта", ЭтотОбъект.КлючТекущегоВарианта);

КонецПроцедуры
begemot; Acort; ReDvAlL; +3 Ответить
5. user1114234 21.05.20 16:32 Сейчас в теме
У меня в НастройкиОтчета.ДополнительныеСвойства вообще пусто. Пусто до окончания процедуры ПриКомпоновкеРезультата. А вариантов на самом деле два.
6. user1114234 21.05.20 16:58 Сейчас в теме
Додумался сам. Создаём у отчета реквизит КлючТекущегоВарианта. В событии формы ПриОбновленииСоставаПользовательскихНастроекНаСервере записываем в реквизит этот ключ
Отчет.КлючТекущегоВарианта = КлючТекущегоВарианта;
И уже в ПриКомпоновкеРезультата можно сделать проверку на КлючТекущегоВарианта.
Legin; user1050439; YulaySuyundukov; ReDvAlL; +4 Ответить
7. MaCCapAkIII 12.10.22 17:07 Сейчас в теме
(6) А если у отчета нет формы? Каким образом тогда достать вариант отчета? КлючТекущегоВарианта недоступен в ПриКомпоновкеРезультата.
8. SlavaKron 12.10.22 17:37 Сейчас в теме
(7) Если конфигурация на БСП, то в модуле объекта отчета
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
	
КонецПроцедуры
9. MaCCapAkIII 12.10.22 18:07 Сейчас в теме
(8) Конфигурация на БСП. Добавил эту процедуру в модуль объекта отчета, но останова в ней нет ни при формировании, ни при открытии формы отчета.
10. SlavaKron 12.10.22 19:04 Сейчас в теме
(9) Либо версия БСП сильно старая, либо отладка не работает.
11. MaCCapAkIII 13.10.22 09:07 Сейчас в теме
(10) 2.2.2.37. Только если я просто добавил эту функцию в модуль отчета - откуда она должна вызываться? И параметры брать. Поэтому, скорее всего, отладчик туда и не заходит.
12. SlavaKron 13.10.22 09:26 Сейчас в теме
(11)
2.2.2.37.
Видимо, действительно версия старая. Процедуру вызывает сама подсистема отчетов при открытии отчета и перед его выполнением. Также есть возможность "подписаться" на некоторые события типовой Формы отчета.
Прикрепленные файлы:
13. serko8547 110 13.10.23 16:46 Сейчас в теме
В общем, обобщая всё, сделал рабочий код, открывается с сохраненными вариантами настроек

&НаКлиенте
// Путь = "D:\ВашОтчет.erf"
Процедура КомандаОткрытьВнешнийОтчет(Путь)

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

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

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

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

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

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


Показать
Оставьте свое сообщение

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