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

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

Как добавить отчет на форму 1С: практическое руководство

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

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

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

Определите, какой способ вам подходит

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

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

Маршрут решения

Как выбрать способ

Нужна просто кнопка, открывающая отчетДобавьте команду формы с вызовом ОткрытьФорму отчета и параметрами отбора
Результат отчета должен отображаться на самой формеСоздайте реквизит формы типа ТабличныйДокумент и формируйте отчет программно
Конфигурация типовая и обновляетсяИспользуйте расширение конфигурации, не изменяйте типовые объекты
Отчет должен строиться по данным текущего объектаПередавайте ссылку объекта в параметры СКД через структуру при открытии

Подготовка: что проверить перед доработкой

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

Проверьте права: у пользователей, которые будут работать с формой, должно быть право «Просмотр» на отчет. Иначе кнопка появится, но при нажатии возникнет ошибка нарушения прав доступа. Также определите, какие параметры отчета нужно заполнять автоматически — обычно это период и ссылка на объект формы.

Способ 1. Команда формы, открывающая отчет

Это самый распространенный и безопасный вариант. Откройте нужную форму в конфигураторе (или заимствуйте ее в расширение), перейдите на вкладку «Команды» — «Команды формы» и добавьте новую команду, например «ОтчетПоКонтрагенту». В свойстве «Действие» создайте обработчик на клиенте.

В обработчике откройте форму отчета с параметрами отбора. Типовой код выглядит так:

&НаКлиенте

Процедура ОтчетПоКонтрагенту(Команда)

ПараметрыОтбора = Новый Структура;

ПараметрыОтбора.Вставить("Контрагент", Объект.Ссылка);

ПараметрыФормы = Новый Структура;

ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора);

ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);

ОткрытьФорму("Отчет.ПродажиПоКонтрагентам.Форма",

ПараметрыФормы, ЭтотОбъект, УникальныйИдентификатор);

КонецПроцедуры

Затем перетащите команду в дерево элементов формы — в командную панель, подменю «Еще» или рядом с нужным полем в виде кнопки. Укажите заголовок и при необходимости картинку. После обновления конфигурации кнопка появится у пользователей.

Порядок добавления кнопки отчета
  1. 1
    Откройте форму в конфигураторе или заимствуйте ее в расширение
  2. 2
    Создайте команду формы и обработчик на клиенте
  3. 3
    В обработчике сформируйте структуру отбора и вызовите ОткрытьФорму с параметрами
  4. 4
    Перетащите команду в командную панель или подменю формы
  5. 5
    Обновите конфигурацию и проверьте кнопку под обычным пользователем

Способ 2. Отчет как элемент формы с табличным документом

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

Для отчета на СКД формирование выполняется через компоновщик: получаете схему из отчета, заполняете настройки, выводите в табличный документ:

&НаСервере

Процедура СформироватьОтчетНаСервере()

ОтчетОбъект = Отчеты.ОстаткиТоваров.Создать();

Схема = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

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

Макет = Компоновщик.Выполнить(Схема,

ОтчетОбъект.КомпоновщикНастроек.Настройки);

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновки.Инициализировать(Макет);

РезультатОтчета.Очистить();

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

ПроцессорВывода.УстановитьДокумент(РезультатОтчета);

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

КонецПроцедуры

Учтите, что при больших объемах данных формирование на сервере блокирует сеанс пользователя. Для тяжелых отчетов используйте фоновое выполнение через ДлительныеОперации с выводом индикатора, иначе форма будет «висеть» до окончания формирования.

Способ 3. Добавление через расширение конфигурации

Расширение — рекомендуемый путь для типовых конфигураций. В конфигураторе откройте «Конфигурация» — «Расширения конфигурации», создайте новое расширение с префиксом, например «Доп_». Затем в основной конфигурации найдите нужную форму, вызовите контекстное меню и выберите «Добавить в расширение».

В заимствованной форме можно добавлять собственные команды, реквизиты и элементы, а также свои обработчики событий с директивами &После, &Вместо, &ИзменениеИКонтроль. Для добавления кнопки отчета обычно достаточно создать команду и разместить ее в командной панели — типовой код при этом не меняется.

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

Передача параметров и отборов в отчет

Чтобы отчет открывался уже отфильтрованным по данным формы, параметры передаются через структуру «Отбор» при вызове ОткрытьФорму. Имена ключей структуры должны совпадать с именами полей отбора в настройках СКД отчета — например, «Контрагент», «Организация», «Номенклатура».

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

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

Типичные ошибки
01
Несовпадение имени ключа в структуре отбора с именем поля в СКД — отбор не применяется без сообщения об ошибке
02
Формирование тяжелого отчета на сервере синхронно — форма зависает у пользователя на время расчета
03
Отсутствие проверки заполненности ссылки: для нового несохраненного объекта отчет строится по пустой ссылке
04
Изменение типовой формы напрямую вместо расширения — конфликты и потеря доработки при обновлении
05
Забытое право на отчет у роли пользователя — кнопка есть, но при нажатии ошибка доступа

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

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

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

Контрольные точки

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

Кнопка отображается на форме
Норма

Кнопка видна в командной панели у пользователя с рабочей ролью

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

Кнопки нет — команда не выведена в элементы формы или нет прав

Отбор применяется
Норма

В сформированном отчете только данные по текущему объекту

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

Отчет показывает все данные — не совпали имена полей отбора

Новый несохраненный объект
Норма

Выводится понятное предупреждение о необходимости записи

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

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

Время формирования
Норма

Отчет формируется за приемлемое время, форма отзывчива

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

Форма блокируется надолго — нужен фоновый режим

FAQ

Можно ли добавить отчет на форму без изменения конфигурации?

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

Почему отбор не применяется при открытии отчета из формы?

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

Как вывести отчет на форму внешней обработки?

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

Что делать, если при нажатии кнопки возникает ошибка нарушения прав?

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

Как сделать, чтобы отчет на форме обновлялся автоматически?

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

Можно ли добавить на форму отчет, которого нет в конфигурации?

Да. Либо добавьте отчет в состав расширения (расширения поддерживают собственные отчеты), либо храните его как внешний файл .erf и открывайте программно. Второй вариант требует аккуратной работы с безопасным режимом и не подходит для веб-клиента без дополнительных настроек.

Итог

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

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