5.2. Запуск отчётов из экранов
Отчёты можно запускать из произвольных экранов системы, используя специальные действия и связанные с ними кнопки или элементы контекстного меню компонентов. При этом кроме доступности отчёта в соответствии с ролью пользователя проверяется также его принадлежность данному экрану.
Рассмотрим типы действий и примеры их использования.
-  com.haulmont.reports.gui.actions.RunReportAction– действие, отображающее список всех доступных отчётов. При выборе пользователем отчёта из списка отображается форма ввода параметров (если они заданы), и отчёт запускается на исполнение.Пример использования действия совместно с кнопкой, объявленной в XML-дескрипторе экрана: -  XML-дескриптор <layout> <groupTable id="booksTable"> ... <buttonsPanel id="buttonsPanel"> ... <button id="reportButton" icon="PRINT"/> </buttonsPanel> </groupTable>
-  Контроллер @Inject private Button reportButton; @Subscribe private void onInit(InitEvent event) { reportButton.setAction(new RunReportAction("report")); }
-  messages.properties report = Report
 
-  
-  com.haulmont.reports.gui.actions.TablePrintFormAction– действие, связанное с таблицей, отображающей список экземпляров сущности. Действие отбирает только те отчёты, которые имеют внешний параметр типа Entity или List of entities, и тип сущности параметра совпадает с типом сущности, отображаемой таблицей. Если в результате отбора доступен только один отчёт, он сразу запускается на выполнение. Если доступно несколько отчётов, их список предлагается пользователю.В отчёт передается значение внешнего параметра по следующим правилам: -  Если параметр типа List of entities, то в него передается список выбранных в данный момент в таблице экземпляров. 
-  Если параметр типа Entity, и в таблице выбран один экземпляр (выделена одна строка), то в отчёт передается этот экземпляр. 
-  Если параметр типа Entity, а в таблице выделено несколько строк, то отчёт выполняется несколько раз по числу выбранных экземпляров. После выполнения пользователю возвращается один ZIP архив, в котором находятся все сформированные отчёты. 
 Пример использования с кнопкой и контекстным меню таблицы: -  XML-дескриптор <layout> <groupTable id="booksTable"> ... <buttonsPanel id="buttonsPanel"> ... <button id="reportButton" icon="PRINT"/> </buttonsPanel> </groupTable>
-  Контроллер @Inject private Button reportButton; @Inject private GroupTable<Book> booksTable; @Subscribe private void onInit(InitEvent event) { TablePrintFormAction action = new TablePrintFormAction("report", booksTable); booksTable.addAction(action); reportButton.setAction(action); }
-  messages.properties report = Report
 
-  
-  com.haulmont.reports.gui.actions.EditorPrintFormAction– действие, связанное с экраном редактирования экземпляра сущности. Действие отбирает только те отчёты, которые имеют внешний параметр типа Entity или List of entities, и тип сущности параметра совпадает с типом редактируемой сущности. Если в результате отбора доступен только один отчёт, он сразу запускается на выполнение. Если доступно несколько отчётов, их список предлагается пользователю.В отчёт передается значение внешнего параметра – экземпляр редактируемой сущности. Если тип параметра – List of entities, то передается список из одного элемента. Пример использования с кнопкой, размещенной рядом со стандартными кнопками OK и Cancel: -  XML-дескриптор 
 
-  
<layout expand="editActions" spacing="true">
    ...
    <hbox id="editActions" spacing="true">
        <button action="windowCommitAndClose"/>
        <button action="windowClose"/>
        <button id="reportButton" icon="PRINT"/>
    </hbox>
</layout>-  Контроллер @Inject private Button reportButton; @Subscribe private void onBeforeShow(BeforeShowEvent event) { reportButton.setAction(new EditorPrintFormAction("report", this, null)); }
-  messages.properties report = Report