четверг, 25 сентября 2014 г.

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

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

На текущий момент это возможно сделать только объеденив хитрости программирования и конструктора макета. Но в целом это не сложно. 
Для начала определяемся с местом разрыва на примере это выглядит так:


Смысл таков, чтобы каждый партнер или контрагент начинался с нового листа ну это удобно для печати например.

Этапы интеграции:
  • На закладке Макеты определяем область нашего разрыва "РазрывСтраницы"

  • Задаем параметры

  • Добавляем детальную запись новую, для удобства устанавлием имя "Разрыв страницы". А в выбранных полях этой надстройки укажем - ПараметрыДанных.РазрывСтраницы

Манипуляции с макетом компоновки данных закончили. Теперь переходим в модуль объекта отчета и в предопределенной процедуре ПриКомпоновкеРезультата пишем следующий код:
///////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ

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

   
ВариантРазрывСтраницы = Ложь;
   
Настройки = КомпоновщикНастроек.ПолучитьНастройки();

    Для каждого
Искомое Из Настройки.ПользовательскиеПоля.Элементы Цикл

        Если
Искомое.Заголовок = "РазрывСтраницы" Тогда
           
ВариантРазрывСтраницы = Истина;
            Прервать;
        КонецЕсли;

    КонецЦикла;

    Если
ВариантРазрывСтраницы Тогда

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


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

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

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

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

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

    КонецЕсли;

КонецПроцедуры

Собственно все, пробуем. Есть только один недостаток в этом, будет постоянно в конце выходить пустая страница, так как на последнюю группировку наложится метод разрыва страницы.

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

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