Страницы

18 августа 2021

СКД разрыв страницы


Сегодня поговорим о том как в СКД реализовать разрыв страницы.


Содержание

1. Постановка задачи

2. Настройка СКД

3. Код вставки разрыва страницы

4. Полученный результат






1. Постановка задачи

У нас имеется простой отчет в СКД "Остатки по складам". Необходимо чтобы остатки по каждому складу начинались с новой страницы.

Так выглядят первоначально настройки отчета в СКД.

2. Настройка СКД

На вкладке Параметры добавляем новый параметр РазрывСтраницы, указываем тип Строка, в Выражении указываем "УстановитьРазрывСтраницы". Установить флаги Включить в доступные поля и Ограничение доступности.

На вкладке Настройки добавляем пустую группировку, через контекстное меню выбираем пункт Установить имя и указываем имя - УстановитьРазрыв.

В настройках добавленной группировки на вкладке Выбранные поля удаляем поле Авто и добавляем параметр РазрывСтраницы, который создали на вкладке Параметры.

На вкладке Макеты добавляем макет группировки.

В появившемся окне в свойстве Имя группировки указываем имя переименованной группировки - УстановитьРазрыв.

В значение Область указываем строку из макета, в нашем случаи это строка R2.

В указанной строке, в любой ячейке пишим - ЭтоРазрывСтраницы. В свойстве Заполнение этой ячейки указываем тип Параметр. Слева в окне Параметры макета автоматически появится параметр ЭтоРазрывСтраницы.

У этого параметра в качестве выражения указываем созданный параметр РазрывСтраницы.

3. Код вставки разрыва страницы

В Модуле объекта отчета добавляем предопределенную процедуру ПриКомпоновкеРезультата().

В процедуре пишем код:

СтандартнаяОбработка = Ложь;

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

//Начало отлавливания значения
//УстановитьРазрывСтраницы и
//установка разрыва страницы
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Пока ЭлементРезультата <> Неопределено Цикл   
Если ЭлементРезультата.ЗначенияПараметров.Количество() =
и ЭлементРезультата.ЗначенияПараметров[0].Значение = "УстановитьРазрывСтраницы" Тогда
ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
Иначе
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
КонецЕсли;
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
КонецЦикла; 
//Конец отлавливания значения
//УстановитьРазрывСтраницы и
//установка разрыва страницы   
         
//Начало удаления последнего разрыва. В моем примере отнимаю 1, в Вашем может другое быть число
ОбластьСПоследнимРазрывомСтраницы = ДокументРезультат.Область("R" + (ДокументРезультат.ВысотаТаблицы - 1));
ДокументРезультат.УдалитьОбласть(ОбластьСПоследнимРазрывомСтраницы);
//Конец удаления последнего разрыва

ПроцессорВывода.ЗакончитьВывод();

4. Полученный результат




Комментариев нет:

Отправить комментарий