К статье
Практический материал

Отчеты и Аналитика · 12 мин

Как создать макет отчета в 1С 8.3

Как создать макет отчета в 1С 8.3: табличный макет, СКД, области, параметры и заполнение программно. Пошаговая инструкция с примерами кода и разбором ошибок.

Макет в 1С 8.3 — это шаблон, по которому платформа формирует печатную форму или отчет: шапку, строки таблицы, итоги, подписи. Без макета результат существует только в памяти, а с макетом его можно вывести на экран, сохранить в Excel или отправить на печать. Макеты бывают двух принципиально разных типов: табличный документ (для программного формирования) и макет СКД (для системы компоновки данных), и выбор между ними определяет всю дальнейшую работу.

Типичная задача выглядит так: есть запрос к данным, и нужно красиво вывести результат — с группировками, форматами чисел, рамками и итогами. Для простых печатных форм достаточно табличного макета с областями и параметрами. Для аналитических отчетов, где пользователь сам меняет отборы и группировки, правильнее использовать СКД, где макет вообще можно не рисовать вручную.

Ниже разобран полный цикл: создание макета в конфигураторе, работа с областями и параметрами, программное заполнение табличным документом, вариант со схемой компоновки данных, типовые ошибки и способы проверить результат. Все действия выполняются в конфигураторе 1С:Предприятие 8.3 и не требуют внешних инструментов.

Выбор типа макета: табличный документ или СКД

Первое решение, которое нужно принять, — каким способом будет формироваться отчет. Табличный макет подходит, когда структура вывода жестко фиксирована: акт, счет, список с заранее известными колонками. Разработчик сам управляет каждой строкой вывода в коде, что дает полный контроль над результатом, но требует больше программирования.

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

Сравнение вариантов

Табличный макет

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

Макет СКД

Подходит для аналитических отчетов с пользовательскими настройками. Меньше кода, гибкие отборы, но сложнее тонко управлять оформлением отдельных ячеек.

СКД без макета

Платформа сама генерирует оформление по настройкам. Самый быстрый вариант, но внешний вид стандартный, без фирменного оформления.

Если сомневаетесь, ориентируйтесь на вопрос: будет ли пользователь менять состав колонок и группировок? Если да — СКД. Если отчет всегда выглядит одинаково и его нужно точно сверстать «как в образце» — табличный макет.

Создание макета в конфигураторе

Откройте конфигуратор, найдите в дереве конфигурации ветку «Отчеты» и откройте нужный отчет (или создайте новый). В окне редактирования объекта перейдите на вкладку «Макеты» и нажмите кнопку добавления. Платформа предложит выбрать тип макета: «Табличный документ» или «Макет компоновки данных». Для первого сценария выберите табличный документ и задайте имя, например «МакетОтчета».

Откроется редактор, похожий на электронную таблицу. Здесь рисуется внешний вид отчета: вводятся статичные тексты (заголовки колонок, подписи), настраиваются шрифты, границы, цвета заливки, выравнивание. Ячейки, в которые будут подставляться данные, пока оставьте с текстовыми метками — на следующем шаге они станут параметрами.

Для удобства сразу задайте формат ячеек с числами и датами: выделите ячейку, откройте свойства (правый клик — «Свойства») и установите формат, например «ЧДЦ=2» для сумм. Формат, заданный в макете, сработает автоматически при выводе и избавит от форматирования в коде.

Области и параметры макета

Область — это именованный фрагмент макета, который выводится в результат одной командой. Обычно макет делят минимум на три области: «Шапка» (заголовок и шапка таблицы), «Строка» (одна строка данных, выводится в цикле) и «Подвал» (итоги и подписи). Чтобы создать область, выделите нужные строки, затем используйте меню «Таблица — Имена — Назначить имя» или сочетание клавиш, и введите имя области, например «Строка».

Параметры — это ячейки, в которые программа подставит значения. Выделите ячейку, откройте свойства и установите свойство «Заполнение» в значение «Параметр», а в свойстве «Параметр» укажите имя, например «Номенклатура» или «Сумма». Текст ячейки при этом станет служебным и в результат не попадет — вместо него выведется переданное значение.

