Две схемы СКД в одном отчете с пользовательскими параметрами






Простая реализация разных по типу отчетов в одном.
Применение нескольких схем компоновки с корректной передачей пользовательских параметров.

В инете множество примеров отчетов на нескольких схемах компоновки. Но не встречал вариантов с работающими пользовательскими параметрами, т.к. для корректной работы схем в компоновщик загружаются настройки по умолчанию. При загрузке в компоновщик настроек по умолчанию загружаются также и параметры по умолчанию, что не дает возможности указать их в пользовательских настройках(указанные параметры будут скидываться на параметры по умолчанию).

Суть идеи в том, чтобы загружать настройки по умолчанию только при выборе другой схемы.

Пример реализации ниже:

Создаем два реквизита(булево). Реквизит Изменение выносим на форму — для смены Схемы компоновки. 

Соответственно создаем два макета, например я использовал в тестовой конфе следующие:

 

Код модуля формы:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   
Отчет.ПроверкаНаИзменение = Ложь;
КонецПроцедуры

&НаКлиенте
Процедура ИзменениеПриИзменении(Элемент)
   
Отчет.ПроверкаНаИзменение = Истина;
КонецПроцедуры

 

Код модуля объекта отчета:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;
    Если
Изменение Тогда
       
СхемаКомпоновкиДанных = ПолучитьМакет("Макет");
    Иначе
       
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    КонецЕсли;

    // Загружаем настройки по умолчанию, только если изменили Схему компоновки
   
Если ПроверкаНаИзменение Тогда
       
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    КонецЕсли;

    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
   
ПроверкаНаИзменение = Ложь;

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
   
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
   
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
   
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
   
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
   
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

КонецПроцедуры

Т.е. в процедуре ПриКомпоновкеРезультата() выбираем макет компоновки (если на форме установлена галка в реквизите Изменение, то выбирается схема компоновки Макет, иначе Основная схема).

В модуле формы пишем в реквизит ПроверкаНаИзменение, когда соответственно изменяем галку на форме. При каждом формировании отчета сбрасываем это значение в ложь, чтобы загружать настройки СКД по умолчанию только когда меняется схема. 

Результат: работающие пользовательские параметры при смене схемы компоновки

 

Заранее извините, если баян, велосипед и т.п., 🙂

6 Comments

  1. Zircool

    Для подобной задачи используют вложенные схемы https://its.1c.ru/db/pubcomplexreports#content:59:hdoc:h56

    Reply
  2. leosoft

    Не пойму — при смене схемы надо автоматом изменить состав пользовательских настроек еще до

    формирования отчета. Как Вы это делаете? И еще вопрос — насколько корректно в хранилище

    запоминаются текущие настройки?

    Reply
  3. evgeni-red

    (1)Согласен, но в предложенном варианте достаточно просто добавить существующие схемы СКД.

    Reply
  4. evgeni-red

    Напишите ваше сообщение

    (2) При смене схемы формируется отчет на новой схеме с параметрами по умолчанию. При следующем формировании отчет сформируется с указанными параметрами. Тек настройки не запоминаются — мы же все время со сменой схемы грузим настройки по умолчанию

    Reply
  5. leosoft

    (4) Грузите когда? В момент формирования отчета, а не в момент смены схемы?

    Reply
  6. evgeni-red

    (5)

    Настройки по умолчанию грузим в этой строчке, в момент формирования отчета — но только если изменилась схема 🙂

    КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *