Использование нескольких схем компоновки данных в одном отчете
Одному отчету может принадлежать несколько схем компоновки данных. Но по какой из них тогда он будет формироваться?
Имеем отчет по продажам:
Добавим в него еще один макет с типом Схема компоновки данных. В схеме опишем какой-нибудь произвольный набор данных и настройки. Ну допустим получение остатка на складах.
Откроем отчет в предприятии и сформируем. Что мы видим? Что отчет сформировался по основной схеме компоновки данных. Как же сделать чтобы отчет формировался по Схеме_2.
Откроем основную форму отчета и добавим кнопку Переключить схему.
Для данной кнопки напишем следующую процедуру-обработчик:
Список = Новый СписокЗначений; Список.Добавить("ОсновнаяСхемаКомпоновкиДанных", "Продажи"); Список.Добавить("Схема_2", "Остатки"); ВыбЭлемент = Список.ВыбратьЭлемент(); Если ВыбЭлемент <> Неопределено Тогда СхемаКомпоновкиДанных = ПолучитьМакет(ВыбЭлемент.Значение); КонецЕсли; //Из схемы возьмем настройки по умолчанию Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; //Помещаем в переменную данные о расшифровке данных ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; //Формируем макет, с помощью компоновщика макета КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; //Передаем в макет компоновки схему, настройки и данные расшифровки МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); //Выполним компоновку с помощью процессора компоновки ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки); //Очищаем поле табличного документа Результат = ЭлементыФормы.Результат; Результат.Очистить(); //Выводим результат в табличный документ ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(Результат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); |
Теперь при нажатии на кнопку открывается выбор схемы, после чего происходит формирование отчета.
Отличный пример!
Но все можно значительно упростить! Если, например, перед формированием отчета по выбраной СКД нужно установить параметры и/или отборы или на форме есть элементы управление, которые связаны с СКД, то можно переопределить предопределенные реквизиты отчета “СхемаКомпоновкиДанных” и “КомпоновщикНастроек” на новую СКД. При этом вывод отчета оставить стандартным.
СхемаКомпоновкиДанных = ЭтотОбъект.ПолучитьМакет(“”);
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
P.S. К тому же, если не переопределять “КомпоновщикНастроек”, то штатные механизмы “Конструктор настроек…” и “Настройки…” будут завязаны но основную СКД.
Согласен, я привел наиболее понятный, как мне кажется, пример использования нескольких схем.
Настройки я в данном случае брал по умолчанию из выбранной схемы
Спасибо!
Очень важное дополнение – при подключении внешних источников компоновщик настроек сам не подхватывает настройки схемы.
Теперь понятно почему – и все заработало!
а можно твой пример от а до я ?:)
Как возможно сделать сохранение настроек, сделанных пользователем?
Т.е. для одной схемы установили такой-то отбор, сформировали отчет в другой схеме, вернулись в первую схему, а там этот отбор остался.
Настройки надо где-то хранить. В типовых конфигурациях для этого есть справочник “Сохраненные настройки”. Подсмотрите там, а если есть возможность лучше вообще использовать всю стандартную подсистему “Шаблон типового отчета”
Хотелось как проще, но видать не получится…
Спасибо!
И тебе, Дима, тоже за ОЧЕНЬ важное дополнение.
Добрый день!
Все это конечно замечательно, но при формировании отчета не по основной схеме компановки данных, расшифровка почему то пустая. Причем если смотреть в отладчике:
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); количество элементов в расшифровке становится больше, но в меню выбора действие “Открыть” неактивно.
Очень замечательная статья, автору огромный респект. В эту статейку бы добавить: Как при выборе другой схемы компоновки переопределялись настройки параметры и прочее. А то схема меняется а настройки остаются схемы по умолчанию. Кто знает как это реализовать, подскажите.
Смотри первый комментарий
Но при расшифровке отчета используется схема установленная Основной, и выдает ошибку следующего содержания: “Поле “Поле1” не может использоваться в группировке “Поле2″”. В основной схеме просто даже нет этого поля. Подскажите как быть?
Очень полезная статья! Нашла, как программно задавать нужный вариант настроек.