Повторение шапки отчета в начале каждого листа при печати (СКД) + вывод колонтитулов.

23.08.12

Разработка - СКД

Повторение шапки отчета в начале каждого печатного листа при использовании системы компоновки данных (СКД).
Пример выводов колонтитулов.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Отчет-пример
.erf 11,37Kb
361 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой
Направление мысли выдернуто из типовой БП2.0.: ОбщийМодуль.СтандартныеОтчеты.ПолучитьМакетШапки(...). Но в случае использования "Таблицы" (как в примере) эта функция к сожалению не подоходит.

Основная сложность при решении задачи состоит в определении области шапки отчета, которую нужно затем указать в свойстве табличного документа "ПовторятьПриПечатиСтроки".

 

Повторение шапки получается по следующему алгоритму:

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

2. При выводе отчета "по элементно" анализируем "Элементы вывода компоновки" и высоту табличного документа (Результата), откуда определяем первую и последнюю строчку "Шапки отчета".

3. ОбластьШапки = ТабличныйДокумент.Область(НачальнаяСтрокаШапки, , КонечнаяСтрокаШапки).

4. ТабличныйДокумент.ПовторятьПриПечатиСтроки = ОбластьШапки.

Ну, вот и все. Дело в шляпе!!!

 

Колонтитулы это просто.

Примерный код:

// Верхний колонтитул ТабДок.ВерхнийКолонтитул.Выводить = Истина;
ТабДок.ВерхнийКолонтитул.НачальнаяСтраница = 2;
ТабДок.ВерхнийКолонтитул.Шрифт = Новый Шрифт(Результат.ВерхнийКолонтитул.Шрифт, , , , Истина);
ТабДок.ВерхнийКолонтитул.ТекстСлева = "Заголовок отчета";
ТабДок.ВерхнийКолонтитул.ТекстВЦентре = "Стр. [&НомерСтраницы] из [&СтраницВсего]";
ТабДок.ВерхнийКолонтитул.ТекстСправа = "Дата/время печати: [&Дата]/[&Время]";
	
// Нижний колонтитул ТабДок.НижнийКолонтитул.Выводить = Истина;
ТабДок.НижнийКолонтитул.Шрифт = Новый Шрифт(Результат.ВерхнийКолонтитул.Шрифт, , , , Истина);
ТабДок.НижнийКолонтитул.ТекстВЦентре = "Заголовок отчета";
 

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    245834    1350    419    

1128

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    4963    280    shapa_pro    25    

66

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    15575    ovetgana    112    

105

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).

01.07.2025    9119    krasnoshchekovpavel    5    

66

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    8306    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.

27.02.2025    15485    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

СКД – инструмент, на базе которого в современных конфигурациях реализованы практически все отчеты. СКД используется в динамических списках, печатных формах и универсальных механизмах. Если построить простейший отчет может каждый разработчик, то с нюансами знакомы далеко не все. Расскажем о неочевидных на первый взгляд приемах, способных значительно повысить качество отчетов.

24.12.2024    13063    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    9520    AlexeyPROSTO_1C    1    

