Пример выводов колонтитулов.
Основная сложность при решении задачи состоит в определении области шапки отчета, которую нужно затем указать в свойстве табличного документа «ПовторятьПриПечатиСтроки».
Повторение шапки получается по следующему алгоритму:
1. Когда программно формируем отчетик по СКД имеем в своем распоряжении «Макет компоновки«, определяем в его теле «Макет области макета» (когда платформописатели придумывали имена объектам КД, они наверно хотели окончательно запутать программеров 1С и в без того запутанной компоновке), итак, определяем «Макет области макета», из которого будет формироваться шапка отчета, путем его нехитрого анализа (это лучше один раз поглядеть в функции «ПолучитьМакетШапки», чем писать много слов).
2. При выводе отчета «по элементно» анализируем «Элементы вывода компоновки» и высоту табличного документа (Результата), откуда определяем первую и последнюю строчку «Шапки отчета».
3. ОбластьШапки = ТабличныйДокумент.Область(НачальнаяСтрокаШапки, , КонечнаяСтрокаШапки).
4. ТабличныйДокумент.ПовторятьПриПечатиСтроки = ОбластьШапки.
Ну, вот и все. Дело в шляпе!!!
Колонтитулы это просто.
Примерный код:
// Верхний колонтитул ТабДок.ВерхнийКолонтитул.Выводить = Истина; ТабДок.ВерхнийКолонтитул.НачальнаяСтраница = 2; ТабДок.ВерхнийКолонтитул.Шрифт = Новый Шрифт(Результат.ВерхнийКолонтитул.Шрифт, , , , Истина); ТабДок.ВерхнийКолонтитул.ТекстСлева = "Заголовок отчета"; ТабДок.ВерхнийКолонтитул.ТекстВЦентре = "Стр. [&НомерСтраницы] из [&СтраницВсего]"; ТабДок.ВерхнийКолонтитул.ТекстСправа = "Дата/время печати: [&Дата]/[&Время]"; // Нижний колонтитул ТабДок.НижнийКолонтитул.Выводить = Истина; ТабДок.НижнийКолонтитул.Шрифт = Новый Шрифт(Результат.ВерхнийКолонтитул.Шрифт, , , , Истина); ТабДок.НижнийКолонтитул.ТекстВЦентре = "Заголовок отчета";





Часто в печатных формах требуется вывести номер страницы над шапкой таблицы.
Андрей Андревич, есть ли способ доработать Ваш алгоритм в этом направлении?
спасибо, помогло =)
(1) _qqq, добавил пример с выводом страниц. (колонтитулы)
Спасибо, зачастую это крайне необходимо (особенно при массивных отчетах)
Мне как раз это нужно!!! спасибо за обработку!!!
спасибо, работает
Где то я это уже видел…
…а, точно, это ж Гилёв Профессиональная работа с СКД, бонус проекта Spec8.ru, 81-82 файлы 😉
(7) Yury1001, там вроде только о фиксации строк.
Спасибо нужная вещь
Очень помогло.
Спасибо!!!
Спасибо. Пока нет необходимости, но была ситуация, когда надо было. И пришлось играться гем….
А я не догодалась…
Как раз то, что я искал. Спасибо!
(15) logarifm, хоть 5, хоть 10 группировок, область шапки отчета будет прочитана в любом случае, а иначе какой кайф от предложенного подхода.
(16) logarifm, по-моему изложено все, что необходимо.
Не разобрана функция «ПолучитьМакетШапки», так отсылаю в код отчета, более того идея функции взята из типовых конфигураций. Не хочется в статье построчно код отчета комментировать. Проще открыть отчет в конфигураторе, посмотреть выполнение с помощью отладчика. Код прост, разобраться не сложно.
Можно конечно вдаться в разбор макета компоновки, но это тема для отдельной статьи.
А что произойдет с областью шапки если пользователь изменит вариант отчета? И накидает вместо одной группировки 5, а еще к области шапки добавится вывод Параметров отчета и его отборы. Я не увидел решение этой задачи.
Отчет скачал и посмтрел все сделано грамотно. Просто в статье не указано всего. Старайтесь излагать все в статье.
У кого не выводиться колонтитул, надо отрегулировать ширину поля
Результат.ПолеСверху = 20;
Я думал будет пример с управляемой формой.
В управляемой форме в процедуре ПриКомпоновкеРезультата не работает.
На управляемых формах тоже всё работает, нужно только слегка подпилить. Стоящая фича, спасибо, мне понравилось!
Огромнейшее спасибо автору))
Хм… недавно искала информацию по данной теме — и ничего не нашла… а ваша статья от 12 года!
Попробую применить…
Спасибо!
Спасибо, пригодилось!
Спасибо автору, полезная обработка
Как вывести колонтитулы на Управляемых формах (БП 3.0)? Отчет сам запускается, а колонтитулов нет
(26) Ответ на свой вопрос:
Показать
Всех приветствую. Выкладываю работоспособный код… Нашел на просторах интернета и немного изменил…
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДокументРезультат.Очистить();
КомпановщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
МакетКомпановки = КомпановщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпановки, , ДанныеРасшифровки, Истина);
//фиксировать шапку можно только для ОДНОЙ таблицы или группировки
КоличествоТаблиц = 0;
ВысотаШапки = 0;
ВерхОбластиДанных = 1;
Для Каждого ЭлементТела из МакетКомпановки.Тело Цикл
ТипЭлементаТела = ТипЗнч(ЭлементТела);
Если ТипЭлементаТела = Тип(«ТаблицаМакетаКомпоновкиДанных»)
ИЛИ ТипЭлементаТела = Тип(«ГруппировкаМакетаКомпоновкиДанных») Тогда//Тут надо уточнить что значат другие типы в теле макета
КоличествоТаблиц = КоличествоТаблиц + 1;
ИначеЕсли ТипЭлементаТела <> Тип(«МакетОбластиМакетаКомпоновкиДанных») Тогда
КоличествоТаблиц = 99;
КонецЕсли;
Если КоличествоТаблиц > 1 Тогда
Прервать;
КонецЕсли;
Если ТипЭлементаТела = Тип(«МакетОбластиМакетаКомпоновкиДанных») Тогда
ВысотаШапки = МакетКомпановки.Макеты[ЭлементТела.Макет].Макет.Количество();
ВерхОбластиДанных = ВерхОбластиДанных + ВысотаШапки;
ИначеЕсли ТипЭлементаТела = Тип(«ТаблицаМакетаКомпоновкиДанных») Тогда
ВысотаШапки = МакетКомпановки.Макеты[ЭлементТела.МакетШапки].Макет.Количество();
ВерхОбластиДанных = ВерхОбластиДанных + ВысотаШапки;
КонецЕсли;
КонецЦикла;
ДокументРезультат.ПовторятьПриПечатиСтроки = ДокументРезультат.Область(ВерхОбластиДанных — ВысотаШапки,,ВерхОбластиДанных-1,);
ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ДокументРезультат.АвтоМасштаб = Истина;
ДокументРезультат.НижнийКолонтитул.Выводить = Истина;
ДокументРезультат.НижнийКолонтитул.НачальнаяСтраница = 2;
ДокументРезультат.НижнийКолонтитул.ТекстВЦентре = «Стр. [&НомерСтраницы] из [&СтраницВсего]»;
ДокументРезультат.НижнийКолонтитул.ТекстСправа = «Дата/время печати: [&Дата]/[&Время]»;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры