Применение нескольких схем компоновки с корректной передачей пользовательских параметров.
В инете множество примеров отчетов на нескольких схемах компоновки. Но не встречал вариантов с работающими пользовательскими параметрами, т.к. для корректной работы схем в компоновщик загружаются настройки по умолчанию. При загрузке в компоновщик настроек по умолчанию загружаются также и параметры по умолчанию, что не дает возможности указать их в пользовательских настройках(указанные параметры будут скидываться на параметры по умолчанию).
Суть идеи в том, чтобы загружать настройки по умолчанию только при выборе другой схемы.
Пример реализации ниже:
Создаем два реквизита(булево). Реквизит Изменение выносим на форму — для смены Схемы компоновки.
Соответственно создаем два макета, например я использовал в тестовой конфе следующие:
Код модуля формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Отчет.ПроверкаНаИзменение = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ИзменениеПриИзменении(Элемент)
Отчет.ПроверкаНаИзменение = Истина;
КонецПроцедуры
Код модуля объекта отчета:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Изменение Тогда
СхемаКомпоновкиДанных = ПолучитьМакет("Макет");
Иначе
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
КонецЕсли;
// Загружаем настройки по умолчанию, только если изменили Схему компоновки
Если ПроверкаНаИзменение Тогда
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
КонецЕсли;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
ПроверкаНаИзменение = Ложь;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Т.е. в процедуре ПриКомпоновкеРезультата() выбираем макет компоновки (если на форме установлена галка в реквизите Изменение, то выбирается схема компоновки Макет, иначе Основная схема).
В модуле формы пишем в реквизит ПроверкаНаИзменение, когда соответственно изменяем галку на форме. При каждом формировании отчета сбрасываем это значение в ложь, чтобы загружать настройки СКД по умолчанию только когда меняется схема.
Результат: работающие пользовательские параметры при смене схемы компоновки
Заранее извините, если баян, велосипед и т.п., 🙂
Для подобной задачи используют вложенные схемыhttps://its.1c.ru/db/pubcomplexreports#content:59:hdoc:h56
Не пойму — при смене схемы надо автоматом изменить состав пользовательских настроек еще до
формирования отчета. Как Вы это делаете? И еще вопрос — насколько корректно в хранилище
запоминаются текущие настройки?
(1)Согласен, но в предложенном варианте достаточно просто добавить существующие схемы СКД.
Напишите ваше сообщение
(2) При смене схемы формируется отчет на новой схеме с параметрами по умолчанию. При следующем формировании отчет сформируется с указанными параметрами. Тек настройки не запоминаются — мы же все время со сменой схемы грузим настройки по умолчанию
(4) Грузите когда? В момент формирования отчета, а не в момент смены схемы?
(5)
Настройки по умолчанию грузим в этой строчке, в момент формирования отчета — но только если изменилась схема 🙂
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);