Найти в Дзене
Ваганов про 1С

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

Сегодня поговорим о том, как в СКД реализовать разрыв страницы.
Содержание
1. Постановка задачи
2. Настройка СКД
3. Код вставки разрыва страницы
4. Полученный результат

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

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

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

-2

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

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

-3

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

-4

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

-5

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

-6

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

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

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

-9

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

-10

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

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

-11

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

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

ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;

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

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;

ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

ПроцессорВывода.НачатьВывод();

//Начало отлавливания значения

//УстановитьРазрывСтраницы и

//установка разрыва страницы

ЭлементРезультата = ПроцессорКомпоновки.Следующий();

Пока ЭлементРезультата <> Неопределено Цикл

Если ЭлементРезультата.ЗначенияПараметров.Количество() = 1

и ЭлементРезультата.ЗначенияПараметров[0].Значение = "УстановитьРазрывСтраницы" Тогда

ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();

Иначе

ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);

КонецЕсли;

ЭлементРезультата = ПроцессорКомпоновки.Следующий();

КонецЦикла;

//Конец отлавливания значения

//УстановитьРазрывСтраницы и

//установка разрыва страницы

//Начало удаления последнего разрыва. В моем примере отнимаю 1, в Вашем может другое быть число

ОбластьСПоследнимРазрывомСтраницы = ДокументРезультат.Область("R" + (ДокументРезультат.ВысотаТаблицы - 1));

ДокументРезультат.УдалитьОбласть(ОбластьСПоследнимРазрывомСтраницы);

//Конец удаления последнего разрыва

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

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

-12