Имя: Пароль:
1C
1С v8
Как при программной компоновке СКД выводить выбранный пользователем вариант отчета?
0 Aswed
 
09.12.22
11:12
Есть отчёт который в зависимости от выбранной настройки выводит либо одну либо другую схему компановки данных.

В одной из схем есть три варианта отчета.
Где и как при программной компановке указать какой из вариантов выводить?

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    ДокументРезультат.Очистить();
        
    ВнешниеНаборыДанных = Новый Структура;
    ВнешниеНаборыДанных.Вставить("ТаблицаОстатков", ?(ЭтотОбъект.РежимОтчета = "Остатки", ПолучитьТаблицуОстатков(), ПолучитьТаблицуВзаиморасчетов())); // подготавливаем структуру с готовой таблицей
    
    Если ЭтотОбъект.РежимОтчета = "Остатки" Тогда
        Схема = ЭтотОбъект.ПолучитьМакет("СхемаКомпоновкиДанныхОстатки");
    Иначе
        Схема = ЭтотОбъект.ПолучитьМакет("СхемаКомпоновкиДанныхВзаиморасчеты")
    КонецЕсли;
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпановки = КомпоновщикМакета.Выполнить(Схема, Схема.НастройкиПоУмолчанию, ДанныеРасшифровки);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпановки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина); // вот тут происходит "соединение" таблицы с СКД грубо говоря строится отчет в соответствии с макетом компановки
    
    //Вывод результата
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    
    ПроцессорВывода.НачатьВывод();
    ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
    ПроцессорВывода.ЗакончитьВывод();
            
КонецПроцедуры
1 Kassern
 
09.12.22
11:14
(0) Скорее всего нужно получить из хранилища настройки этого варианта отчета и загрузить их в макет компоновки
2 Aswed
 
09.12.22
11:19
(1) В макете компановки есть все эти варианты. Но он берёт всё время тот что был сделан первым.
3 Kassern
 
09.12.22
11:21
(2) В Схеме поищите в отладке, скорее всего Схема.НастройкиПоУмолчанию - тянет первый вариант.
4 SleepyHead
 
гуру
09.12.22
11:37
мКлючВарианта = "идентификатор вараинта отчета, как он задан в схеме";
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.ВариантыНастроек[мКлючВарианта].Настройки);
5 Aswed
 
09.12.22
11:49
(4) А можно больший кусок кода? Что то не поймаю в какой момент в компановщик закидывать выбранный вариант
6 ass1c
 
09.12.22
11:50
(0) Видел в конфе у себя какие то старые решения (доработки) по работе с вариантами отчетов СКД программно. Вроде как даже работает:

    ВариантОтчета = ВариантыОтчетов.ВариантОтчета(Справочники.ИдентификаторыОбъектовМетаданных.НайтиПоРеквизиту("Имя", "ВедомостьПоТоварамНаСкладах"), "06f7644a-4bb6-4d4d-9eb4-a60865224151");
    
    ПараметрыИдентификации = Новый Структура;
    ПараметрыИдентификации.Вставить("СсылкаВарианта"        , ВариантОтчета);
    ПараметрыИдентификации.Вставить("СсылкаОтчета"          , Справочники.ИдентификаторыОбъектовМетаданных.НайтиПоРеквизиту("Имя", "ВедомостьПоТоварамНаСкладах"));
    ПараметрыИдентификации.Вставить("КлючВарианта"          , "06f7644a-4bb6-4d4d-9eb4-a60865224151");
    ПараметрыИдентификации.Вставить("ИдентификаторФормы" , Неопределено);
    
    ПараметрыОтчета = ВариантыОтчетов.ПодключитьОтчетИЗагрузитьНастройки(ПараметрыИдентификации);
    
    //*СхемаКомпоновкиДанных
    СхемаКомпоновкиДанных = ПараметрыОтчета.Объект.СхемаКомпоновкиДанных;
    
    //*НастройкиКомпоновкиДанных
    НастройкиКД           = ПараметрыОтчета.НастройкиКД;
    
    //*КомпоновщикНастроек
    КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных();
    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
    //КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКД);
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки   = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКД , , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);
    
    ТабРезультат = Новый ТаблицаЗначений;
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ПроцессорВывода.УстановитьОбъект(ТабРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);