Работа с отчетами в 1С:Предприятие часто требует тонкой настройки внешнего вида, особенно когда речь идет о заголовках. Система компоновки данных (СКД) предоставляет гибкие инструменты для управления структурой отчета, но вывод заголовка может вызвать вопросы даже у опытных пользователей. Эта статья поможет разобраться, как правильно настроить заголовок в отчете СКД, избежать типичных ошибок и оптимизировать процесс для разных версий платформы.
Особенность СКД заключается в том, что заголовок может формироваться как на уровне схемы компоновки, так и программно — через модуль отчета. Мы рассмотрим оба подхода, а также нюансы работы с динамическими заголовками, которые изменяются в зависимости от параметров. Статья будет полезна и бухгалтерам, которым нужно быстро подправить шаблон отчета, и разработчикам, создающим сложные аналитические формы.
Что такое заголовок в отчете СКД и зачем он нужен
Заголовок в отчете СКД — это текстовый или графический элемент, который отображается в верхней части документа. Он выполняет несколько ключевых функций:
- 📌 Идентификация отчета — пользователь сразу понимает, какие данные перед ним (например, "Оборотно-сальдовая ведомость за март 2026").
- 🔍 Контекстная информация — может содержать период отчета, организацию, ответственного сотрудника.
- 🎨 Визуальная структура — разделяет шапку отчета от основных данных, улучшая восприятие.
- 🔄 Динамическое обновление — заголовок может меняться в зависимости от выбранных параметров (даты, подразделения и т.д.).
В отличие от статических заголовков в обычных печатных формах, СКД позволяет гибко управлять содержимым шапки. Например, можно вывести в заголовке не только название отчета, но и текущую дату формирования, имя пользователя, который его сгенерировал, или даже логотип компании. Это особенно важно для регламентированных отчетов, где требуется строгое соблюдение формата.
С технической точки зрения заголовок в СКД формируется через:
- 📝 Настройки схемы компоновки (в конструкторе отчета).
- 💻 Программный код в модуле отчета (на языке 1С).
- 🖼️ Внешние макеты (если требуется сложное оформление).
Способы вывода заголовка в СКД: сравнение подходов
Существует три основных способа вывести заголовок в отчете СКД. Каждый из них имеет свои плюсы и минусы, а выбор зависит от задачи:
| Способ | Преимущества | Недостатки | Когда использовать |
|---|---|---|---|
| Через конструктор СКД | ✅ Быстро, не требует программирования ✅ Подходит для стандартных заголовков |
❌ Ограниченные возможности форматирования ❌ Нельзя динамически менять текст |
Простые отчеты с фиксированным названием |
| Программно в модуле | ✅ Полный контроль над содержимым ✅ Динамические заголовки (даты, параметры) |
❌ Требует знания языка 1С ❌ Дольше разрабатывать |
Сложные отчеты с изменяемыми данными |
| Через внешний макет | ✅ Максимальная гибкость оформления ✅ Можно добавлять логотипы, таблицы |
❌ Сложно поддерживать ❌ Требует навыков работы с макетами |
Фирменные бланки, отчеты с логотипом |
На практике чаще всего комбинируют первые два подхода: базовый заголовок настраивают в конструкторе, а динамические элементы (например, период) добавляют программно. Это позволяет сохранить гибкость без излишнего усложнения кода.
⚠️ Внимание: В версиях 1С:Предприятие 8.3.20+ появились дополнительные настройки для работы с заголовками в СКД. Если вы используете более старую платформу, некоторые функции могут отсутствовать. Проверьте актуальность настроек в документации к вашей версии.
Пошаговая инструкция: вывод заголовка через конструктор СКД
Это самый простой способ, который не требует программирования. Подходит для большинства стандартных отчетов. Рассмотрим процесс на примере 1С:Бухгалтерия 3.0:
Откройте отчет в режиме
1С:Предприятие(не в конфигураторе!).Перейдите в
Все действия → Изменить вариант отчета(или нажмитеF5).В открывшемся окне выберите вкладку
Настройкии найдите разделЗаголовок(в некоторых версиях он может называтьсяШапка).В поле
Текст заголовкавведите нужный текст. Здесь можно использовать:- 📅 Фиксированный текст (например, "Отчет по продажам").
- 🔄 Параметры (вставляются через кнопку
Вставить параметр). - 📊 Выражения (например,
ТекстДокумента()для вывода названия документа).
Настройте шрифт, выравнивание и другие параметры форматирования в разделе Оформление.
Сохраните вариант отчета и сформируйте его заново — заголовок появится в верхней части.
Текст заголовка корректно отображается в предварительном просмотре|
Все параметры (даты, организации) подставляются автоматически|
Шрифт и выравнивание соответствуют фирменному стилю|
Заголовок не обрезается при печати на бумаге-->
Если вам нужно вывести в заголовке динамические данные (например, текущую дату или имя пользователя), используйте кнопку Вставить параметр и выберите нужное поле из списка. Например, для даты формирования отчета выберите параметр ДатаНачала или ТекущаяДата().
Чтобы заголовок отображался на каждой странице отчета, установите флажок "Повторять заголовок на каждой странице" в настройках компоновки. Это полезно для многостраничных документов, которые потом будут распечатаны.
Программный вывод заголовка: работа с модулем отчета
Когда возможностей конструктора недостаточно (например, нужно вывести сложное выражение или данные из внешнего источника), заголовок настраивается через программный код. Для этого:
Откройте отчет в Конфигураторе (режим
1С:Предприятиене подходит!).Найдите модуль отчета (обычно это файл с расширением
.bslили вкладкаМодульв свойствах отчета).Используйте процедуру
ПриКомпоновкеРезультатаилиПередВыводомРезультата(в зависимости от версии платформы). Пример кода:Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)// Получаем текущий заголовок из схемы компоновки
Заголовок = КомпоновщикМакета.ПолучитьЗаголовок();
// Добавляем динамические данные
ТекстЗаголовка = "Отчет по продажам за " + Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy") +
" (сформировал: " + Пользователь.Имя + ")";
// Устанавливаем новый заголовок
КомпоновщикМакета.УстановитьЗаголовок(ТекстЗаголовка);
СтандартнаяОбработка = Истина;
КонецПроцедуры
Сохраните изменения и обновите отчет в пользовательском режиме.
- 📌 Период отчета (из параметров СКД).
- 🏢 Название организации (из справочника
Организации). - 📈 Итоговые показатели (например, сумму продаж).
В этом примере заголовок будет включать текущую дату и имя пользователя, который сформировал отчет. Вы можете расширить логику, добавив:
⚠️ Внимание: При программной настройке заголовка убедитесь, что переменные (например, Пользователь.Имя) доступны в контексте выполнения. В некоторых конфигурациях может потребоваться явное получение данных через запросы или обращение к глобальным параметрам.
Динамические заголовки: примеры сложных сценариев
Иногда заголовок должен меняться в зависимости от условий. Рассмотрим несколько практических примеров:
1. Заголовок с условием (например, для разных типов отчетов)
Допустим, у вас один отчет используется для вывода данных по продажам и закупкам. Заголовок должен меняться в зависимости от выбранного параметра:
Если Параметры.ТипОтчета = Перечисление.ТипыОтчетов.Продажи Тогда
ТекстЗаголовка = "Отчет по продажам за " + Формат(Параметры.Период.ДатаНачала, "ДФ=dd.MM.yyyy");
ИначеЕсли Параметры.ТипОтчета = Перечисление.ТипыОтчетов.Закупки Тогда
ТекстЗаголовка = "Отчет по закупкам за " + Формат(Параметры.Период.ДатаНачала, "ДФ=dd.MM.yyyy");
КонецЕсли;
2. Заголовок с данными из внешнего источника
Если нужно вывести в заголовке информацию, которой нет в параметрах отчета (например, курс валюты на дату формирования), используйте запрос:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
| КурсыВалют.Курс КАК КурсДоллара
|ИЗ
| РегистрСведений.КурсыВалют КАК КурсыВалют
|ГДЕ
| КурсыВалют.Валюта = &Валюта
| И КурсыВалют.Дата = &Дата";
Запрос.УстановитьПараметр("Валюта", Справочники.Валюты.НайтиПоНаименованию("Доллар США"));
Запрос.УстановитьПараметр("Дата", ТекущаяДата());
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
ТекстЗаголовка = "Отчет по продажам (курс доллара: " + Формат(Выборка.КурсДоллара, "ЧЦ=2") + ")";
КонецЕсли;
3. Многострочный заголовок с разным оформлением
Для создания заголовка с несколькими строками и разным форматированием используйте HTML-теги (если отчет выводится в HTML-документ) или специальные символы:
ТекстЗаголовка = "ОТЧЕТ ПО ПРОДАЖАМ" + Символы.ПС + // Перевод строки
"Период: " + Формат(Параметры.ДатаНачала, "ДФ=dd.MM.yyyy") + " - " + Формат(Параметры.ДатаОкончания, "ДФ=dd.MM.yyyy") + Символы.ПС +
"Сформировал: " + Пользователь.Имя;
Как проверить корректность динамического заголовка?
Для отладки динамических заголовков используйте функцию Сообщить() в модуле отчета. Например:
Сообщить(ТекстЗаголовка);
Это выведет текст заголовка в окно сообщений, где вы сможете оценить его содержимое до формирования отчета. Также полезно использовать Предварительный просмотр в конструкторе СКД, чтобы увидеть, как заголовок будет выглядеть на печати.
Распространенные ошибки и как их избежать
При работе с заголовками в СКД пользователи часто сталкиваются с типичными проблемами. Вот самые частые из них и способы их решения:
- 🚫 Заголовок не отображается:
Проверьте, что в настройках компоновки включен показ заголовка (
Показывать заголовокдолжен быть отмечен). Также убедитесь, что текст заголовка не пустой. - 📏 Заголовок обрезается при печати:
Уменьшите размер шрифта или сократите текст. В настройках макета проверьте параметры полей и отступов.
- 🔄 Динамические параметры не подставляются:
Убедитесь, что параметры правильно передаются в схему компоновки. Для отладки используйте
Сообщить(Параметры.ИмяПараметра). - 🖼️ Логотип в заголовке не отображается:
Проверьте путь к файлу изображения. В внешних макетах используйте относительные пути (например,
"/ОбщиеМакеты/Логотип.png"). - 📑 Заголовок повторяется на каждой странице, хотя не нужен:
В настройках компоновки снимите флажок
Повторять заголовок на каждой странице. В Конфигураторе откройте отчет и перейдите на вкладку
Макеты.Создайте новый макет типа
Табличный документилиHTML-документ(в зависимости от нужного формата).В макете разметьте область заголовка. Например, для табличного документа:
// Устанавливаем область заголовкаОбласть = Макет.Область("Заголовок");
// Добавляем текст
Область.ВывестиТекст("ОТЧЕТ ПО ПРОДАЖАМ", ШрифтНадписи);
// Добавляем логотип (предварительно загрузите картинку в макет)
Область.ВывестиКартинку(Макет.Картинки.Логотип, 0, 0, 100, 50);
В модуле отчета свяжите макет с компоновщиком:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)// Получаем макет
МакетЗаголовка = ПолучатьМакет("МакетЗаголовка");
// Выводим макет в начало документа
ДокументРезультат.ВывестиМакет(МакетЗаголовка);
СтандартнаяОбработка = Истина;
КонецПроцедуры
⚠️ Внимание: Если вы используете тонкий клиент или веб-клиент, некоторые настройки заголовков могут работать иначе, чем в толстом клиенте. Например, шрифты или выравнивание могут отображаться некорректно. Всегда тестируйте отчет в том режиме, в котором он будет использоваться конечными пользователями.
Продвинутые техники: внешние макеты и HTML-oформление
Для сложных заголовков (с логотипами, таблицами или нестандартным оформлением) используют внешние макеты. Это отдельные файлы, которые подключаются к отчету и позволяют гибко управлять дизайном.
Чтобы создать заголовок через внешний макет:
Для HTML-макетов можно использовать теги разметки, что дает еще больше возможностей:
<div>
ОТЧЕТ ПО ПРОДАЖАМ<br>
<span>Период: {ДатаНачала} - {ДатаОкончания}</span>
</div>
Важно: при использовании HTML-макетов в СКД убедитесь, что в настройках компоновки включена опция "Использовать HTML для оформления". В противном случае теги не будут интерпретированы, и заголовок отобразится как обычный текст.
Внешние макеты — лучший выбор для корпоративных отчетов с логотипом и сложным оформлением. Они требуют больше времени на настройку, но дают максимальную гибкость и профессиональный вид документа.
FAQ: ответы на частые вопросы
Как вывести в заголовке текущую дату и время?
Используйте функцию ТекущаяДата() для даты и ТекущееВремя() для времени. Пример:
ТекстЗаголовка = "Отчет сформирован: " + Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy HH:mm");
Если нужно вывести дату из параметров отчета, обратитесь к ним напрямую (например, Параметры.ДатаОтчета).
Можно ли в заголовке использовать данные из регистра сведений?
Да, но для этого потребуется выполнить запрос в модуле отчета. Пример:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
| РегистрыСведений.КурсыВалют.Курс КАК Курс
|ИЗ
| РегистрСведений.КурсыВалют КАК РегистрыСведений.КурсыВалют
|ГДЕ
| РегистрыСведений.КурсыВалют.Валюта = &Валюта
| И РегистрыСведений.КурсыВалют.Дата = &Дата";
Запрос.УстановитьПараметр("Валюта", Справочники.Валюты.ДолларСША);
Запрос.УстановитьПараметр("Дата", ТекущаяДата());
Курс = Запрос.Выполнить().Выбрать().Курс;
ТекстЗаголовка = "Курс доллара на " + Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy") + ": " + Курс;
Почему заголовок отображается не на всех страницах?
Это зависит от двух настроек:
- В схеме компоновки проверьте флажок
Повторять заголовок на каждой странице. - В настройках печати (если выводите в
ExcelилиPDF) убедитесь, что не установлен параметр "Печатать заголовки только на первой странице".
Если заголовок пропал при экспорте в Excel, попробуйте использовать внешний макет — он лучше сохраняет структуру при экспорте.
Как сделать заголовок с разным шрифтом для разных частей?
Есть два способа:
Через внешний макет: разбейте заголовок на несколько областей и настройте для каждой свой шрифт.
Через HTML: используйте теги
<span>с разными стилями:ТекстЗаголовка = "<span style='font-size: 16pt; font-weight: bold;'>ОТЧЕТ</span>" +"<span style='font-size: 12pt; color: red;'> (Важно!)</span>";
Можно ли в заголовке СКД использовать картинки?
Да, но только через внешние макеты. В самом конструкторе СКД нет инструментов для вставки изображений. Алгоритм:
- Создайте макет типа
Табличный документ. - Добавьте в него картинку через
Макет.Картинки.Добавить(). - В модуле отчета выведите макет в начало документа.
Пример кода для добавления логотипа:
// Загружаем картинку в макет (делается один раз при создании макета)
Макет.Картинки.Добавить("Логотип", Новый Картинка(ПутьКФайлуЛоготипа));
// В модуле отчета выводим картинку
Область = Макет.Область("Заголовок");
Область.ВывестиКартинку(Макет.Картинки.Логотип, 10, 10, 100, 50);