В предыдущей статье приведен пример создания отчета при помощи 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 в списке отчетов:

  1. Выберите отчет 123456701 Salesperson Cust. Sales Profit и щелкните кнопку Design.
  2. Щелкните View > Layout. Откроется Visual Studio с набором данных на основании элементов управления находящихся в секциях отчета.
  3. Перетащите элемент управления Table из панели инструментов в макет отчета.
  4. Щелкните по столбцам, затем щелкните правой кнопкой мыши и выберите Insert Column to the Right.
  5. Дважды повторите шаг 4, чтобы добавить еще два столбца.

Теперь в макете есть таблица с шестью столбцами:

макет с шестью столбцамимакет с шестью столбцами

Примечание: Макет отчета может быть создан автоматически, для этого нужно щелкнуть в Report Designer Tools > Create Layout Suggestion. Если для отчета уже существует макет, то он будет заменен.

Добавление группировки

Набор данных в Visual Studio представляет собой плоские данные. Это означает, что таблицы Salesperson/Purchaser и Customer объединены в одну.

В отличие от классического клиента, где иерархия определялась вложенностью элементов данных, в ролеориентированном клиенте иерархия/группировка задается для каждого элемента управления. В данном случае это элемент управления table. Далее будет показано, как сгруппировать клиентов по сотрудникам, к которым они привязаны.

  1. Выберите элемент управления table, щелкните по нему правой кнопкой мыши и выберите Properties. Появится окно Table Properties.
  2. Table Properties

  3. Перейдите на закладку Groups, затем нажмите кнопку Add. Появится окно Grouping and Sorting Properties.
  4. В колонку Expression введите следующее: =Fields!Salesperson_Purchaser_Code.Value
  5. Выражение

  6. Оставьте остальные свойства без изменений, щелкните кнопку OK и еще раз OK.

Теперь макет отчета должен выглядеть следующим образом:

Макет в Visual StudioМакет в Visual Studio

Таблица включает шесть столбцов и пять строк.

Строка таблицы Примечание
Первая Заголовок таблицы
Вторая Заголовок группы. Была создана при добавлении группировки.
Третья Содержимое группы. Была создана при добавлении группировки.
Четвертая Итог по группе. Была создана при добавлении группировки.
Пятая Итог по таблице

Добавление полей

Далее будет показано, как добавить поля в макет отчета.

  1. Перетащите поля Salesperson_Purchaser_CodeCaption и Salesperson_Purchaser_NameCaption из DataSet – Result в первый и второй столбец первой строки таблицы.
  2. Примечание: Для поддержки многоязыковых сценариев следует использовать свойство Caption вместо того чтобы непосредственно вводить названия столбцов.

  3. Перетащите поля Salesperson_Purchaser_Code и Salesperson_Purchaser_Name в первый и второй столбец второй строки таблицы соответственно.
  4. Перетяните поля Customer__No__Caption, Customer_NameCaption, Customer__Sales__LCY___ControlXCaption и Customer__Profit__LCY___ControlXCaption в соответствующие столбцы первой строки таблицы
  5. Примечание: X это случайное значение, которое зависит от ID элемента в секции отчета. Такое случается если у нескольких элементов управления одинаковые значения в свойстве SourceExpr. Изменить название поля в наборе данных можно с помощью свойства DataSetFieldName соответствующего элемента управления в секции.

  6. Перетяните поля Customer__No__, Customer_Name, Customer__Sales__LCY__ и Customer__Profit__LCY__ в соответствующие столбцы третьей строки.
  7. Выберите поле Customer__Sales__LCY__ (пятый столбец, третья строка таблицы) и установите ему свойство Format: =Fields!Customer__Sales__LCY__Format.Value
  8. Примечание: Свойство format используется для вывода десятичных значений согласно формату, заданному для соответствующего элемента управления в секции отчета.

  9. Выберите поле Customer__Profit__LCY__ (шестой столбец, третья строка таблицы) и установите ему свойство Format: =Fields!Customer__Profit__LCY__Format.Value
  10. Выберите строку заголовка таблицы и установите ей свойство RepeatOnNewPage: True

Теперь макет отчета должен выглядеть следующим образом:

Макет с добавленными полямиМакет с добавленными полями

Добавление общих и промежуточных итогов

Далее будет показано, как добавить промежуточные итоги для каждого сотрудника, а также как добавить общие итоги для всех сотрудников.

  1. Перетащите поля Customer__Sales__LCY__ и Customer__Profit__LCY__ из DataSet - Result в соответствующие столбцы четвертой строки таблицы. Обратите внимание, что в качестве агрегированной функции выбрана функция Sum. Это промежуточные итоги по суммам продаж и прибыли для каждого сотрудника.
  2. Перетащите поля Customer__Sales__LCY__ и Customer__Profit__LCY__ из DataSet - Result в соответствующие столбцы пятой строки таблицы. Это общие итоги для всех сотрудников.
  3. Установите свойство Format для соответствующих ячеек таблицы.
  4. Теперь макет должен выглядеть так:

    Макет с промежуточными и общими итогамиМакет с промежуточными и общими итогами

  5. Закройте Visual Studio, когда система предложит сохранить изменения, щелкните кнопку Yes.
  6. Щелкните в любом месте Report Designer, затем щелкните кнопку Yes, чтобы загрузить макет из Visual Studio.
  7. Сохраните отчет.

