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

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

Ниже будет показано, как добавить в отчет верхний колонтитул.

В Microsoft Dynamics NAV Classic Client:

  1. Щелкните Tools > Object Designer. Откроется Object Designer.
  2. Щелкните кнопку Report, чтобы открыть список отчетов.
  3. Выберите отчет 123456701 Salesperson Cust. Sales Profit, затем щелкните кнопку Design.
  4. Щелкните View > Layout. Откроется Visual Studio.
  5. Щелкните Report > Page Header. Над секцией Body появится секция Page Header.
  6. Закройте Visual Studio, когда система предложит сохранить изменения, щелкните кнопку Yes.
  7. Щелкните в любом месте 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:

Коллекция Users содержит следующие элементы, которые можно использовать при построении отчетов для NAV 2009:

Далее будет показано, как добавить в верхний колонтитул следующую информацию:

В Report Designer:

  1. Щелкните View > Layout. Откроется Visual Studio.
  2. Измените высоту верхнего колонтитула таким образом, чтоб в нем могло поместиться три элемента управления TextBox, расположенных друг над другом.
  3. Перетащите три элемента управления TextBox из панели инструментов в макет отчета, в верхний колонтитул.
  4. Разместите добавленные элементы управления друг над другом в правом углу.
  5. Выберите первый TextBox, щелкните по нему правой кнопкой мыши и выберите Expression. Появится окно Expression.
  6. Щелкните по категории Globals в поле Category.
  7. Дважды щелкните по  элементу UserID в поле Item. В верхнем поле должно появиться выражение =User!UserID. Обратите внимание, что хотя UserID принадлежит коллекции User, переменная находится в категории Globals.
  8. ExpressionExpression
    Рисунок 1.0.

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

  11. Выберите второй TextBox, установите для него свойства:
    • Value: =Globals!PageNumber & " / " & Globals!TotalPages
    • Visibility, Hidden: =Globals!TotalPages=1

    Теперь во втором TextBox будет отображаться информация о номерах страниц в виде x/y. Если в отчете всего одна страница, то данный TextBox не отображается. Далее добавим в отчет информацию о дате и времени формирования отчета.

  12. Выберите третий TextBox, установить для него свойства:
    • Value: =Format(Globals!ExecutionTime,"dd.MM.yyyy HH:mm")

    Теперь в третьем TextBox будут отображаться дата и время формирования отчета в формате ДД.ММ.ГГГГ ЧЧ:ММ Макет отчета должен выглядеть следующим образом:

    Report LayoutReport Layout
    Рисунок 1.1

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

Добавление надписей в верхний колонтитул

В предыдущем разделе было описано, как добавить в верхний колонтитул служебную информацию типа кода пользователя или номеров страниц. Но что делать, если требуется вставить свою надпись. Конечно, можно создать элемент управления TextBox и впечатать надпись в него. Это просто, но в данном случае теряется поддержка Мультиязычности. Ниже будет показано, как добавить в верхний колонтитул надпись, которая будет поддерживать Мультиязычность.

