Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> СКД. Вставка разрыва страницы          
Vofka Подменю пользователя
сообщение 27.04.14, 13:57
Сообщение #1

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

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

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

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

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

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

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

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

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

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


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

В СКД был добавлен Параметр РазрывСтраницы с типом строка и заданным значением "Разорвать"



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



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



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

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

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

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


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

ПС. Эту статью нашел на двух ресурсах, опубликованную от имени разных людей без копирайтов. Поэтому цопик не ставлю, т.к. неизвестно кто автор.

Спасибо сказали: logist, rpodgornyy,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 16:34
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!