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

1. vladnet 361 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 361 12.08.20 10:40 Сейчас в теме
(7) Да это то что нужно.

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

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

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

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

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

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

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

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

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


СтруктураДанных = ВариантыОтчетов.ПодключитьОтчетИЗагрузитьНастройки(ПараметрыОтчета ); 
КД = СтруктураДанных.Объект.КомпоновщикНастроек;
Показать
15. vladnet 361 12.08.20 12:01 Сейчас в теме
(14) Да я потом посмотрел и нашел, только чуть по другому сделал. Спасибо еще раз!
16. VID1234 108 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 108 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 361 12.08.20 10:37 Сейчас в теме
(8) Это придется каждый отчет корячить не подходит.
2. NorraSaltolinen 11.08.20 17:28 Сейчас в теме
посмотрите как реализовано в ОМ РассылкаОтчетов:
РассылкаОтчетов.ИнициализироватьОтчет() и так далее.
3. vladnet 361 11.08.20 18:43 Сейчас в теме
(2) Модуль Рассылка отчетов нашел, справочник Рассылку отчетов тоже, но вот где там есть варианты отчетов не вижу. Не понял как там настраивается вариант. Можете подсказать?

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

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

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

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


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

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

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)