В предыдущей статье приведен пример создания отчета при помощи Report Designer для классического клиента. В этой статье будет рассказано, как при помощи Visual Studio включить дополнительные компоненты, которые позволят формировать отчет из ролеориентированного клиента.
Создание отчета для ролеориентированного клиента
В Microsoft Dynamics NAV процесс создания отчета состоит из трех этапов:
- Определение модели данных – таблицы и поля, на которых базируется отчет.
- Добавление группировок и итогов в отчет.
- Создание секций отчета.
Все эти шаги были выполнены в разделе Создание отчета для классического клиента. Однако чтобы отчет стал доступен в ролеориентированном клиенте нужно выполнить дополнительные шаги:
- Создать макет отчета.
- Создать страницу запроса.
- Интегрировать отчет в ролеориентированный клиент.
В данном разделе продолжается работа над отчетом 123456701 Salesperson Cust. Sales Profit.
Подготовка к созданию макета
Перед тем как приступать к созданию макета отчета убедитесь, что для каждой текстовой зоны, используемой в секциях отчета, заполнены свойства Caption, CaptionML и Format.
Создание макета
Ниже будет показано, как создать макет отчета с помощью Microsoft Visual Studio (http://msdn.microsoft.com/en-us/library/dd568716.aspx).
В Object Designer в списке отчетов:
- Выберите отчет 123456701 Salesperson Cust. Sales Profit и щелкните кнопку Design.
- Щелкните View > Layout. Откроется Visual Studio с набором данных на основании элементов управления находящихся в секциях отчета.
- Перетащите элемент управления Table из панели инструментов в макет отчета.
- Щелкните по столбцам, затем щелкните правой кнопкой мыши и выберите Insert Column to the Right.
- Дважды повторите шаг 4, чтобы добавить еще два столбца.
Теперь в макете есть таблица с шестью столбцами:
Примечание: Макет отчета может быть создан автоматически, для этого нужно щелкнуть в Report Designer Tools > Create Layout Suggestion. Если для отчета уже существует макет, то он будет заменен.
Добавление группировки
Набор данных в Visual Studio представляет собой плоские данные. Это означает, что таблицы Salesperson/Purchaser и Customer объединены в одну.
В отличие от классического клиента, где иерархия определялась вложенностью элементов данных, в ролеориентированном клиенте иерархия/группировка задается для каждого элемента управления. В данном случае это элемент управления table. Далее будет показано, как сгруппировать клиентов по сотрудникам, к которым они привязаны.
- Выберите элемент управления table, щелкните по нему правой кнопкой мыши и выберите Properties. Появится окно Table Properties.
- Перейдите на закладку Groups, затем нажмите кнопку Add. Появится окно Grouping and Sorting Properties.
- В колонку Expression введите следующее:
=Fields!Salesperson_Purchaser_Code.Value - Оставьте остальные свойства без изменений, щелкните кнопку OK и еще раз OK.

Теперь макет отчета должен выглядеть следующим образом:
Таблица включает шесть столбцов и пять строк.
| Строка таблицы | Примечание |
| Первая | Заголовок таблицы |
| Вторая | Заголовок группы. Была создана при добавлении группировки. |
| Третья | Содержимое группы. Была создана при добавлении группировки. |
| Четвертая | Итог по группе. Была создана при добавлении группировки. |
| Пятая | Итог по таблице |
Добавление полей
Далее будет показано, как добавить поля в макет отчета.
- Перетащите поля Salesperson_Purchaser_CodeCaption и Salesperson_Purchaser_NameCaption из DataSet – Result в первый и второй столбец первой строки таблицы.
- Перетащите поля Salesperson_Purchaser_Code и Salesperson_Purchaser_Name в первый и второй столбец второй строки таблицы соответственно.
- Перетяните поля Customer__No__Caption, Customer_NameCaption, Customer__Sales__LCY___ControlXCaption и Customer__Profit__LCY___ControlXCaption в соответствующие столбцы первой строки таблицы
- Перетяните поля Customer__No__, Customer_Name, Customer__Sales__LCY__ и Customer__Profit__LCY__ в соответствующие столбцы третьей строки.
- Выберите поле Customer__Sales__LCY__ (пятый столбец, третья строка таблицы) и установите ему свойство Format:
=Fields!Customer__Sales__LCY__Format.Value - Выберите поле Customer__Profit__LCY__ (шестой столбец, третья строка таблицы) и установите ему свойство Format:
=Fields!Customer__Profit__LCY__Format.Value - Выберите строку заголовка таблицы и установите ей свойство RepeatOnNewPage:
True
Примечание: Для поддержки многоязыковых сценариев следует использовать свойство Caption вместо того чтобы непосредственно вводить названия столбцов.
Примечание: X это случайное значение, которое зависит от ID элемента в секции отчета. Такое случается если у нескольких элементов управления одинаковые значения в свойстве SourceExpr. Изменить название поля в наборе данных можно с помощью свойства DataSetFieldName соответствующего элемента управления в секции.
Примечание: Свойство format используется для вывода десятичных значений согласно формату, заданному для соответствующего элемента управления в секции отчета.
Теперь макет отчета должен выглядеть следующим образом:
Добавление общих и промежуточных итогов
Далее будет показано, как добавить промежуточные итоги для каждого сотрудника, а также как добавить общие итоги для всех сотрудников.
- Перетащите поля Customer__Sales__LCY__ и Customer__Profit__LCY__ из DataSet - Result в соответствующие столбцы четвертой строки таблицы. Обратите внимание, что в качестве агрегированной функции выбрана функция Sum. Это промежуточные итоги по суммам продаж и прибыли для каждого сотрудника.
- Перетащите поля Customer__Sales__LCY__ и Customer__Profit__LCY__ из DataSet - Result в соответствующие столбцы пятой строки таблицы. Это общие итоги для всех сотрудников.
- Установите свойство Format для соответствующих ячеек таблицы.
- Закройте Visual Studio, когда система предложит сохранить изменения, щелкните кнопку Yes.
- Щелкните в любом месте Report Designer, затем щелкните кнопку Yes, чтобы загрузить макет из Visual Studio.
- Сохраните отчет.
Теперь макет должен выглядеть так:
Создание страницы запроса
В ролеориентированном клиенте вместо формы запроса используется страница запроса. Ее предназначение точно такое же: ввод пользователем дополнительных параметров перед тем как начнется выполнение отчета.
Ниже будет показано, как создать страницу запроса, в которой пользователь сможет указать требуется ли выводить в отчет дополнительную информацию о клиенте.
В Report Designer:
- Щелкните View > Request Page. Откроется Request Options Page Designer.
- Введите в первой строке:
- Caption: Options
- Type: Container
- SubType: ContentArea
- Перейдите на следующую строку. Для элемента страницы будет автоматически установлена вложенность.
- Введите:
- Caption: Options
- Type: Group
- SubType: Group
- Перейдите на следующую строку. Для элемента страницы будет автоматически установлена вложенность.
- Введите:
- Caption: Show Customer Detail
- Type: Field
- SourceExpr: CustomerDetail
- Закройте Request Options Page Designer.
Страница запроса должна выглядеть так:
Создания макета для дополнительной информации
При трансформации отчета все элементы управления, расположенные в секциях, преобразуются в набор данных для Visual Studio. Этот набор данных может использоваться в Visual Studio Report Designer.
Частью набора данных становятся только те элементы управления, которые расположены в секциях. Поэтому иногда необходимо помещать в секции глобальные/локальные переменные, чтоб они стали доступны в Visual Studio Report Designer. В целях упрощения последующего сопровождения для этих невидимых элементов рекомендуется устанавливать желтый цвет. Таким образом вспомогательные элементы управления легко отличить от элементов управления, которые используются для вывода данных в классическом клиенте.
В Report Designer:
- Щелкните View > Sections. Откроется Section Designer.
- Добавьте текстовую зону в секцию Customer Body (2), установите для нее следующие свойства:
- Visible: No
- SourceExpr: CustomerDetail
- ForeColor: 65535
- Закройте Section Designer.
Ниже будет показано, как изменить макет отчета так, чтобы в нем отображалась дополнительная информация по клиенту.
- Щелкните View > Layout. Откроется Visual Studio. Обратите внимание, что теперь в наборе данных доступна переменная CustomerDetail.
- Выберите третью строку таблицы, щелкните по ней правой кнопкой мыши и выберите Insert Row Below.
- Дважды повторите шаг 2, чтобы добавить еще две строки. Теперь в таблице восемь строк, из них четыре строки отображают содержимое группы.
- Выберите три новые строки (с четвертой по шестую) и установите для них свойство Visibility, Hidden:
=NOT(Fields!CustomerDetail.Value) - Перетащите поля Customer_Address, Customer_Contact и Customer_E_Mail_ в столбец Customer_Name, в четвертую, пятую и шестую строки соответственно.
- Закройте Visual Studio, когда система предложит сохранить изменения, щелкните кнопку Yes.
- Щелкните в любом месте Report Designer, затем щелкните кнопку Yes, чтобы загрузить макет из Visual Studio.
- Сохраните отчет и закройте Report Designer.
| Строка таблицы | Примечание |
| Первая | Заголовок таблицы |
| Вторая | Заголовок группы. Была создана при добавлении группировки. |
| Третья | Содержимое группы. Была создана при добавлении группировки. |
| Четвертая | Новая строка для отображения содержимого группы. |
| Пятая | Новая строка для отображения содержимого группы. |
| Шестая | Новая строка для отображения содержимого группы. |
| Седьмая | Итог по группе. Была создана при добавлении группировки. |
| Восьмая | Итог по таблице |
Теперь макет должен выглядеть так:
Интеграция отчета в ролеориентированный клиент
Чтобы пользователь смог просматривать отчет Salesperson Cust. Sales Profit, нужно модифицировать его ролевой центр, добавив в него ссылку на запуск отчета.
В Object Designer в списке станиц:
- Выберите страницу 9006 Order Processor Role Center, затем щелкните кнопку Design.
- Перейдите на пустую строку и щелкните View > Actions, чтобы открыть Action Designer.
- Выберите разделитель под действием Price List и нажмите клавишу F3, чтобы вставить новую пустую строку.
- Введите в этой строке следующее:
- Caption: Salesperson Cust. Sales Profit
- Type: Action
- В этой же строке установите свойство:
- RunObject: Report Salesperson Cust. Sales Profit
- Сохраните страницу и закройте Page Designer.
Также отчет можно запустить, щелкнув кнопку Пуск > Выполнить (Win+R) и указав DynamicsNAV:////runreport?report=123456701. Это особенно полезно на этапе тестирования отчета.
Просмотр отчета в ролеориентированном клиенте
Чтобы просмотреть отчет запустите ролеориентированный клиент с профилем Order Processor (в демонстрационной базе этот профиль используется по умолчанию).
На панели действий в пункте Report щелкните по новому пункту Salesperson Cust. Sales Profit, чтобы запустить отчет. Появится страница запроса:

Установите флажок в поле Show Customer Detail и щелкните кнопку Preview
Обратите внимание на кнопку Save As (дискета). При нажатии на нее появляется выпадающее меню с возможностью сохранить документ в формате PDF или в MS Excel.
В данном примере было показано, как использовать Report Designer и Visual Studio при создании отчетов, которые могут отображаться как в классическом, так и в ролеориентированном клиенте. В данном примере не были показаны новые возможности по отображению данных и интерактивные возможности.
Андрей Панько >>
Dynamics NAV MVP
apanko@rabota-na-rezultat.ru











