Дизайнеры отчетов и этикеток Visual FoxPro представляют избранные операции пользовательского интерфейса (UI), как события построителя, которые могут быть перехвачены и обслужены приложением построителя отчетов (report builder).

Приложение построителя, вызываемое дизайнером, определяется содержимым системной переменной VFP _REPORTBUILDER, которая, по умолчанию, ссылается на приложение reportbuilder.app, находящееся в каталоге, в которую был инсталлирован Visual FoxPro. Это приложение вызывается, как из дизайнера отчетов - Report Designer, так и из дизайнера меток - Label Designer, для которой не предусмотрено соответствующей системной переменной "_LABELBUILDER". В этой и последующих статьях, вы можете подразумевать, что любые обсуждения, связанные с рассмотрением дизайнера отчетов применимы и к дизайнеру этикеток - Label Designer.

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

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

Когда в построителе отчета происходит какое-либо событие, дизайнер отчетов выполняет следующие действия:

Приложение построителя отчетов должно подчиняться следующим API:

Параметры, пересылаемые из дизайнера

Дизайнер направляет приложению построителя четыре параметра по ссылке:

Индекс Параметр Тип данных Описание

1

ReturnFlags

I

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

2

EventType

I

Целочисленное значение, отображающее тип наступившего события.

3

CommandClauses

O

Объект (класса Empty) со свойствами, указывающими, что опции будут использоваться в команде, которую должен выполнить дизайнер.

4

DesignerSessionId

I

Идентификатор сессии данных, в которой работает дизайнер отчетов.

ReturnFlags

Этот, направляемый по ссылке, параметр имеет значение равное минус единице ( -1) в случае, когда он направляется построителю отчетов; в тоже время дизайнер ожидает получение другой величины этого параметра обратно. Возможные возвращаемые значения состоят из суммы бинарных флажков:

#define constant Bit number Bits Value Description

FRX_REPBLDR_HANDLE_EVENT

0

01

1

Если установлен, то этот флажок сообщает дизайнеру отчётов, что событие обслужено построителем отчетов и что действие по умолчанию, которое могло бы быть предпринято дизайнером в ответ на событие, должно быть подавлено. В этом смысле флажок идентичен оператору NODEFAULT, используемому в программных кодах методов Visual FoxPro.

FRX_REPBLDR_RELOAD_CHANGES

1

10

2

Если установлен, то этот флажок сообщает дизайнеру отчетов, что построитель произвел изменения в курсоре FRX и что эти изменения должны быть перегружены в дизайнер и отобразиться в раскладке.

Замечание:
Константы #define, приведенные в таблице определены в файле foxpro_reporting.h, расположенном в каталоге FFC\ внутри домашнего каталога Visual FoxPro.

EventType

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

#define constant Value Event Description

FRX_BLDR_EVENT_PROPERTIES

1

Был вызван диалоговый блок Properties либо вследствие двойного щелчка, либо действием по выбору из меню.

FRX_BLDR_EVENT_OBJECTCREATE

2

В раскладке был создан элемент управления.

n/a

3

(Зарезервировано для использования в будущем.)

FRX_BLDR_EVENT_OBJECTREMOVE

4

Элемент управления был извлечен из раскладки путем удаления или действием вследствие CTRL-X/Cut.

FRX_BLDR_EVENT_OBJECTPASTE

5

Элемент управления был вставлен в раскладку путем копирования из буфера.

FRX_BLDR_EVENT_REPORTSAVE

6

Раскладка была сохранения на диск.

FRX_BLDR_EVENT_REPORTOPEN

7

Раскладка была открыта.

FRX_BLDR_EVENT_REPORTCLOSE

8

Раскладка была закрыта.

FRX_BLDR_EVENT_DATAENV

9

Было открыто окно Data Environment.

FRX_BLDR_EVENT_PREVIEWMODE

10

Был вызван режим предварительного просмотра - print preview.

FRX_BLDR_EVENT_OPTIONALBANDS

11

Был вызван диалоговый блок Optional Bands.

FRX_BLDR_EVENT_DATAGROUPING

12

Был вызван диалоговый блок Data Grouping.

FRX_BLDR_EVENT_VARIABLES

13

Был вызван диалоговый блок Variables.

