В данной статье будет показано, как добавить в отчет верхний колонтитул и как с ним работать. В данной статье продолжается работа над отчетом, созданным в статьях Разработка отчета для классического клиента и Разработка отчета для ролеориентированного клиента.
Добавление верхнего колонтитула
Ниже будет показано, как добавить в отчет верхний колонтитул.
В Microsoft Dynamics NAV Classic Client:
- Щелкните Tools > Object Designer. Откроется Object Designer.
- Щелкните кнопку Report, чтобы открыть список отчетов.
- Выберите отчет 123456701 Salesperson Cust. Sales Profit, затем щелкните кнопку Design.
- Щелкните View > Layout. Откроется Visual Studio.
- Щелкните Report > Page Header. Над секцией Body появится секция Page Header.
- Закройте Visual Studio, когда система предложит сохранить изменения, щелкните кнопку Yes.
- Щелкните в любом месте Report Designer, затем щелкните кнопку Yes, чтобы загрузить макет из Visual Studio.
Добавление служебной информации в верхний колонтитул
В конструкторе отчетов Visual Studio доступен ряд так называемых глобальных коллекций. Глобальные коллекции содержат переменные, которые можно использовать в выражениях. Существует пять коллекций глобальных объектов, которые можно использовать в выражениях: Fields, Globals, Parameters, ReportItems и User. Чтобы получить доступ к этим коллекциям, можно использовать стандартный синтаксис коллекций Visual Basic. Ниже приведены примеры использования этого синтаксиса.
| Коллекция!ИмяОбъекта | =User!Language |
| Коллекция.Элемент("ИмяОбъекта") | =User.Item("Language") |
| Коллекция("ИмяОбъекта") | =User("Language") |
Можно также использовать синтаксис свойств для получения доступа к элементам коллекций Globals и User. Далее приведен пример.
| Коллекция.ИмяОбъекта | = Globals.PageNumber |
Элементы коллекций Globals и User возвращают тип variant. Если нужно использовать глобальную переменную в выражении, требующем определенный тип данных, необходимо сначала привести переменную. Например, CDate(Globals!ExecutionTime).
Легко и приятно добавлять в верхний колонтитул информацию из коллекций Globals и User.
Коллекция Globals содержит следующие элементы, которые можно использовать при построении отчетов для NAV 2009:
- ExecutionTime (дата и время начала формирования отчета)
- PageNumber (номер текущей страницы)
- TotalPages (общее количество страниц в отчете)
Коллекция Users содержит следующие элементы, которые можно использовать при построении отчетов для NAV 2009:
- UserID(идентификатор пользователя)
- Language (язык, в виде ru-RU)
Далее будет показано, как добавить в верхний колонтитул следующую информацию:
- Дату и время формирования отчета
- Пользователя, который формирует отчет
- Номер текущей страницы
- Общее количество страниц в отчете
В Report Designer:
- Щелкните View > Layout. Откроется Visual Studio.
- Измените высоту верхнего колонтитула таким образом, чтоб в нем могло поместиться три элемента управления TextBox, расположенных друг над другом.
- Перетащите три элемента управления TextBox из панели инструментов в макет отчета, в верхний колонтитул.
- Разместите добавленные элементы управления друг над другом в правом углу.
- Выберите первый TextBox, щелкните по нему правой кнопкой мыши и выберите Expression. Появится окно Expression.
- Щелкните по категории Globals в поле Category.
- Дважды щелкните по элементу UserID в поле Item. В верхнем поле должно появиться выражение =User!UserID. Обратите внимание, что хотя UserID принадлежит коллекции User, переменная находится в категории Globals.
- Щелкните кнопку OK.
- Выберите второй TextBox, установите для него свойства:
- Value:
=Globals!PageNumber & " / " & Globals!TotalPages - Visibility, Hidden:
=Globals!TotalPages=1 - Выберите третий TextBox, установить для него свойства:
- Value:
=Format(Globals!ExecutionTime,"dd.MM.yyyy HH:mm") - Закройте Visual Studio, когда система предложит сохранить изменения, щелкните кнопку Yes.
- Щелкните в любом месте Report Designer, затем щелкните кнопку Yes, чтобы загрузить макет из Visual Studio.
Теперь в первом TextBox будет отображаться пользователь, который формирует отчет. Далее добавим в отчет информацию о номерах страниц.
Теперь во втором TextBox будет отображаться информация о номерах страниц в виде x/y. Если в отчете всего одна страница, то данный TextBox не отображается. Далее добавим в отчет информацию о дате и времени формирования отчета.
Теперь в третьем TextBox будут отображаться дата и время формирования отчета в формате ДД.ММ.ГГГГ ЧЧ:ММ Макет отчета должен выглядеть следующим образом:
Добавление надписей в верхний колонтитул
В предыдущем разделе было описано, как добавить в верхний колонтитул служебную информацию типа кода пользователя или номеров страниц. Но что делать, если требуется вставить свою надпись. Конечно, можно создать элемент управления TextBox и впечатать надпись в него. Это просто, но в данном случае теряется поддержка Мультиязычности. Ниже будет показано, как добавить в верхний колонтитул надпись, которая будет поддерживать Мультиязычность.
В Report Designer
- Щелкните View > Sections. Откроется Section Designer.
- Добавьте надпись в секцию Salesperson/Purchaser Header (1), установите для нее следующие свойства:
- DataSetFieldName: RPageOf
- Visible: No
- Caption: _of_ (где вместо символа «_» должен стоять «пробел»)
- ForeColor: 65535
- Добавьте надпись в секцию Salesperson/Purchaser Header (1), установите для нее следующие свойства:
- Caption: Salesperson's Customer Sales and Profit
- FontSize: 9
- FontBold: True
- DataSetFieldName: RCaption
- Добавьте текстовую зону в секцию Salesperson/Purchaser Header (1), установите для нее следующие свойства:
- SourceExpr: COMPANYNAME
- Закройте Section Designer.
- Сохраните отчет.
- Щелкните View > Layout. Откроется Visual Studio.
- Щелкните по столбцам, затем щелкните правой кнопкой мыши и выберите Insert Column to the Right.
- Дважды повторите шаг 4, чтобы добавить еще два столбца. Теперь в макете есть таблица с девятью столбцами:
- Перетащите поля COMPANYNAME, RCaption и RPageOf из DataSet – Result в добавленные столбцы (седьмой – девятый) первой строки таблицы.
- Выберите поля COMPANYNAME, RCaption и RPageOf и установите им свойства:
- Color: Red
- Visibility, Hidden: True
- Перетащите два элемента управления TextBox из панели инструментов в макет отчета, в верхний колонтитул.
- Разместите добавленные элементы управления друг над другом в левом углу.
- Выберите первый TextBox в левом углу, установите для него свойства:
- Value:
= ReportItems!RCaption.Value - Font, FontWeight:
= Bold - Выберите второй TextBox в левом углу, установите для него свойство:
- Value:
=ReportItems!COMPANYNAME.Value - Выберите второй TextBox в правом углу, измените для него свойство:
- Value:
=Globals!PageNumber & ReportItems!RPageOf.Value & Globals!TotalPages - Закройте Visual Studio, когда система предложит сохранить изменения, щелкните кнопку Yes.
- Щелкните в любом месте Report Designer, затем щелкните кнопку Yes, чтобы загрузить макет из Visual Studio.
Частью набора данных становятся только те элементы управления, которые расположены в секциях. Если эти элементы не должны отображаться при формировании отчета для классического клиента у них нужно установить свойство Visible = False. Обычно для таких элементов управления указывается свойство ForeColor = 65535 (желтый), таким образом, их легко выделить из всей массы элементов.
Секции должны выглядеть следующим образом:

Рисунок 1.2.
Теперь макет отчета должен выглядеть следующим образом:
Т.к. в секциях Page Header и Page Footer нельзя использовать элементы управления, ссылающиеся на коллекцию Fields, то вместо этого следует использовать элементы управления, ссылающиеся на коллекцию ReportItems. Коллекция ReportItems содержит текстовые поля в отчете. Элементы коллекции ReportItems имеют только одно свойство: Value. Значение элемента ReportItems может использоваться для отображения или вычисления данных из другого поля в отчете.
В данном разделе мы добавили в секцию Body три TextBox, которые ссылаются на коллекцию Fields (сделали их невидимыми и красными). После этого в секции Page Header с помощью ReportItems использовали ссылки на эти TextBox.
Перенос информации о менеджере с предыдущего листа
Если включить в отчете отображение дополнительной информации, то он займет две страницы. Представим, что в отчете не два менеджера. Пользователю, открывшему отчет в середине, будет непонятно к какому менеджеру относятся клиенты, расположенные в верхних строчках (сам менеджер был напечатан на предыдущих страницах). Желательно на всех страницах отчета выводить в секции Page Header информацию о менеджере, к которому относятся клиенты, расположенные в верхних строках.
В Report Designer:
- Щелкните View > Layout. Откроется Visual Studio.
- Перетащите поле Salesperson_Purchaser_Name из DataSet – Result во второй столбец третьей строки.
- Выберите поле Salesperson_Purchaser_Name_1 (второй столбец, третья строка) и установите ему свойства:
- Color: Red
- Visibility, Hidden: True
- Перетащите элемент управления TextBox из панели инструментов в макет отчета, в верхний колонтитул.
- Разместите его под существующими элементами в левом углу.
- Выберите добавленный TextBox и установите для него свойства:
- Value:
="..." & FIRST(ReportItems!Salesperson_Purchaser_Name_1.Value) - Visibility, Hidden:
=Globals!PageNumber=1 - Закройте Visual Studio, когда система предложит сохранить изменения, щелкните кнопку Yes.
- Щелкните в любом месте Report Designer, затем щелкните кнопку Yes, чтобы загрузить макет из Visual Studio.
Теперь на всех страницах кроме первой будет указываться менеджер, к которому относится клиент, расположенный в первой строке.
Запуск измененного отчета
- Щелкните кнопку Пуск > Выполнить (Win+R) и укажите DynamicsNAV:////runreport?report=123456701.
- Щелкните кнопку Preview
В отчете появился раздел Page Header, в котором выведена информация:
- Название отчета
- Компания, для которой сформирован отчет.
- Дата и время, когда был сформирован отчет.
- Пользователь, сформировавший отчет.
- Текущая страница и общее количество страниц.
- Менеджер, к которому относится первый клиент (30000) на текущей странице.
Андрей Панько >>
Dynamics NAV MVP
apanko@rabota-na-rezultat.ru