32
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. m_gin 46 22.08.12 13:28 Сейчас в теме
Часто в печатных формах требуется вывести номер страницы над шапкой таблицы.
Андрей Андревич, есть ли способ доработать Ваш алгоритм в этом направлении?
3. nalivai-chai 704 23.08.12 13:19 Сейчас в теме
(1) _qqq, добавил пример с выводом страниц. (колонтитулы)
2. link_l 12 22.08.12 15:17 Сейчас в теме
спасибо, помогло =)
4. KliMich 23.08.12 20:59 Сейчас в теме
Спасибо, зачастую это крайне необходимо (особенно при массивных отчетах)
5. unis 24.08.12 09:39 Сейчас в теме
Мне как раз это нужно!!! спасибо за обработку!!!
6. RustIG 1943 24.08.12 20:09 Сейчас в теме
спасибо, работает
7. Yury1001 1477 27.08.12 11:18 Сейчас в теме
Где то я это уже видел…
…а, точно, это ж Гилёв Профессиональная работа с СКД, бонус проекта Spec8.ru, 81-82 файлы ;)
8. nalivai-chai 704 27.08.12 14:19 Сейчас в теме
(7) Yury1001, там вроде только о фиксации строк.
9. nurislam 07.05.13 14:45 Сейчас в теме
Спасибо нужная вещь
10. ЧИА 170 07.04.14 19:20 Сейчас в теме
11. rozer 315 19.06.14 15:13 Сейчас в теме
12. glek 119 30.07.14 10:51 Сейчас в теме
Спасибо. Пока нет необходимости, но была ситуация, когда надо было. И пришлось играться гем....
13. SemenovaMarinaV 31.07.14 10:33 Сейчас в теме
А я не догодалась...
14. Poplar 31.07.14 17:53 Сейчас в теме
Как раз то, что я искал. Спасибо!
15. logarifm 1130 05.08.14 14:03 Сейчас в теме
А что произойдет с областью шапки если пользователь изменит вариант отчета? И накидает вместо одной группировки 5, а еще к области шапки добавится вывод Параметров отчета и его отборы. Я не увидел решение этой задачи.
17. nalivai-chai 704 05.08.14 13:53 Сейчас в теме
(15) logarifm, хоть 5, хоть 10 группировок, область шапки отчета будет прочитана в любом случае, а иначе какой кайф от предложенного подхода.
16. logarifm 1130 05.08.14 14:12 Сейчас в теме
Отчет скачал и посмтрел все сделано грамотно. Просто в статье не указано всего. Старайтесь излагать все в статье.
18. nalivai-chai 704 05.08.14 14:01 Сейчас в теме
(16) logarifm, по-моему изложено все, что необходимо.
Не разобрана функция "ПолучитьМакетШапки", так отсылаю в код отчета, более того идея функции взята из типовых конфигураций. Не хочется в статье построчно код отчета комментировать. Проще открыть отчет в конфигураторе, посмотреть выполнение с помощью отладчика. Код прост, разобраться не сложно.
Можно конечно вдаться в разбор макета компоновки, но это тема для отдельной статьи.
19. victor_k 95 18.07.16 13:04 Сейчас в теме
У кого не выводиться колонтитул, надо отрегулировать ширину поля
Результат.ПолеСверху = 20;
20. fedor40 707 16.08.16 11:48 Сейчас в теме
Я думал будет пример с управляемой формой.

В управляемой форме в процедуре ПриКомпоновкеРезультата не работает.
21. Vovanches 17.11.16 10:39 Сейчас в теме
На управляемых формах тоже всё работает, нужно только слегка подпилить. Стоящая фича, спасибо, мне понравилось!
22. eigen20 06.10.17 15:45 Сейчас в теме
Огромнейшее спасибо автору))
23. user_2010 1032 06.10.17 16:00 Сейчас в теме
Хм... недавно искала информацию по данной теме - и ничего не нашла... а ваша статья от 12 года!
Попробую применить...
Спасибо!
24. vis_tmp 33 11.10.18 06:29 Сейчас в теме
Спасибо, пригодилось!
25. fish249 31.10.18 12:33 Сейчас в теме
Спасибо автору, полезная обработка
26. websamson 307 09.04.19 09:36 Сейчас в теме
Как вывести колонтитулы на Управляемых формах (БП 3.0)? Отчет сам запускается, а колонтитулов нет
27. websamson 307 09.04.19 10:09 Сейчас в теме
(26) Ответ на свой вопрос:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    ДокументРезультат.Очистить();
    
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);

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

    ДокументРезультат.НижнийКолонтитул.Выводить = Истина;
    ДокументРезультат.ВерхнийКолонтитул.НачальнаяСтраница = 2;
    
    
    ДокументРезультат.НижнийКолонтитул.ТекстВЦентре = "Стр. [&НомерСтраницы] из [&СтраницВсего]";
    ДокументРезультат.НижнийКолонтитул.ТекстСправа = "Дата/время печати: [&Дата]/[&Время]";
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

    ПроцессорВывода.Вывести(ПроцессорКомпоновки);

КонецПроцедуры
Показать
dkonakov; Yan_Malyakov; +2 Ответить
28. AKV77 263 12.04.19 16:55 Сейчас в теме
Всех приветствую. Выкладываю работоспособный код... Нашел на просторах интернета и немного изменил...

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

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

ДокументРезультат.Очистить();

КомпановщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

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

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

//фиксировать шапку можно только для ОДНОЙ таблицы или группировки

КоличествоТаблиц = 0;
ВысотаШапки = 0;
ВерхОбластиДанных = 1;

Для Каждого ЭлементТела из МакетКомпановки.Тело Цикл

ТипЭлементаТела = ТипЗнч(ЭлементТела);

Если ТипЭлементаТела = Тип("ТаблицаМакетаКомпоновкиДанных")
ИЛИ ТипЭлементаТела = Тип("ГруппировкаМакетаКомпоновкиДанных") Тогда//Тут надо уточнить что значат другие типы в теле макета

КоличествоТаблиц = КоличествоТаблиц + 1;
ИначеЕсли ТипЭлементаТела <> Тип("МакетОбластиМакетаКомпоновкиДанных") Тогда
КоличествоТаблиц = 99;
КонецЕсли;

