Столкнувшись с достаточно типовой проблемой при разработке отчетов на системе компоновки данных(СКД), вставка разрыва страницы после в конце группировки, на форумах и в документации не нашел простого решения этой задачи. Пост-обработкой табличного документа заниматься не хотелось, хотя совсем этого избежать пока не удалось , поэтому было найдено не сложное решение которым я хочу с вами поделиться.
Отчет будем формировать программно переопределив событие “ПриКомпоновкеРезультата”
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка=Ложь; Настройки = КомпоновщикНастроек.ПолучитьНастройки(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.НачатьВывод(); ЭлементРезультата = ПроцессорКомпоновки.Следующий(); Пока ЭлементРезультата <> Неопределено Цикл Если ЭлементРезультата.ЗначенияПараметров.Количество()=1 Тогда Если ЭлементРезультата.ЗначенияПараметров[0].Значение = "Разорвать" Тогда ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; КонецЕсли; ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); ЭлементРезультата = ПроцессорКомпоновки.Следующий(); КонецЦикла; ПроцессорВывода.ЗакончитьВывод();
Как вы видите здесь все шаблонно, весь фокус находится в анализе ЭлементРезультата, в нем нужно определить когда собсвенно резать. Как я это решил для себя:
В СКД был добавлен Параметр РазрывСтраницы с типом строка и заданным значением “Разорвать”
В моей задачи мне нужно было выводить показатели списка врачей, при этом каждый врач должен был печататься на своем листе. В настройках отчета я сделал именованную группировку:
В настройка этой группировки я убрал Авто поля и вставил свой парметр РазрывСтраницы.
Далее для этой группировки сделал свой макет:
Чтобы сделать группировку не видимой я в настройках, для этой группировки установил условное оформление: цвета текста, фона, линий – белые.
На закладке Другие настройки установил: Тип макета – вертикально, Выводить отбор – не выводить.
Для чего все это было сделано, напомню кусочек кода:
Если ЭлементРезультата.ЗначенияПараметров.Количество()=1 Тогда Если ЭлементРезультата.ЗначенияПараметров[0].Значение = "Разорвать" Тогда ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; КонецЕсли;
Для группировки ГруппировкаРазрыв у нас количество в коллекции ЗначенияПараметров будет равно 1. Всегда будет 1 параметр и его значение будет всегда равно нашей строке “Разорвать” Благодаря этому и появляется выловить его при обходе результата. В пост обработки табличного документа придется удалить 2 последние строки, иначе у нас будет печататься пустая страница.
С уважение Петр Юрьевич Чечин
“Чтобы сделать группировку не видимой я в настройках, для этой группировки установил условное оформление: цвета текста, фона, линий – белые.”
Можно было вот так:
После ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
написать
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Продолжить;
По идее должно сработать.
Макет оформления: “Без оформления” нам не поможет?