Отчеты и Аналитика · 11 мин
Как сделать отчет с макетом в 1С
Как создать отчет с макетом в 1С: конструктор запроса, настройка макета СКД и табличного документа, код вывода результата. Пошаговая инструкция для разработчика.
Отчет с макетом в 1С — это объект конфигурации, который получает данные из информационной базы и выводит их в строго заданном формате: с заголовками, группировками, итогами и оформлением. Макет определяет, как будет выглядеть результат, а запрос или произвольный код — откуда берутся данные. Такой подход используют для печатных форм, аналитических выборок и регламентированных отчетов, где внешний вид фиксирован.
Существует два основных способа построить отчет с макетом. Первый — на основе системы компоновки данных (СКД), где макет настраивается визуально, а программа сама формирует результат. Второй — программный вывод в табличный документ через макет типа «Табличный документ», где разработчик полностью контролирует каждую строку. Выбор зависит от задачи: для аналитики и гибких настроек лучше СКД, для жестких печатных форм — ручной вывод.
Ниже разобран полный цикл работы: от создания объекта «Отчет» в конфигураторе до проверки результата в режиме предприятия. Примеры приведены для типовой разработки на управляемых формах, но общая логика одинакова для большинства конфигураций на платформе 8.3.
Выбор типа макета: СКД или табличный документ
Прежде чем создавать отчет, определите, какой механизм вывода вам нужен. СКД подходит, когда пользователь должен сам менять отборы, период, группировки и сортировку без доработки конфигурации. Макет в этом случае генерируется автоматически на основе настроек, а дизайнерские области можно переопределить через «Макет оформления компоновки данных».
Табличный документ как макет выбирают, когда структура результата жестко зафиксирована: счет, акт, ТОРГ-12, внутренняя ведомость с точным расположением колонок. Здесь каждая ячейка описана в макете, а разработчик в коде последовательно выводит области — шапку, строки, подвал.
Сравнение вариантов
Подходит для аналитических отчетов с гибкими отборами и группировками. Ограничение: точное позиционирование ячеек требует дополнительной настройки макета оформления.
Подходит для печатных форм с фиксированной структурой. Ограничение: любое изменение структуры требует правки макета и кода, гибких настроек у пользователя нет.
Подходит, когда нельзя менять основную конфигурацию. Ограничение: нужна регистрация в справочнике дополнительных отчетов и обработок.
Если сомневаетесь, начните с СКД: большинство типовых задач решается без единой строки кода вывода. Переходите на табличный документ только когда требования к оформлению невозможно уложить в настройки СКД.
Создание объекта «Отчет» в конфигураторе
Откройте конфигуратор, найдите в дереве конфигурации ветку «Отчеты» и добавьте новый объект. Задайте имя без пробелов, например «ПродажиПоМенеджерам», и синоним, который увидит пользователь. На закладке «Основные» сразу можно указать основную схему компоновки данных — платформа создаст её автоматически.
Если отчет должен быть доступен пользователям, проверьте подсистемы: отметьте те разделы интерфейса, где отчет появится в панели отчетов. Также настройте права: роли, которым разрешено использование отчета. Пропуск этого шага — частая причина жалоб «отчет не виден», хотя объект создан корректно.
Для отчета на СКД дополнительный модуль обычно не нужен — платформа сама выполняет схему и выводит результат. Для отчета с ручным выводом потребуется форма отчета с реквизитом «Результат» типа «ТабличныйДокумент» и команда «Сформировать».
- 1Добавьте объект «Отчет» в конфигураторе и задайте имя и синоним
- 2Отметьте подсистемы, где отчет будет виден пользователям
- 3Добавьте макет: основную СКД или табличный документ
- 4Сформируйте запрос через конструктор и настройте ресурсы и группировки
- 5Настройте области макета либо напишите код вывода в модуле
- 6Назначьте права ролям и обновите конфигурацию базы данных
- 7Проверьте формирование отчета в режиме предприятия под реальным пользователем
Формирование запроса к данным
Источник данных для отчета — чаще всего запрос. В схеме компоновки данных откройте закладку «Наборы данных» и вызовите конструктор запроса. Выберите таблицы: например, обороты регистра накопления «Продажи» с виртуальной таблицей «Обороты», где платформа сама посчитает суммы за период.
Обращайте внимание на виртуальные таблицы регистров: для оборотных отчетов используйте «Обороты», для остатков — «Остатки» или «ОстаткиИОбороты». Параметры периода (&НачалоПериода, &КонецПериода) конструктор добавит автоматически, а СКД сопоставит их пользовательским настройкам отчета.
Типичная ошибка — выбирать физическую таблицу регистра вместо виртуальной. Запрос выполнится, но вернет движения по документам, а не агрегированные итоги, и отчет будет содержать лишние строки и неверные суммы. Проверяйте результат запроса кнопкой с выполнением прямо в конструкторе на тестовой базе.
Настройка макета СКД
После заполнения набора данных перейдите на закладки «Ресурсы» и «Настройки». В ресурсах укажите поля, которые нужно суммировать, — например, «СуммаОборот» с выражением «Сумма(СуммаОборот)». Без ресурсов группировки не покажут итогов, и отчет превратится в плоский список.
На закладке «Настройки» конструктор предложит типовую структуру: группировку по измерениям (контрагент, менеджер, номенклатура) и выбранные поля. Добавьте отборы, которые пользователь сможет менять, и вынесите их в быстрый доступ, чтобы они появились прямо на форме отчета.
Если нужен собственный внешний вид — заголовки с объединенными ячейками, цветовое оформление, фиксированная шапка — создайте макет оформления компоновки данных через кнопку «Макеты» в схеме. В нем определяют области заголовка, группировки и подвала, а СКД подставит данные в указанные параметры.
Программный вывод в табличный документ
Для отчета с макетом типа «Табличный документ» логика другая. В макете создайте именованные области: «Шапка», «Строка», «Подвал». В ячейках строки разместите параметры — текст в квадратных скобках, например [Номенклатура] и [Сумма], или задайте заполнение «Параметр» в свойствах ячейки.
В модуле объекта отчета (или в общем модуле) напишите процедуру формирования: выполните запрос, получите макет методом ПолучитьМакет("ИмяМакета"), затем в цикле обхода выборки заполняйте параметры области и выводите её в табличный документ.
Макет = ПолучитьМакет("МакетОтчета");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Результат.Вывести(ОбластьШапка);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ОбластьСтрока.Параметры.Заполнить(Выборка);
Результат.Вывести(ОбластьСтрока);
КонецЦикла;Для группировок используйте обход выборки по группировкам и методы НачатьГруппуСтрок/ЗакончитьГруппуСтрок — тогда пользователь сможет сворачивать уровни в готовом документе. Итоги по группе берите из выборки верхнего уровня, а не суммируйте вручную, чтобы избежать расхождений при отборах в запросе.
Проверка результата и типичные проблемы
После обновления конфигурации откройте отчет в режиме предприятия под учетной записью с обычными правами, а не под администратором. Сформируйте отчет за период, где заведомо есть данные, и сверьте несколько цифр с исходными документами или типовым отчетом — например, обороты по продажам с оборотно-сальдовой ведомостью.
Проверьте граничные случаи: пустой период, отбор без результатов, очень большой объем данных. Отчет на СКД корректно покажет пустой результат сам; ручной вывод должен явно обрабатывать ситуацию, когда выборка пуста, иначе пользователь увидит шапку без строк и без пояснений.
Как проверить результат
Совпадают с типовым отчетом или ОСВ за тот же период
Расхождения даже на копейки — проверяйте виртуальные таблицы и отборы
Отчет формируется без ошибки, выводит шапку или сообщение об отсутствии данных
Ошибка выполнения или пустой лист без пояснений
Отчет виден и формируется под рядовым пользователем
Отчет доступен только администратору
Отчет за месяц формируется за приемлемое время
Формирование занимает минуты — проверяйте запрос и соединения таблиц
Когда задачу лучше поручить специалисту
Самостоятельная разработка оправдана для внутренних аналитических отчетов на копии базы. Но есть ситуации, где ошибка дороже времени специалиста: отчеты для регламентированной отчетности, доработки типовой конфигурации на поддержке, сложные запросы с соединением нескольких регистров и расчетом себестоимости.
Особая зона риска — изменение типовых объектов. Любая правка типового отчета усложняет обновление конфигурации. Безопасная альтернатива — внешний отчет, который подключается через механизм дополнительных отчетов и обработок и не трогает основную конфигурацию.
Что важно запомнить
Тип макета выбирайте по задаче: СКД — для гибкой аналитики, табличный документ — для жестких печатных форм. Запрос стройте на виртуальных таблицах регистров, проверяйте итоги на тестовой базе, не забывайте про права и подсистемы. Для типовых конфигураций предпочтителен внешний отчет без изменения основной конфигурации.
Частые вопросы
Чем макет СКД отличается от макета табличного документа?
Макет СКД (макет оформления компоновки данных) только переопределяет внешний вид областей, которые система формирует сама по настройкам. Макет табличного документа — это статичный шаблон с именованными областями, который разработчик выводит программно, полностью управляя порядком строк и содержимым ячеек.
Можно ли сделать отчет с макетом без изменения конфигурации?
Да. Создайте внешний отчет (файл .erf) через конфигуратор: «Файл — Новый — Внешний отчет». В типовых конфигурациях он подключается через справочник «Дополнительные отчеты и обработки» и работает без изменения основной конфигурации и снятия объектов с поддержки.
Почему при формировании возникает ошибка «Область не найдена»?
Имя области в коде не совпадает с именем в макете. Проверьте, что область в макете выделена и ей присвоено имя (свойство «Имя» в палитре свойств), а в коде метод ПолучитьОбласть() вызывается с точно такой же строкой, включая регистр букв и отсутствие пробелов.
Как вывести в отчет картинку или логотип?
В макете табличного документа вставьте рисунок в нужную ячейку через меню «Таблица — Рисунки». Если картинка должна меняться в зависимости от данных (например, логотип организации), используйте область-рисунок с именем и в коде присваивайте ей картинку из хранилища значения или двоичных данных.
Почему отчет на СКД не показывает итоги по группировкам?
Чаще всего не заполнена закладка «Ресурсы» в схеме компоновки. Добавьте туда числовые поля с агрегатной функцией, например Сумма(СуммаОборот). Также проверьте, что в настройках у группировки включен вывод общих итогов или итогов по группе.
Как дать пользователю возможность менять отборы, но запретить ломать структуру отчета?
В настройках СКД вынесите нужные отборы и параметры в пользовательские настройки с режимом «Быстрый доступ», а структуру группировок оставьте в основных настройках. Пользователь увидит на форме только разрешенные элементы, а изменить группировки без прав настройки не сможет.