Есть и третий режим заполнения — «Шаблон». В ячейке-шаблоне можно смешивать статичный текст и параметры в квадратных скобках: «Акт № [Номер] от [Дата]». Это удобно для строк, где значения встроены в предложение, и избавляет от конкатенации строк в коде.

Разметка табличного макета
  1. 1
    Создайте макет типа «Табличный документ» в отчете или общих макетах
  2. 2
    Нарисуйте шапку: заголовок отчета и строку с именами колонок
  3. 3
    Выделите строки шапки и назначьте область «Шапка»
  4. 4
    Создайте строку данных, задайте в ячейках параметры через свойство «Заполнение — Параметр»
  5. 5
    Назначьте строке данных область «Строка»
  6. 6
    Добавьте область «Подвал» с ячейками для итогов
  7. 7
    Сохраните конфигурацию и проверьте, что имена областей и параметров не содержат пробелов

Программное заполнение макета данными

Заполнение выполняется в модуле объекта отчета или в общем модуле. Логика стандартная: получить макет, получить из него области, в цикле заполнить параметры и вывести области в результирующий табличный документ. Результат обычно помещают в реквизит формы типа «ТабличныйДокумент», чтобы пользователь увидел его на экране.

bsl
Процедура СформироватьОтчет(Результат)
	Макет = Отчеты.ПродажиПоНоменклатуре.ПолучитьМакет("МакетОтчета");
	Результат.Очистить();
	ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
	Результат.Вывести(ОбластьШапка);
	ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		ОбластьСтрока.Параметры.Заполнить(Выборка);
		Результат.Вывести(ОбластьСтрока);
	КонецЦикла;
	ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
	ОбластьПодвал.Параметры.ИтогоСумма = ИтогСумма;
	Результат.Вывести(ОбластьПодвал);
КонецПроцедуры

Обратите внимание на метод Параметры.Заполнить(Выборка): он автоматически переносит в параметры области значения полей выборки, имена которых совпадают с именами параметров. Это избавляет от построчного присваивания, но требует, чтобы имена в запросе и в макете совпадали в точности, включая регистр.

Для группировок (например, строки внутри контрагента) добавьте область «Группа» и выводите ее при смене значения группировочного поля. Для многоуровневых отчетов используйте метод НачатьГруппуСтрок/ЗакончитьГруппуСтрок результата — тогда пользователь сможет сворачивать группы, как в типовых отчетах.

Вариант со схемой компоновки данных

Если выбран путь СКД, на вкладке «Макеты» создайте макет типа «Макет компоновки данных», а основную работу выполните в «Основной схеме компоновки данных» отчета. Там на закладке «Наборы данных» пишется запрос, на закладке «Настройки» задаются группировки, выбранные поля и отборы по умолчанию. Платформа сама построит макет и выведет результат — код формирования сводится к нескольким строкам или вообще не нужен, если отчет работает в стандартной форме.

Ручной макет СКД нужен, когда стандартное оформление не подходит: например, нужен особый заголовок, объединенные ячейки или нестандартные итоги. В редакторе макета компоновки создаются макеты областей (заголовок группировки, поля, ресурсы), где ячейки привязываются к полям схемы. Это более трудоемкий путь, поэтому начинайте с автоматического оформления и добавляйте ручной макет только для тех областей, которые нужно изменить.

Частая ситуация: отчет на СКД почти устраивает, но шапку хотят «как в Excel-образце». Не перерисовывайте весь макет вручную — переопределите только макет заголовка отчета, а группировки и ресурсы оставьте автоматическими. Трудозатраты снижаются в разы.
ПЗ
Практическое замечание

Проверка результата и типичные ошибки

После формирования проверьте отчет в трех состояниях: с данными, с пустой выборкой и с большим объемом. Пустая выборка не должна приводить к ошибке — желательно вывести вместо строк сообщение «Данные отсутствуют». Большой объем покажет, не «разъезжается» ли верстка и не тормозит ли вывод (при тысячах строк стоит отключать автоперенос итогов до конца формирования).

Типичные ошибки
01
Опечатка в имени области или параметра: метод ПолучитьОбласть вызывает исключение, а параметр просто остается пустым — сверяйте имена копированием из макета
02
Параметр не заполнен, а ячейка имеет заполнение «Параметр»: в результате выводится пусто или текст вида [ИмяПараметра]
03
Вывод области «Строка» вне цикла: в отчете появляется только одна строка вместо всей выборки
04
Не очищен табличный документ перед формированием: при повторном формировании отчет дублируется под предыдущим
05
Формат чисел задан только в коде, а не в макете: при изменении макета форматирование теряется
06
Изменение макета типовой конфигурации напрямую: при обновлении макет сравнивается с поставщиком и может быть затерт
Контрольные точки

