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