УТ Формирую отчет программно, как загрузить настройки из созданного варианта

1. vladnet 363 11.08.20 16:51 Сейчас в теме
Всем привет!

Есть код:

ОбъектОтчетНаСервере = Отчеты.ВыручкаИСебестоимостьПродаж.Создать();
ТаблДокумент=Новый ТабличныйДокумент;
ОбъектОтчетНаСервере.СкомпоноватьРезультат(ТаблДокумент);


Нужно в него добавить загрузку созданного в пользовательском режиме варианта отчета.
Подскажите пожалуйста как это можно сделать. Спасибо!
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
7. dandykry 9 12.08.20 07:18 Сейчас в теме +1 $m
(1) Если вариант отчета предопределенный (зашит в скд) то

НастройкиОтчета = СхемаКомпоновкиДанных.ВариантыНастроек.ИмяВарианта.Настройки;

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);


Если вариант отчета пользовательский, то тут от конфигурации зависит

Например в БСП ВариантыОтчетов.КлючиВариантовОтчета - выдаст все варианты
ВариантыОтчетов.ПользовательскиеВариантыОтчетов - выдаст не все варианты))

ВариантыОтчетов.ПодключитьОтчетИЗагрузитьНастройки - в итоге структура в котором есть ОтчетОбъект
KamranV21; ejijoka; user823999; +3 Ответить
9. NorraSaltolinen 12.08.20 09:38 Сейчас в теме +1 $m
(3)
ВариантОтчета = ВариантыОтчетов.ВариантОтчета(ОтчетСсылка, КлючВарианта); 
	ОтчетИнформация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(ОтчетСсылка.ПолноеИмя);
ПараметрыОтчета = Новый Структура("Отчет, Настройки", ВариантОтчета, Неопределено);
РассылкаОтчетов.ИнициализироватьОтчет(ПараметрыЖурнала, ПараметрыОтчета, Ложь, Новый УникальныйИдентификатор());

ну и далее по логике можно в тех же ОМ посмотреть как происходит формирование и тд
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. dandykry 9 12.08.20 07:18 Сейчас в теме +1 $m
(1) Если вариант отчета предопределенный (зашит в скд) то

НастройкиОтчета = СхемаКомпоновкиДанных.ВариантыНастроек.ИмяВарианта.Настройки;

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);


Если вариант отчета пользовательский, то тут от конфигурации зависит

Например в БСП ВариантыОтчетов.КлючиВариантовОтчета - выдаст все варианты
ВариантыОтчетов.ПользовательскиеВариантыОтчетов - выдаст не все варианты))

ВариантыОтчетов.ПодключитьОтчетИЗагрузитьНастройки - в итоге структура в котором есть ОтчетОбъект
KamranV21; ejijoka; user823999; +3 Ответить
11. vladnet 363 12.08.20 10:40 Сейчас в теме
(7) Да это то что нужно.

для стандартных вариантов, все отлично работает:

лНастройки=ОбъектОтчетНаСервере.СхемаКомпоновкиДанных.ВариантыНастроек.ДинамикаПродаж.Настройки;
	ОбъектОтчетНаСервере.КомпоновщикНастроек.ЗагрузитьНастройки(лНастройки);

а вот с пользовательскими вариантами не разберусь

лИмяОтчета=ОбъектОтчетНаСервере.Метаданные().ПолноеИмя();
лСпВарианты=ВариантыОтчетов.КлючиВариантовОтчета(лИмяОтчета);

в списке ГУИД и представление, как после этого загрузить вариант не понятно. Лучше бы как то добраться до настроек пользовательского варианта.

Подскажите пожалуйста что дальше делать с этим ГУИД?
13. vladnet 363 12.08.20 11:10 Сейчас в теме
(11) Решение найдено, написано ниже
14. dandykry 9 12.08.20 11:13 Сейчас в теме
(11)

Вам дали ответ ниже. Если не хотите привязываться к рассылке отчетов, а сделать функциями подсистемы библиотеки, то

ПараметрыОтчета = Новый Структура("СсылкаВарианта, СсылкаОтчета, КлючВарианта, ИдентификаторФормы", СсылкаВарианта, СсылкаОтчета, "", Неопределено);

//   Параметры - Структура - Параметры подключения и формирования отчета.
//       * СсылкаВарианта - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета.
//       * СсылкаОтчета   - Произвольный - Ссылка отчета.
//       * КлючВарианта   - Строка - Имя предопределенного или идентификатор пользовательского варианта отчета.
//       * ИдентификаторФормы - Неопределено, УникальныйИдентификатор - Идентификатор формы, из которой подключается отчет.


СтруктураДанных = ВариантыОтчетов.ПодключитьОтчетИЗагрузитьНастройки(ПараметрыОтчета ); 
КД = СтруктураДанных.Объект.КомпоновщикНастроек;
Показать
15. vladnet 363 12.08.20 12:01 Сейчас в теме
(14) Да я потом посмотрел и нашел, только чуть по другому сделал. Спасибо еще раз!
16. VID1234 110 11.02.22 11:54 Сейчас в теме
(7)Здравствуйте. Подскажите пожалуйста, почему выходит ошибка?
ВнешнееСоединение = ПодключитьВнешнийИсточник("Srvr=""buh"";Ref=""zup_test"";Usr=""Администратор"";Pwd=""11111"";");
	СхемаКомпоновкиДанных2 = ВнешнееСоединение.Отчеты.АнализНачисленийИУдержаний.GetTemplate("ОсновнаяСхемаКомпоновкиДанных");
	ВариантОтчета = СхемаКомпоновкиДанных2.ВариантыНастроек.ЗПВыплачено.Настройки;