Как проверить результат

Имена областей в коде
Норма

Совпадают с именами в макете посимвольно

Тревожный признак

Исключение «Область не найдена» при формировании

Заполнение параметров
Норма

Все ячейки-параметры содержат значения из данных

Тревожный признак

Пустые ячейки или текст в квадратных скобках в результате

Повторное формирование
Норма

Отчет каждый раз выводится заново без дублей

Тревожный признак

Новые данные дописываются под старые

Печать и экспорт
Норма

В Excel и на печати структура и форматы сохраняются

Тревожный признак

Съехавшие колонки, потерянные границы, обрезанный текст

Отдельно проверьте печатную форму: выведите результат на печать или сохраните в PDF и Excel. Расхождения обычно видны именно там: слишком широкие колонки, не задана область печати, текст обрезан из-за фиксированной высоты строк. Свойства «АвтоВысотаСтроки» и «Размещение текста» в макете решают большинство таких проблем без изменения кода.

Ограничения и безопасная работа с типовыми конфигурациями

Табличный макет не умеет сам строить группировки, отборы и диаграммы — все это программируется вручную. Если требования к отчету регулярно меняются пользователями, табличный макет превратится в источник постоянных доработок; в этом случае переносите отчет на СКД. Обратное ограничение СКД — слабый контроль над пиксельной версткой, поэтому строгие печатные формы (с точным соответствием утвержденному бланку) делают табличным макетом.

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

Итог

Что важно запомнить

Табличный макет — для фиксированных печатных форм, СКД — для гибких отчетов. Макет создается в конфигураторе, делится на именованные области с параметрами, заполняется через ПолучитьОбласть/Вывести или автоматически компоновщиком. Проверяйте имена областей, очистку результата, пустую выборку и вывод на печать. Типовые макеты меняйте через расширения или внешние отчеты.

Частые вопросы

Чем макет отчета отличается от макета печатной формы документа?

Технически ничем — и там, и там используется табличный документ с областями и параметрами. Разница в размещении и вызове: макет печатной формы хранится в объекте документа и вызывается из меню «Печать», а макет отчета — в объекте отчета и формируется командой формирования. Подход к разметке областей и заполнению параметров одинаковый.

Можно ли создать макет, загрузив готовый файл Excel?

Да. В редакторе табличного макета можно открыть файл MXL, а содержимое Excel — скопировать через буфер обмена или предварительно сохранить лист как MXL-совместимый формат. После вставки нужно вручную назначить области и заменить значения ячеек на параметры: статичные данные из файла сами в параметры не превратятся.

Почему в результате вместо значения выводится текст в квадратных скобках?

Это признак того, что ячейка имеет заполнение «Шаблон» или «Параметр», но значение параметра не было передано из кода. Проверьте, что имя параметра в свойствах ячейки совпадает с именем, которое вы заполняете, и что вывод области выполняется после заполнения параметров, а не до.

Как вывести в макете картинку, например логотип или подпись?

Вставьте в макет объект «Картинка» через меню «Таблица — Рисунки». Логотип можно хранить прямо в макете, а подменяемые изображения (подписи, печати, фото товара) подставлять программно: получить область, найти рисунок по имени и присвоить его свойству «Картинка» новое значение типа Картинка, полученное из двоичных данных.

Нужен ли программный код для отчета на СКД?

Для базового сценария — нет: если отчет использует стандартную форму, достаточно схемы компоновки с запросом и настройками по умолчанию. Код понадобится, когда нужно программно установить параметры, добавить данные из объектов (не из запроса) или переопределить оформление через процессор вывода.

Как сделать, чтобы пользователь мог сворачивать группы строк в табличном документе?

Используйте методы результата НачатьГруппуСтрок и ЗакончитьГруппуСтрок при выводе областей групп и строк. Платформа добавит в левую часть табличного документа элементы управления группировками, аналогичные сворачиванию в отчетах СКД, без дополнительной разметки в макете.