Одним из существенных изменений, появившихся в Dynamics NAV 2009, стал новый способ представления данных конечному пользователю. Обычно данные хранятся в таблицах базы данных, при этом структура таблиц базы данных диктуется требованиями нормализации, а не удобством пользователя. Для  доступа к данным пользователь использует отдельные механизмы. В предыдущей версии, Dynamics NAV 5.0, это были формы и отчеты.

В версии 2009 вместо объектов Формы стали использоваться объекты Страницы. Также изменения затронули объекты Отчеты. Теперь при формировании отчетов используется технология SQL Reporting Services, а макет отчета создается в Visual Studio.

Если фраза «макет отчета теперь создается в Visual Studio» вас печалит, не отчаивайтесь. Во-первых, стоит отметить, что в ролеориентированный клиент NAV2009 включена поддержка классических отчетов. Это значит, что если из ролеориентированного клиента запустить отчет, для  которого не был создан макет, то будет открыт классический клиент, а в нем будет запущена классическая версия отчета. Эта возможность позволяет выполнять переход на ролеориентированный клиент постепенно. Кроме того, как оказалось на практике, новые возможности полностью компенсируют дискомфорт, связанный с изучением нового продукта. В частности SQL Reporting Services позволяет:

Чтобы использовать преимущества, которые предоставляют новые технологии, потребуется использовать трехзвенную архитектуру (SQL Server – Dynamics NAV Server– Roleoriented Client). Разработка отчетов по-прежнему выполняется в классическом клиенте, за исключением макета, который, как уже отмечалось выше, создается в Visual Studio. В отличие от страниц – новых объектов, которые в ролеориентированном клиенте заменили формы, отчет для классического клиента и отчет для ролеориентированного клиента это по-прежнему один объект. Теперь он состоит не только из знакомых компонентов:

Но также включает новые компоненты:

Так как для большинства программирующих консультантов SQL Reporting Services и Visual Studio являются новыми технологиями, в серии статей планируется дать довольно детальное описание большинства способов, которые могут пригодиться при работе с отчетами в Dynamics NAV 2009. В данной же статье мы ограничимся обзором инструментария, с которым нам предстоит работать.

Итак, приступим. Для начала нужно добыть Visual Studio. Нужен не весь пакет достаточно скачать Microsoft Visual Web Developer 2008 Express Edition с сайта http://www.microsoft.com/express/download/default.aspx. Это бесплатная версия, единственно, что возможно придется зарегистрироваться (бесплатно) в течение 30 дней. Кроме того, потребуется установить Microsoft Report Viewer Add-on for Visual Web Developer 2008 Express Edition (http://www.microsoft.com/downloads/details.aspx?FamilyID=b67b9445-c206-4ff7-8716-a8129370fa1d&displaylang=en). После того как все требуемые программы установлены (включая NAV и SQL Server) можно приступать.

В Microsoft Dynamics NAV Classic Client:

  1. Щелкните Tools > Object Designer. Откроется Object Designer.
  2. Щелкните кнопку Report, чтобы открыть список отчетов.
  3. Найдите отчет 1 Chart of Accounts (в отчете ничего менять не планируется, поэтому это может быть любой отчет).

Рассмотрим какие новые опции появились в дизайнере отчетов.

  1. Щелкните View. Среди знакомых пунктов меню появилось новые:
    • Request Page – открывает Request Option Page Designer, который используется при создании и редактировании страницы запроса.
    • Actions – открывает Actions Designer, активен при открытом Request Option Page Designer
    • Layout – открывает Visual Studio для создания или редактирования макета отчета.
  2. Щелкните View. Среди знакомых пунктов меню появилось новые:
    • Create Layout Suggestion – при выборе данного пункта система автоматически создаст макет отчета в Visual Studio на основании секций отчета. Обратите внимание, что новый макет заменит существующий.
    • Delete Layout – удаляет макет отчета.
  3. Так как для данного отчета уже существует макет, то для просмотра и редактирования макета щелкните View > Layout. Откроется Visual Studio.

Изначально окно должно выглядеть так:

Начало редактирования отчета в Visual StudioНачало редактирования отчета в Visual Studio

Поясню, что мы видим на рисунке. В первую очередь обратим внимание на окна:

Кроме того, в верхней части окна находятся панели инструментов:

Visual Studio представляет разработчику широкие возможности по настройке своего рабочего места. Мне видится удобной работа с такими настройками окон:

Возможности Visual Studio для разработчикаВозможности Visual Studio для разработчика

Рассмотрим некоторые моменты детальнее.

Как видно на рисунке, в макете можно создать секции Page Header и Body. Как не трудно догадаться, также можно создать секцию Page Footer. Чтобы добавить секцию Page Header щелкните Report > Page Header. Чтобы добавить секцию Page Footer щелкните Report > Page Footer. Также можно щелкнуть правой кнопкой мыши по серой области в окно Report.rdlc, затем выбрать в контекстном меню соответствующий пункт. Обратите внимание, что при выключении секций Page Header или Page Footer, система удаляет все расположенные на них элементы управления. К счастью в Visual Studio работает многошаговая отмена.

Итого в макете может быть три секции, при этом каждая секция выводится один раз (в отличие от классического клиента, где секция body выводилась столько раз, сколько записей обрабатывалось в элементе данных). В макете для вывода повторяющихся данных используется элемент управления Table – таблица. В ней тоже можно создать заголовок, строки, а также она используется для создания промежуточных и общих итогов.

Раз зашла речь о таблицах стоит отметить одну особенность. В классическом клиенте вложенные элементы данных (таблицы) обрабатывались последовательно. Т.е. сначала таблица Менеджеры, а затем таблица Клиенты, которая связана с таблицей Менеджеры (связь один-ко-многим). В SQL Reporting Services передается только одна плоская (flattened) таблица - результат объединения двух исходных таблиц. Т.е. эта таблица будет содержать и поля из таблицы Менеджеры и поля из таблицы Клиенты.

Пример. В классическом клиенте:

В SQL Reporting Services таблица будет одна:

При этом в плоскую таблицу попадут не все существующие поля исходных таблиц, а только те, которые присутствуют в секциях отчета. Кроме того если в секциях таблицы есть элементы управления, у которых в свойстве SourceExpr указаны переменные (локальные или глобальные), то эти переменные тоже станут полями плоской таблицы.

Группировка данных (в данном примере это группировка по менеджеру) выполняется с помощью настройки соответствующих свойств у элемента управления Table, вставленного в секцию Body.

В завершение рассмотрим, что происходит при выборе пункта меню View > Layout в Repopt Designer классического клиента. При выборе пункта меню View > Layout система выгружает (создает, если макета не существовало) проект Visual Studio в папке C:\Users\<пользователь>\AppData\Local\Temp\Microsoft Dynamics Nav\Report1\ReportLayout, в проект входят следующие файлы:

Далее запускается Visual Studio и в ней открывается проект. Хотя в этом нет необходимости, но запустить Visual Studio и открыть проект можно вручную, для этого нужно щелкнуть мышью по файлу ReportLayout.sln.

После того как макет был изменен в Visual Studio его нужно сохранить. Для этого нужно щелкнуть File > Save Report.rdlc. Также можно просто закрыть Visual Studio.

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

Диалог с вопросом про обновление данных в классическом клиенте Microsoft Dynamics NAV 2009

После того как макет загружен в Dynamics NAV нужно выполнить компиляцию. Если в макете есть ошибки, то они будут выявлены на этапе компиляции. Для исправления ошибок нужно снова запустить Visual Studio (View > Layout).

Чтобы просмотреть отчет в ролеориентированном клиенте этот отчет должен быть включен в ролевой центр или панель навигации. Также отчет можно запустить, щелкнув кнопку Пуск > Выполнить (Win+R) и указав DynamicsNAV:////runreport?report=ReportID, где ReportID это идентификатор отчета (для отчета Chart of Accounts вместо ReportID следует указать значение 1). Такой способ запуска может быть полезен на этапе тестирования отчета.

 

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