В Report Designer

  1. Щелкните View > Sections. Откроется Section Designer.
  2. Добавьте надпись в секцию Salesperson/Purchaser Header (1), установите для нее следующие свойства:
    • DataSetFieldName: RPageOf
    • Visible: No
    • Caption:  _of_  (где вместо символа «_» должен стоять «пробел»)
    • ForeColor: 65535

    Частью набора данных становятся только те элементы управления, которые расположены в секциях. Если эти элементы не должны отображаться при формировании отчета для классического клиента у них нужно установить свойство Visible = False. Обычно для таких элементов управления указывается свойство ForeColor = 65535 (желтый), таким образом, их легко выделить из всей массы элементов.

  3. Добавьте надпись в секцию Salesperson/Purchaser Header (1), установите для нее следующие свойства:
    • Caption: Salesperson's Customer Sales and Profit
    • FontSize: 9
    • FontBold: True
    • DataSetFieldName: RCaption
  4. Добавьте текстовую зону в секцию Salesperson/Purchaser Header (1), установите для нее следующие свойства:
    • SourceExpr: COMPANYNAME

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

    Section designer
    Рисунок 1.2.

  5. Закройте Section Designer.
  6. Сохраните отчет.
     
  7. Щелкните View > Layout. Откроется Visual Studio.
  8. Щелкните по столбцам, затем щелкните правой кнопкой мыши и выберите Insert Column to the Right.
  9. Дважды повторите шаг 4, чтобы добавить еще два столбца. Теперь в макете есть таблица с девятью столбцами:
  10. Перетащите поля COMPANYNAME, RCaption и RPageOf из DataSet – Result в добавленные столбцы (седьмой – девятый) первой строки таблицы.
  11. Выберите поля COMPANYNAME, RCaption и RPageOf и установите им свойства:
    • Color: Red
    • Visibility, Hidden: True
  12. Перетащите два элемента управления TextBox из панели инструментов в макет отчета, в верхний колонтитул.
  13. Разместите добавленные элементы управления друг над другом в левом углу.
  14. Выберите первый TextBox в левом углу, установите для него свойства:
    • Value: = ReportItems!RCaption.Value
    • Font, FontWeight: = Bold
  15. Выберите второй TextBox в левом углу, установите для него свойство:
    • Value: =ReportItems!COMPANYNAME.Value
  16. Выберите второй TextBox в правом углу, измените для него свойство:
    • Value: =Globals!PageNumber & ReportItems!RPageOf.Value & Globals!TotalPages

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

    Report layoutReport layout
    Рисунок 1.3

    Т.к. в секциях Page Header и Page Footer нельзя использовать элементы управления, ссылающиеся на коллекцию Fields, то вместо этого следует использовать элементы управления, ссылающиеся на коллекцию ReportItems. Коллекция ReportItems содержит текстовые поля в отчете. Элементы коллекции ReportItems имеют только одно свойство: Value. Значение элемента ReportItems может использоваться для отображения или вычисления данных из другого поля в отчете.
    В данном разделе мы добавили в секцию Body три TextBox, которые ссылаются на коллекцию Fields (сделали их невидимыми и красными). После этого в секции Page Header с помощью ReportItems использовали ссылки на эти TextBox.

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

Перенос информации о менеджере с предыдущего листа

Если включить в отчете отображение дополнительной информации, то он займет две страницы. Представим, что в отчете не два менеджера. Пользователю, открывшему отчет в середине, будет непонятно к какому менеджеру относятся клиенты, расположенные в верхних строчках (сам менеджер был напечатан на предыдущих страницах). Желательно на всех страницах отчета выводить в секции Page Header информацию о менеджере, к которому относятся клиенты, расположенные в верхних строках.

В Report Designer:

  1. Щелкните View > Layout. Откроется Visual Studio.
  2. Перетащите поле Salesperson_Purchaser_Name из DataSet – Result во второй столбец третьей строки.
  3. Выберите поле Salesperson_Purchaser_Name_1 (второй столбец, третья строка) и установите ему свойства:
    • Color: Red
    • Visibility, Hidden: True
  4. Перетащите элемент управления TextBox из панели инструментов в макет отчета, в верхний колонтитул.
  5. Разместите его под существующими элементами в левом углу.
  6. Выберите добавленный TextBox и установите для него свойства:
    • Value: ="..." & FIRST(ReportItems!Salesperson_Purchaser_Name_1.Value)
    • Visibility, Hidden: =Globals!PageNumber=1

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

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

Запуск измененного отчета

  1. Щелкните кнопку Пуск > Выполнить (Win+R) и укажите DynamicsNAV:////runreport?report=123456701.
  2. Щелкните кнопку Preview
  3. Print PreviewPrint Preview
    Рисунок 1.4.

В отчете появился раздел Page Header, в котором выведена информация:

 

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