Создание страницы запроса

В ролеориентированном клиенте вместо формы запроса используется страница запроса. Ее предназначение точно такое же: ввод пользователем дополнительных параметров перед тем как начнется выполнение отчета.

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

В Report Designer:

  1. Щелкните View > Request Page. Откроется Request Options Page Designer.
  2. Введите в первой строке:
    • Caption: Options
    • Type: Container
    • SubType: ContentArea
  3. Перейдите на следующую строку. Для элемента страницы будет автоматически установлена вложенность.
  4. Введите:
    • Caption: Options
    • Type: Group
    • SubType: Group
  5. Перейдите на следующую строку. Для элемента страницы будет автоматически установлена вложенность.
  6. Введите:
    • Caption: Show Customer Detail
    • Type: Field
    • SourceExpr: CustomerDetail

    Страница запроса должна выглядеть так:

    Страница запроса

  7. Закройте Request Options Page Designer.

Создания макета для дополнительной информации

При трансформации отчета все элементы управления, расположенные в секциях, преобразуются в набор данных для Visual Studio. Этот набор данных может использоваться в Visual Studio Report Designer.

Частью набора данных становятся только те элементы управления, которые расположены в секциях. Поэтому иногда необходимо помещать в секции глобальные/локальные переменные, чтоб они стали доступны в Visual Studio Report Designer. В целях упрощения последующего сопровождения для этих невидимых элементов рекомендуется устанавливать желтый цвет. Таким образом вспомогательные элементы управления легко отличить от элементов управления, которые используются для вывода данных в классическом клиенте.

В Report Designer:

  1. Щелкните View > Sections. Откроется Section Designer.
  2. Добавьте текстовую зону в секцию Customer Body (2), установите для нее следующие свойства:
    • Visible: No
    • SourceExpr: CustomerDetail
    • ForeColor: 65535
  3. Закройте Section Designer.

Ниже будет показано, как изменить макет отчета так, чтобы в нем отображалась дополнительная информация по клиенту.

  1. Щелкните View > Layout. Откроется Visual Studio. Обратите внимание, что теперь в наборе данных доступна переменная CustomerDetail.
  2. Выберите третью строку таблицы, щелкните по ней правой кнопкой мыши и выберите Insert Row Below.
  3. Дважды повторите шаг 2, чтобы добавить еще две строки. Теперь в таблице восемь строк, из них четыре строки отображают содержимое группы.
  4. Строка таблицы Примечание
    Первая Заголовок таблицы
    Вторая Заголовок группы. Была создана при добавлении группировки.
    Третья Содержимое группы. Была создана при добавлении группировки.
    Четвертая Новая строка для отображения содержимого группы.
    Пятая Новая строка для отображения содержимого группы.
    Шестая Новая строка для отображения содержимого группы.
    Седьмая Итог по группе. Была создана при добавлении группировки.
    Восьмая Итог по таблице
  5. Выберите три новые строки (с четвертой по шестую) и установите для них свойство Visibility, Hidden: =NOT(Fields!CustomerDetail.Value)
  6. Перетащите поля Customer_Address, Customer_Contact и Customer_E_Mail_ в столбец Customer_Name, в четвертую, пятую и шестую строки соответственно.
  7. Теперь макет должен выглядеть так:

    Макет с дополнительной информациейМакет с дополнительной информацией

  8. Закройте Visual Studio, когда система предложит сохранить изменения, щелкните кнопку Yes.
  9. Щелкните в любом месте Report Designer, затем щелкните кнопку Yes, чтобы загрузить макет из Visual Studio.
  10. Сохраните отчет и закройте Report Designer.

Интеграция отчета в ролеориентированный клиент

Чтобы пользователь смог просматривать отчет Salesperson Cust. Sales Profit, нужно модифицировать его ролевой центр, добавив в него ссылку на запуск отчета.

В Object Designer в списке станиц:

  1. Выберите страницу 9006 Order Processor Role Center, затем щелкните кнопку Design.
  2. Перейдите на пустую строку и щелкните View > Actions, чтобы открыть Action Designer.
  3. Выберите разделитель под действием Price List и нажмите клавишу F3, чтобы вставить новую пустую строку.
  4. Введите в этой строке следующее:
    • Caption: Salesperson Cust. Sales Profit
    • Type: Action
  5. В этой же строке установите свойство:
    • RunObject: Report Salesperson Cust. Sales Profit
  6. Сохраните страницу и закройте 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