FRX_BLDR_EVENT_EDITINPLACE

14

На выбранном элементе управления Label был нажат CTRL-E.

FRX_BLDR_EVENT_SETGRIDSCALE

15

Был вызван диалоговый блок Set grid scale.

FRX_BLDR_EVENT_OBJECTDROP

16

Объект(ы) был создан в раскладке путем операции drag-and-drop из окна Data Environment, Database Container или из окна Project.

FRX_BLDR_EVENT_IMPORTDE

17

Из меню Report был выбран пункт "Import data environment".

FRX_BLDR_EVENT_PRINT

18

Из меню File был выбран пункт "Print" или был выбран пункт "Run Report" из контекстного меню дизайнера.

FRX_BLDR_EVENT_QUICKREPORT

19

Из меню Report был выбран пункт "Quick Report".

CommandClauses

Этот параметр представляет собой ссылку на объект инстанции класса Empty с рядом дополнительных свойств, отображающих различные возможные опции команды Visual FoxPro, которая исполняется дизайнером отчетов или этикеток:

Свойство Тип данных Описание

AddTableToDE

L

Указывает, что в диалоговом блоке "Quick Report" был отмечен чек-бокс "Add table to data environment".

Alias

L

Указывает, что в команде CREATE REPORT | LABEL FROM.. было определено ключевое слово ALIAS, или что в диалоговом блоке "Quick Report" был отмечен чек-бокс "Add alias".

FieldList

O

Содержит коллекцию номеров числовых полей, представляющих список полей команды quick report.

File

C

Содержит имя исходного файла (.frx или .lbx), открытого в дизайнере. Фактически такой файл может не существовать, если была использована команда CREATE REPORT.

Form

L

Определяет раскладку "быстрого" отчета:

  • .T. если была указана раскладка FORM.

  • .F. если была указана раскладка COLUMN.

From

C

Содержит имя таблицы, указанной в опции filename команды CREATE REPORT FROM <filename>.

InScreen

L

Показывает, что в команде была использована опция IN SCREEN.

InWindow

C

Определяет имя окна в опции IN <windowname>, если она была использована в команде.

IsCreate

L

Указывает что вновь создана раскладка:

  • .T. в случае CREATE REPORT | LABEL.

  • .F. в случае MODIFY REPORT | LABEL.

IsReport

L

Определяет тип раскладки, открытой в дизайнере:

  • .T. в случае CREATE | MODIFY REPORT.

  • .F. в случае CREATE | MODIFY LABEL.

IsQuickReportFromMenu

L

Указывает, что из меню "Report" была выбрана опция "Quick Report".

NoEnvironment

L

Указывает, что в команду было включено ключевое слово NOENVIRONMENT.

NoOverwrite

L

Указывает, что в команду было включено ключевое слово NOOVERWRITE.

NoWait

L

Указывает, что в команду было включено ключевое слово NOWAIT.

Protected

L

Указывает, что в команду было включено ключевое слово PROTECTED.

Save

L

Указывает, что в команду было включено ключевое слово SAVE.

Titles

L

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

Width

N

Определяет число колонок, указанное в команде quick report.

Window

C

Содержит имя окна, указанное в опции windowname в части команды WINDOW <windowname>.

DesignerSessionId

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

Курсор FRX

При вызове приложения построителя отчета в частной сессии данных будет открыта рабочая копия редактируемого файла отчета с алиасом"FRX". Кроме того:

  • Указатель записи в курсоре FRX будет установлен на запись, которая представляет объект раскладки, на котором произошло событие. В некоторых случаях это может быть заглавная запись самого отчета, представляющая событие относящееся к отчету, а не к объекту в его раскладке.

  • Любые записи в курсоре FRX, представляющие выбранные в данный момент времени объекты раскладки (подсвеченные мышкой и показывающие обрамляющую рамку) будут иметь установленное в .T. значение поля CURPOS.

Замечание:
Запись заголовка отчета (record 1) может также иметь значение поля CURPOS=.T., так как оно используется для хранения значения "Show Position" из опции меню View. Если приложению построителя требуется идентифицировать - сколько объектов выбрано в раскладке, то в таком случае для этих целей должен использоваться код подобный приведенному ниже COUNT FOR CURPOS AND RECNO() > 1.

Смотри также