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

Создание отчета для классического клиента

В качестве примера будет создан отчет «Менеджеры-Клиенты Продажи и Прибыль» (Salesperson's Customer Sales and Profit). В отчет должны выводиться клиенты компании Cronus с указанием сумм продаж и прибыли в локальной валюте. Клиенты должны быть сгруппированы по менеджерам. Кроме того в отчете должна быть возможность фильтрации по дате. При необходимости в отчет должна выводиться дополнительная информация по клиентам.

В данном разделе будет показано, как в Report Designer определить модель данных и логическую структуру отчета. Также будет создана форма запроса, чтобы пользователь мог задать дополнительные параметры перед формированием отчета.

Создание пустого отчета

Обычно для создания отчетов используется Мастер Отчетов. Чтобы создать отчет с нуля требуется выполнить следующие шаги.

В Microsoft Dynamics NAV Classic Client:

  1. Щелкните Tools > Object Designer. Откроется Object Designer.
  2. Щелкните кнопку Report, чтобы открыть список отчетов.
  3. Щелкните кнопку New. Откроется окно New Report.
  4. Щелкните кнопку OK чтобы создать пустой отчет. Откроется Report Designer.

В данный момент в отчете нет никаких элементов данных.

Определение элементов данных

Модель данных отчета базируется на элементах данных (data item). Элементы данных связаны с таблицами. Если отчет базируется на нескольких таблицах, задавая вложенность элементов данных можно влиять на процесс получения данных.

В Report Designer:

  1. Введите следующую информацию:
  2. Data Item
    Salesperson/Purchaser
    Customer
  3. Выберите элемент данных Salesperson/Purchaser и щелкните View > Properties. Откроется окно Properties для элемента данных Salesperson/Purchaser.
  4. Установите следующие значения в свойствах:
    • DataItemTableView: SORTING(Code) ORDER(Ascending)
    • PrintOnlyIfDetail: Yes
  5. Закройте окно Properties.
  6. Выберите элемент данных Customer и щелкните View > Properties. Откроется окно Properties для элемента данных Customer.
  7. Установите следующие значения в свойствах:
    • DataItemIndent: 1
    • DataItemTableView: SORTING(No.) ORDER(Ascending)
    • DataItemLink: Salesperson Code=FIELD(Code)
    • ReqFilterFields: Date Filter
    • TotalFields: Sales (LCY),Profit (LCY)

    Теперь окно Customer Properties должно выглядеть так

    Customer Properties

  8. Закройте окно Properties
  9. Отчет должен выглядеть так:

    Properties

  10. Выберите элемент данных Customer и щелкните View > C/AL Code. Откроется C/AL Editor.
  11. Чтобы исключить из отчета клиентов, у которых сумма продаж и прибыли равны нулю, добавьте следующий код в триггер OnAfterGetRecord:
  12. IF (Customer."Sales (LCY)" = 0) AND (Customer."Profit (LCY)"=0) THEN
       CurrReport.SKIP;
  13. Закройте C/AL Editor.
  14. Щелкните File > Save As чтобы сохранить отчет. Появится диалоговое окно Save As.
  15. В поле ID введите 123456701, а в поле Name введите Salesperson Cust. Sales Profit, затем щелкните кнопку OK.

Создание секций

Следующим шагом в создании отчета является создание секций. С элементом данных может быть связана одна и более секций. Существует несколько видов секций, у каждой из них свое предназначение. В секции Body обычно печатается основная масса данных, в то время как секция header используется, например, для вывода заголовков столбцов. Также существуют отчеты, где секция Body вовсе не используется, а вся информация печатается в других секциях. Ниже будет показано, как Section Designer используется для создания секций отчета.

В Report Designer:

  1. Щелкните View > Sections. Откроется Section Designer. В настоящий момент в отчете две секции: Salesperson/Purchaser Body и Customer Body.
  2. Нажмите клавишу F3. Откроется окно Insert New Section.
  3. Вставьте секции header и footer для каждого элемента данных. Теперь в отчете шесть секций.
  4. Выберите секцию Salesperson/Purchaser Body и щелкните View > Field Menu, чтобы открыть окно Field Menu.
  5. Выберите поле Code и Name, затем дважды щелкните мышью в секции Salesperson/Purchaser Body. Теперь поля Code и Name таблицы Salesperson/Purchaser добавлены в секцию Salesperson/Purchaser Body.
  6. Перетащите надписи (label) в секцию Salesperson/Purchaser Header.
  7. Выберите секцию Customer Body, затем щелкните View > Field Menu, чтобы открыть окно Field Menu.
  8. Выберите поля No., Name, Sales (LCY) и Profit (LCY), затем дважды щелкните мышью в секции Customer Body. Теперь поля No., Name, Sales (LCY) и Profit (LCY) таблицы Customer добавлены в секцию Customer Body.
  9. Перетащите надписи в секцию Customer Header.

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

Секции отчета в классическом клиенте

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

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

В Section Designer:

  1. Выберите секцию Customer Footer, затем щелкните View > Field Menu, чтобы открыть окно Field Menu.
  2. Выберите поля Sales (LCY) и Profit (LCY), затем дважды щелкните мышью в секции Customer Footer. Теперь поля Sales (LCY) и Profit (LCY) таблицы Customer добавлены в секцию Customer Footer.
  3. Удалите надписи.

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

Секции отчета с промежуточными итогами

Добавление общих итогов

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

В Section Designer:

  1. Выберите секцию Salesperson/Purchaser Footer и добавьте в него две текстовых зоны (text box).
  2. Укажите в свойствах SourceExpr каждой текстовой зоны значения Customer.“Sales (LCY)” и Customer.“Profit (LCY)” соответственно.
  3. Секции должны выглядеть следующим образом:

    Секции отчета с общими итогами

  4. Вернитесь в Report Designer и выберите элемент данных Salesperson/Purchaser.
  5. Щелкните View > C/AL Code. Откроется C/AL Editor.
  6. Добавьте следующий код в триггер OnPreDataItem:
  7. CurrReport.CREATETOTALS(Customer."Sales (LCY)",Customer."Profit (LCY)");
  8. Закройте C/AL Editor.
  9. Cохраните отчет.

Создание формы запроса

Форма запроса – это форма, которая появляется перед тем, как начнется выполнение отчета. Она используется для ввода пользователем дополнительных параметров, таких как порядок сортировки или уровень детализации.

Данная форма по умолчанию содержит закладки, которые связаны с элементами данных отчета. Для ввода дополнительных параметров можно создать закладку Options. Закладка Options это последняя закладка в форме запроса, она отображается, если на ней есть элементы управления. При использовании закладки Options обычно требуется добавить код в некоторые триггеры формы запроса.

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

В Report Designer:

  1. Щелкните View > C/AL Globals. Откроется окно C/AL Global.
  2. На закладке Variables введите:
  3. Name DataType
    CustomerDetail Boolean
  4. Закройте окно C/AL Global.
  5. Щелкните View > Request Form. Откроется Request Options Form Designer.
  6. Добавьте выключатель (check box) на форму и установите следующие значения в его свойствах:
    • SourceExpr: CustomerDetail
    • Caption: Show Customer Detail
  7. Форма запроса должна выглядеть следующим образом:

    Форма запроса

  8. Закройте the Request Options Form Designer.

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

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

В Section Designer:

  1. Выберите секцию Customer Body (2).
  2. Вставьте новую секцию body для элемента данных Customer и поместите ее под текущей секцией. Теперь в отчете семь секций.
  3. Выберите секцию Customer Body (3), затем щелкните View > Field Menu, чтобы открыть окно Field Menu.
  4. Выберите поля Address, Contact и E-mail, затем дважды щелкните мышью в секции Customer Body (3). Теперь поля Address, Contact и E-mail таблицы Customer добавлены в секцию Customer Body (3).
  5. Удалите надписи и разместите элементы как показано на рисунке:
  6. Секция для дополнительной информации

  7. Выберите секцию Customer Body (3) и щелкните View > C/AL Code, чтобы открыть C/AL Editor.
  8. Добавьте следующий код в триггер OnPreSection:
  9. CurrReport.SHOWOUTPUT(CustomerDetail);
  10. Сохраните отчет.
  11. Закройте Section Designer и Report Designer.

Просмотр отчета в классическом клиенте

В Object Designer в списке отчетов:

  1. Выберите отчет 123456701 Salesperson Cust. Sales Profit и щелкните кнопку Run.
  2. Перейдите на закладку Options, ничего не вводите на закладке Customer.
  3. Установите флажок в поле Show Customer Detail и щелкните кнопку Preview.

Отчет в классическом клиенте Microsoft Dynamics NAV 2009Отчет в классическом клиенте Microsoft Dynamics NAV 2009

 

Согласно рекомендациям Microsoft вначале выполняется разработка отчета для классического клиента, а затем в него включаются дополнительные компоненты, позволяющие формировать отчет из ролеориентированного клиента. О дополнительных компонентах в следующей главе Разработка отчета для ролеориентированного клиента.

Андрей Панько >>
Dynamics NAV MVP
apanko@rabota-na-rezultat.ru