1C: Выбор из нескольких вариантов макета отчета СКД
Задача: в зависимости от внешних условий, выводить тот или иной вариант отчёта СКД.
Решение:
Добавим в отчёт два макета СКД:
Далее, в зависимости от нажатой кнопки, формируем разные данные:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
&НаСервере Процедура РукамиНаСервере(ТаблДок,мак) ОбъектОтчетНаСервере = РеквизитФормыВЗначение("Отчет"); СхемаСКД = ОбъектОтчетНаСервере.ПолучитьМакет(мак); // с парамертрами по умолчанию //КомпоновщикНастроекДанныхОтчета = Новый КомпоновщикНастроекКомпоновкиДанных; //КомпоновщикНастроекДанныхОтчета.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаСКД)); //КомпоновщикНастроекДанныхОтчета.ЗагрузитьНастройки(СхемаСКД.НастройкиПоУмолчанию); //КомпоновщикНастроекДанныхОтчета.ЗагрузитьПользовательскиеНастройки(Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); //КомпоновщикМакетаОСКД = Новый КомпоновщикМакетаКомпоновкиДанных; //Макет = КомпоновщикМакетаОСКД.Выполнить(СхемаСКД, КомпоновщикНастроекДанныхОтчета.ПолучитьНастройки()); // задаем сами НастройкиСхемыОСКД = СхемаСКД.НастройкиПоУмолчанию; ПараметрыДанныхОСКД = НастройкиСхемыОСКД.ПараметрыДанных.Элементы; ЭлементНачалоПериода = ПараметрыДанныхОСКД.Найти("Период"); ЭлементНачалоПериода.Использование = Истина; ДатаНачала = ФильтрПериод.ДатаНачала; ДатаОкончания = ФильтрПериод.ДатаОкончания; ЭлементНачалоПериода.Значение.ДатаНачала = НачалоМесяца(ДатаНачала); ЭлементНачалоПериода.Значение.ДатаОкончания = КонецМесяца(ДатаОкончания); ЭлементНачалоПериода = ПараметрыДанныхОСКД.Найти("СетеваяОрганизация"); ЭлементНачалоПериода.Использование = Истина; ЭлементНачалоПериода.Значение=отчет.Сетевая; ЭлементНачалоПериода = ПараметрыДанныхОСКД.Найти("Фильтр"); ЭлементНачалоПериода.Использование = Истина; ЭлементНачалоПериода.Значение=отчет.Фильтр; КомпоновщикМакетаОСКД = Новый КомпоновщикМакетаКомпоновкиДанных; Макет = КомпоновщикМакетаОСКД.Выполнить(СхемаСКД, НастройкиСхемыОСКД); Фильтр=отчет.Фильтр; ПроцессорКомпоновкиОСКД = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиОСКД.Инициализировать(Макет); ТаблДок.Очистить(); ПроцессорВыводаОСКД = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВыводаОСКД.УстановитьДокумент(ТаблДок); ПроцессорВыводаОСКД.Вывести(ПроцессорКомпоновкиОСКД); ПроцессорВыводаОСКД.ЗакончитьВывод(); КонецПроцедуры &НаКлиенте Процедура ОтчетПоЕМК(Команда) РукамиНаСервере(Результат,"ОсновнаяСхемаКомпоновкиДанных"); Элементы.Результат.ОтображениеСостояния.Видимость = Ложь; Элементы.Результат.ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать; КонецПроцедуры &НаКлиенте Процедура ОтчетПоЛС(Команда) РукамиНаСервере(Результат,"ОсновнаяСхемаКомпоновкиДанных1"); Элементы.Результат.ОтображениеСостояния.Видимость = Ложь; Элементы.Результат.ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать; КонецПроцедуры |