КомпоновщикНастроекНастройки = ВнешнееСоединение.NewObject("КомпоновщикНастроекКомпоновкиДанных");
    ИсточникДоступныхНастроекКомпоновкиДанных =  ВнешнееСоединение.NewObject("ИсточникДоступныхНастроекКомпоновкиДанных",СхемаКомпоновкиДанных2);
    КомпоновщикНастроекНастройки.Инициализировать(ИсточникДоступныхНастроекКомпоновкиДанных);
    КомпоновщикНастроекНастройки.ЗагрузитьНастройки(ВариантОтчета);    
       Настройки = КомпоновщикНастроек.ПолучитьНастройки();
       ПараметрПериод = Настройки.ПараметрыДанных.Элементы.Найти("Период");
       Период = ПараметрПериод.Значение;
КомпоновщикНастроекНастройки.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Период", Период);
    КомпоновщикМакета = ВнешнееСоединение.NewObject("КомпоновщикМакетаКомпоновкиДанных");
    МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных2, КомпоновщикНастроекНастройки.Настройки,,,ВнешнееСоединение.NewObject("ОписаниеТипов", "ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений").Типы().Получить(0));
    ПроцессорКомпоновкиДанных = ВнешнееСоединение.NewObject("ПроцессорКомпоновкиДанных");
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
    
    ПроцессорВывода = ВнешнееСоединение.NewObject("ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений­");
    
    ДанныеТЗ = ВнешнееСоединение.NewObject("ТаблицаЗначений");
Показать


Но при выводе "ПроцессорВывода" у меня ошибка: "Произошла исключительная ситуация(платформа): Ошибка компоновки данных, ошибка инициализации, ошибка создания набора данных "НачисленияУдержанияДрокумента" Не найден внешний набор данных "НачислениеУдержанияДокумента"
17. dandykry 9 13.02.22 19:47 Сейчас в теме
(16) откуда я знаю, какие "Дрокументы" там у вас. Запустите отладку второй базы, к которой подключаетесь, ловите внешнее соединение в ПриКомпановке, и смотри какие там наборы данных. Может прав нет у пользователя, может еще что. Подозреваю, что это ЗУП, а это значит отчет на половину кодом в общих модулях собирается, а это значит, что возможно какой-то модуль недоступен через внешнее соединение.
18. VID1234 110 14.02.22 10:34 Сейчас в теме
(17)Так и есть (ЗУП и собирается в общем модуле), в том то и дело, не могу понять как его сформировать тогда!
19. dandykry 9 14.02.22 13:37 Сейчас в теме
(18) логичный ответ звучит - как-то иначе чем сейчас)

например сформируйте через веб сервис
8. Kovekh 12.08.20 07:30 Сейчас в теме
(1)Была подобная задача.

Для этого вынес компоновщик настроек в реквизиты формы, на саму форму пользовательские настройки из этого компоновщика.
Для сохранения настроек перед закрытием делаю:
	Если НЕ ЗавершениеРаботы Тогда

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


	КонецЕсли;
Показать
- это на сервере всё.


Потом при создании на сервере подгружаю эти настройки:

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


Но у вас последнее будет не при создании на сервере а при компоновке результата скорее
10. vladnet 363 12.08.20 10:37 Сейчас в теме
(8) Это придется каждый отчет корячить не подходит.
2. NorraSaltolinen 11.08.20 17:28 Сейчас в теме
посмотрите как реализовано в ОМ РассылкаОтчетов:
РассылкаОтчетов.ИнициализироватьОтчет() и так далее.
3. vladnet 363 11.08.20 18:43 Сейчас в теме
(2) Модуль Рассылка отчетов нашел, справочник Рассылку отчетов тоже, но вот где там есть варианты отчетов не вижу. Не понял как там настраивается вариант. Можете подсказать?

В этом основной вопрос. Сами настройки я сам могу с легкостью изменить, тут самое главное воспользоваться теми настройками которые пользователь может сохранить в вариант.
9. NorraSaltolinen 12.08.20 09:38 Сейчас в теме +1 $m
(3)
ВариантОтчета = ВариантыОтчетов.ВариантОтчета(ОтчетСсылка, КлючВарианта); 
	ОтчетИнформация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(ОтчетСсылка.ПолноеИмя);
ПараметрыОтчета = Новый Структура("Отчет, Настройки", ВариантОтчета, Неопределено);
РассылкаОтчетов.ИнициализироватьОтчет(ПараметрыЖурнала, ПараметрыОтчета, Ложь, Новый УникальныйИдентификатор());

ну и далее по логике можно в тех же ОМ посмотреть как происходит формирование и тд
12. vladnet 363 12.08.20 11:08 Сейчас в теме
(9) А ведь помогло) к 7 ответу

	лИмяОтчета=ОбъектОтчетНаСервере.Метаданные().ПолноеИмя();
	лСпВариантыПользовательские=ВариантыОтчетов.КлючиВариантовОтчета(лИмяОтчета);

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


И соответственно вышел на пункт НастройкиКД
Спасибо
legenda-nsh; NorraSaltolinen; +2 Ответить
4. tango 540 11.08.20 23:33 Сейчас в теме
где-то здесь
-----
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСхемы);
КомпоновщикНастроекРеквизитФормы.Инициализировать(ИсточникНастроек);
5. tango 540 11.08.20 23:34 Сейчас в теме
(4)
URLСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, Новый УникальныйИдентификатор());
6. vladnet 363 12.08.20 00:45 Сейчас в теме
(5) Не пойму как это связано с вариантами ( нужно именно вариант отчета загрузить.

Вообще в справке есть такая функция: УстановитьТекущийВариант(<КлючВарианта>)
Но она применяется к форме отчета, мне открывать форму нельзя, так как все должно произойти на сервере.
Оставьте свое сообщение

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