новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

Две схемы СКД в одном отчете на управляемых формах

  • Добавить свою публикацию
  • для этого требуется регистрация

В процессе работы с СКД часто приходится сталкиваться с необходимостью использования двух схем компоновки данных. При подготовке одного из таких отчетов столкнулась с проблемой, как вывести на форму не только сам отчет по схеме, но и настройки (отборы/параметры) именно для той схемы, которая сейчас используется.

Далее приведен простейший пример такого отчета.

 

Отчет по продажам с группировками по месяцам и неделям. 

1. Создаем внешний отчет.

2. В отчете создаем основную схему компоновки данных с набором данных - Запрос.

Текст запроса:

 

ВЫБРАТЬ
ПродажиОбороты.Склад,
ПродажиОбороты.Номенклатура,
ПродажиОбороты.КоличествоОборот,
ПродажиОбороты.СтоимостьОборот,
КОНЕЦПЕРИОДА(ПродажиОбороты.Период, МЕСЯЦ) КАК Период
ИЗ
РегистрНакопления.Продажи.Обороты(, , Регистратор, ) КАК ПродажиОбороты

3. Настраиваем ресурсы и внешний вид отчета

Изображение

 

Изображение

4. Создаем дополнительную схему компоновки данных с набором данных - Запрос.

Текст запроса:

 

ВЫБРАТЬ
ПродажиОбороты.Склад,
ПродажиОбороты.Номенклатура,
ПродажиОбороты.КоличествоОборот,
ПродажиОбороты.СтоимостьОборот,
КОНЕЦПЕРИОДА(ПродажиОбороты.Период, НЕДЕЛЯ) КАК Период
ИЗ
РегистрНакопления.Продажи.Обороты(, , Регистратор, ) КАК ПродажиОбороты

 И аналогичным образом задаем ресурсы и внешний вид.

5. Создаем основную форму отчета с помощью конструктора форм.

Изображение

 6. В форме необходимо добавить возможность переключения между схемами. Для этого добавим команду - Выбрать период и реквизит - ИмяТекущейСхемы

Изображение 

7. Команда "ВыбратьПериод"

 

&НаСервере
Процедура ВыбратьПериодНаСервере(ИмяТекущейСхемы)
СформироватьОтчет(ИмяТекущейСхемы);
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьПериод(Команда)

Список = Новый СписокЗначений;
Список.Добавить("ОсновнаяСхемаКомпоновкиДанных", "МЕСЯЦ");
Список.Добавить("ОсновнаяСхемаКомпоновкиДанных1", "НЕДЕЛЯ");
ВыбЭлемент = Список.ВыбратьЭлемент().Значение;
ИмяТекущейСхемы = ВыбЭлемент;
ВыбратьПериодНаСервере(ИмяТекущейСхемы);
КонецПроцедуры

8. Далее необходимо прописать код команды "СформироватьОтчет"

 

&НаСервере
Процедура СформироватьОтчет(ВыбЭлемент)

ТекОб = РеквизитФормыВЗначение("Отчет");

Если ЗначениеЗаполнено(ВыбЭлемент) Тогда
ТекОб.СхемаКомпоновкиДанных = ТекОб.ПолучитьМакет(ВыбЭлемент);
КонецЕсли;

//Установим настройки
Настройки = ТекОб.КомпоновщикНастроек.ПолучитьНастройки();
ТекОб.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);

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

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

 Прокомментирую данный код.

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

Если ЗначениеЗаполнено(ВыбЭлемент) Тогда
ТекОб.СхемаКомпоновкиДанных = ТекОб.ПолучитьМакет(ВыбЭлемент);
КонецЕсли

Далее считываем текущие настройки схемы. На этот код советую обратить внимание, так как при считывании настроек по умолчанию отчет всегда будет формироваться так, как указано в конфигураторе, независимо от данных на форме

Настройки = ТекОб.КомпоновщикНастроек.ПолучитьНастройки();
ТекОб.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки)

 

 После идет формирование и вывод отчета в поле формы "Результат".

9. Заменяем стандартную процедуру формирования отчета нашей процедурой и выводим ее на форму

 

&НаКлиенте
Процедура Сформировать(Команда)
СформироватьОтчет(ИмяТекущейСхемы)
КонецПроцедуры

10. Для параметров и отборов устанавливаем флаг "Включать в пользовательские настройки"

Изображение

 

Проверяем результат 

 
0
Еще от автора
≡ к списку статей