Имя: Пароль:
1C
 
Как в УФ изменить СхемуКомпоновкиДанных в отчете
0 ИС-2
 
naïve
14.01.19
09:01
есть отчет в который можно выполнить любую СКД. В обычных формах все просто и работает.
В УФ не понимаю, почему не доступны настройки  компоновки данных и не видит подменную СКД

в событии приСозданииНаСервере есть код. Он нормально получает СКД из врем. хранилища, но как заменить макет по умолчанию.

Аналогичный код есть в Универсальном отчете, но не понимаю почему не работает

ОтчетОбъект = ДанныеФормыВЗначение(Отчет,Тип("ОтчетОбъект"));
ОтчетОбъект.СхемаКомпоновкиДанных = ПолучитьИзВременногоХранилища(Параметры.АдресСхемы);
ЗначениеВДанныеФормы(ОтчетОбъект,Отчет);
Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Параметры.АдресСхемы));
1 ИС-2
 
naïve
14.01.19
16:40
ап
2 aleks_default
 
14.01.19
16:43
было такое недавно, там косяк с помещением во вр. хранилище
3 aleks_default
 
14.01.19
16:51
Вспомнил, косяк был с тем что в источник доступных настроек надо сувать не схему, полученую из хранилища, а имено url адрес хранилища где лежит схема. Иначе почему-то не работает.
4 aleks_default
 
14.01.19
16:52
А про настройки, надо их дополнительно догрузить типа так

Объект.КомпоновщикНастроекОтчета.ЗагрузитьНастройки(СхемаОтчета.НастройкиПоУмолчанию);
    Объект.КомпоновщикНастроекОтчета.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность);
5 Вафель
 
14.01.19
17:16
схему нельзя подменить, но можно переинициализировать компоновщик
6 ИС-2
 
naïve
14.01.19
17:23
(4) да, передаю адрес. Попробую в модуле объекта переинициализировать, только как туда передать через Метод ОткрытьФорму URL адреса временного хранилища (вед дополнительных свойств нет)?
7 ИС-2
 
naïve
14.01.19
17:40
фактически надо подобный код преврать в код для УФ
НоваяСКД = Отчеты.ABCАнализПокупателей.Создать().СхемаКомпоновкиДанных;

ОтчетРасшифровка = Отчеты.УниверсальныйОтчет.Создать();

// тут не понимаю как заполнить в отчетеобъекте СхемаКомпоновкиДанных

ОтчетРасшифровка.СхемаКомпоновкиДанных = НоваяСКД;
ОтчетРасшифровка.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ОтчетРасшифровка.СхемаКомпоновкиДанных));
ОтчетРасшифровка.ПолучитьФорму().Открыть();
8 aleks_default
 
14.01.19
17:51
По моему надо что-то типа такого
ФормаОтчета = ОтчетРасшифровка.ПолучитьФорму();
ФормаОтчета.Объект.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
ФормаОтчета.Объект.КомпоновщикНастроек.ЗагрузитьНастройки(настройки);
ФормаОтчета.Объект.КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность);
ФормаОтчета.Открыть();
9 Numerus Mikhail
 
14.01.19
17:53
СхемаВХ = ПоместитьВоВременноеХранилище(СхемаМакет, ГУИД_Формы);

КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаВХ));
ВариантСхемы = СхемаМакет.ВариантыНастроек[Число(Сред(ИмяКоманды,2,1))]; //тут номер варианта вычисляется, он у меня зашит в названии команды
КомпоновщикНастроек.ЗагрузитьНастройки(ВариантСхемы.Настройки); //обрезаем второй символ, т.к. это и есть индекс настройки

вытащил из рабочего
10 тарам пам пам
 
15.01.19
09:10
(0) Если компоновщик не видит схемы, значит данные по переданному адресу врем хранилища уже были удалены. Проверь, как ты помещаешь во врем. хранилище схему - нужно это хранилище привязать к открываемой форме.
Как костыль в лоб можно попробовать так:


ОтчетОбъект = ДанныеФормыВЗначение(Отчет,Тип("ОтчетОбъект"));
ОтчетОбъект.СхемаКомпоновкиДанных = ПолучитьИзВременногоХранилища(Параметры.АдресСхемы);
ЗначениеВДанныеФормы(ОтчетОбъект,Отчет);

АдресСхемыНовый = ПоместитьВоВременноеХранилище(ОтчетОбъект.СхемаКомпоновкиДанных, УникальныйИдентификатор);

Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыНовый));
11 ИС-2
 
naïve
22.01.19
15:41
(10) но как теперь открыть общую форму отчета с  ОтчетОбъект ?