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