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

Отзывов (2)FavoriteLoadingВ закладки

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

Отчет будем формировать программно переопределив событие “ПриКомпоновкеРезультата”

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка=Ложь;

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

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

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

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

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

Как вы видите здесь все шаблонно, весь фокус находится в анализе ЭлементРезультата, в нем нужно определить когда собсвенно резать. Как я это решил для себя:
В СКД был добавлен Параметр РазрывСтраницы с типом строка и заданным значением “Разорвать”

Вставка разрыва страницы 1

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

Вставка разрыва страницы 2

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

Вставка разрыва страницы 3

Далее для этой группировки сделал свой макет:

Вставка разрыва страницы 4

Чтобы сделать группировку не видимой я в настройках, для этой группировки установил условное оформление: цвета текста, фона, линий – белые.

На закладке Другие настройки установил: Тип макета – вертикально, Выводить отбор – не выводить.

Для чего все это было сделано, напомню кусочек кода:

    Если ЭлементРезультата.ЗначенияПараметров.Количество()=1 Тогда
            Если ЭлементРезультата.ЗначенияПараметров[0].Значение = "Разорвать" Тогда
            ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
    КонецЕсли;

Для группировки ГруппировкаРазрыв у нас количество в коллекции ЗначенияПараметров будет равно 1. Всегда будет 1 параметр и его значение будет всегда равно нашей строке “Разорвать” Благодаря этому и появляется выловить его при обходе результата. В пост обработки табличного документа придется удалить 2 последние строки, иначе у нас будет печататься пустая страница.
С уважение Петр Юрьевич Чечин

Оригинал

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

2 Коммент.

  1. “Чтобы сделать группировку не видимой я в настройках, для этой группировки установил условное оформление: цвета текста, фона, линий – белые.”

    Можно было вот так:
    После ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
    написать
    ЭлементРезультата = ПроцессорКомпоновки.Следующий();
    Продолжить;

    По идее должно сработать.

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

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

Авторизация

Логин:
Пароль:
Регистрация

Архивы

Закладки

  • Your favorites will be here.