Если КоличествоТаблиц > 1 Тогда
Прервать;
КонецЕсли;

Если ТипЭлементаТела = Тип("МакетОбластиМакетаКомпоновкиДанных") Тогда
ВысотаШапки = МакетКомпановки.Макеты[ЭлементТела.Макет].Макет.Количество();
ВерхОбластиДанных = ВерхОбластиДанных + ВысотаШапки;
ИначеЕсли ТипЭлементаТела = Тип("ТаблицаМакетаКомпоновкиДанных") Тогда
ВысотаШапки = МакетКомпановки.Макеты[ЭлементТела.МакетШапки].Макет.Количество();
ВерхОбластиДанных = ВерхОбластиДанных + ВысотаШапки;
КонецЕсли;

КонецЦикла;

ДокументРезультат.ПовторятьПриПечатиСтроки = ДокументРезультат.Область(ВерхОбластиДанных - ВысотаШапки,,ВерхОбластиДанных-1,);

ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ДокументРезультат.АвтоМасштаб = Истина;

ДокументРезультат.НижнийКолонтитул.Выводить = Истина;
ДокументРезультат.НижнийКолонтитул.НачальнаяСтраница = 2;

ДокументРезультат.НижнийКолонтитул.ТекстВЦентре = "Стр. [&НомерСтраницы] из [&СтраницВсего]";
ДокументРезультат.НижнийКолонтитул.ТекстСправа = "Дата/время печати: [&Дата]/[&Время]";

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

ПроцессорВывода.Вывести(ПроцессорКомпоновки);

КонецПроцедуры
pawellkrv; +1 Ответить
29. user612919_maxim 01.11.19 16:36 Сейчас в теме
Отлично. Спасибо
(28)
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

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

ДокументРезультат.Очистить();

КомпановщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

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

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

//фиксировать шапку можно только для ОДНОЙ таблицы или группировки

КоличествоТаблиц = 0;
ВысотаШапки = 0;
ВерхОбластиДанных = 1;

Для Каждого ЭлементТела из МакетКомпановки.Тело Цикл

ТипЭлементаТела = ТипЗнч(ЭлементТела);

Если ТипЭлементаТела = Тип("ТаблицаМакетаКомпоновкиДанных")
ИЛИ ТипЭлементаТела = Тип("ГруппировкаМакетаКомпоновкиДанных") Тогда//Тут надо уточнить что значат другие типы в теле макета

КоличествоТаблиц = КоличествоТаблиц + 1;
ИначеЕсли ТипЭлементаТела <> Тип("МакетОбластиМакетаКомпоновкиДанных") Тогда
КоличествоТаблиц = 99;
КонецЕсли;

Если КоличествоТаблиц > 1 Тогда
Прервать;
КонецЕсли;

Если ТипЭлементаТела = Тип("МакетОбластиМакетаКомпоновкиДанных") Тогда
ВысотаШапки = МакетКомпановки.Макеты[ЭлементТела.Макет].Макет.Количество();
ВерхОбластиДанных = ВерхОбластиДанных + ВысотаШапки;
ИначеЕсли ТипЭлементаТела = Тип("ТаблицаМакетаКомпоновкиДанных") Тогда
ВысотаШапки = МакетКомпановки.Макеты[ЭлементТела.МакетШапки].Макет.Количество();
ВерхОбластиДанных = ВерхОбластиДанных + ВысотаШапки;
КонецЕсли;

КонецЦикла;

ДокументРезультат.ПовторятьПриПечатиСтроки = ДокументРезультат.Область(ВерхОбластиДанных - ВысотаШапки,,ВерхОбластиДанных-1,);

ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ДокументРезультат.АвтоМасштаб = Истина;

ДокументРезультат.НижнийКолонтитул.Выводить = Истина;
ДокументРезультат.НижнийКолонтитул.НачальнаяСтраница = 2;

ДокументРезультат.НижнийКолонтитул.ТекстВЦентре = "Стр. [&НомерСтраницы] из [&СтраницВсего]";
ДокументРезультат.НижнийКолонтитул.ТекстСправа = "Дата/время печати: [&Дата]/[&Время]";

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

ПроцессорВывода.Вывести(ПроцессорКомпоновки);

КонецПроцедуры
Показать
30. pawellkrv 29 08.04.21 16:48 Сейчас в теме
(28)
ДокументРезультат.ПовторятьПриПечатиСтроки = ДокументРезультат.Область(ВерхОбластиДанных - ВысотаШапки,,ВерхОбластиДанных-1,);

Эту хрень искал ))) +1
Для отправки сообщения требуется регистрация/авторизация