В Visual FoxPro 9.0, расширения в системе отчетов изменены более, чем когда либо раньше, как для design-time, так и для run-time и сделаны более пригодными для обработки. Для гарантии успешного создания расширений, вы должны понимать структуру таблиц отчета (.frx) и этикетки (.lbx).

Замечание:
Структуры файлов отчета и этикетки VFP идентичны. Для получения более подробной информации о содержимом каталога FILESPEC, смотри Табличные структуры файлов таблиц (.dbc, .frx, .lbx, .mnx, .pjx, .scx, .vcx).

В этой статье рассматривается - как вы можете исследовать и расширять табличное использование различных колонок (полей) для описания различных аспектов раскладки отчета и его поведения. Она предоставит вам информацию о специфичных ограничениях, налагаемых на эти таблицы.

Эта информация позволит вам:

Понимание изменений в таблицах отчета и этикетки

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

Для поддержки различных улучшений для design-time и run-time, Visual FoxPro 9 перегружает некоторые поля в таблицах отчетов и этикеток, для использования их в новых способах обращения с элементами раскладки, которые не использовали эти поля в ранних версиях. Некоторые из новых величин не используются продуктом напрямую; вместо этого они предоставляют необходимую информацию приложениям построителя отчета или другим пользовательским программным кодам.

Новое содержание полей таблиц Visual FoxPro 9, обеспечивающее поддержку улучшений разработки и выпуска отчетов, может быть также добавлено и в существующие отчеты без нарушения совместимости назад, с более ранними версиями. Дополнительное содержание в полях отчетов и этикеток будет проигнорировано в run-time Visual FoxPro 8 и более ранними версиями.

Visual FoxPro предоставляет информацию о системных таблицах для различных элементов, включая отчеты в каталоге FILESPEC. В поставку Visual FoxPro 9.0 включены обновленные копии 60FRX.DBF, таблицы, которая определяет использование различных полей в раскладках отчетов и этикеток.

Изменения в 60FRX.DBF

Содержание поля 60FRX.Descriptio обновлено почти для каждой записи с целью более подробного объяснения использования полей таблиц отчетов и этикеток. Обновленная информация, которую вы сможете увидеть в содержимом этого поля, применима ко всем версиям Visual FoxPro,и там же добавлена новая секция, указывающая новое в использовании в Visual FoxPro 9.0.

Приведенный ниже пример представляет собой вход 60FRX.Descriptio для значения RULERLINES полей таблицы 60FRX.Fields.

  Скопировать код
RULERLINES is used only in the header record.
0 = Show Ruler Lines: No
1 = Show Ruler Lines: Yes
==============================
Visual FoxPro 9-only Information Below
==============================
RULERLINES is reserved in VFP9 for OBJTYPE=8 (Field) for StringTrimming.  
Default is StringTrimmingEllipsisWord.
0 or not entered = Default
1 = StringTrimmingCharacter
2 = StringTrimmingWord
3 = StringTrimmingEllipsisCharacter
4 = StringTrimmingEllipsisWord
5 = StringTrimmingEllipsisPath (for filenames).

Версия 60FRX.DBF в Visual FoxPro 9.0 содержит новое поле - 60FRX.Usedby_obj. Поле 60FRX.Usedby_obj содержит список ключевых слов для всех элементов отчета, которые используют данное поле.

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

  Скопировать код
SELECT Fields, Descriptio FROM 60FRX WHERE ATC("Header",Usedby_obj) > 0

Колонка Fields в результирующем курсоре даст вам имена каждого поля в таблицах FRX или LBX, используемых в заголовочной записи (Header record). Колонка Descriptio расскажет вам, как используется каждое поле.

Совет:
Если поле отчета используется по-новому в Visual FoxPro 9.0, ключевые слова для элементов, по-новому использующих это поле сопровождаются символом "|", в списке 60FRX.Usedby_obj. Например, для значения RULERLINES в 60FRX.Fields, в 60FRX.Usedby_obj значение читается как HEADER | EXPR. Как было показано выше для RULERLINES в составе колонки 60FRX.Descriptio, ранние версии Visual FoxPro использовали это поле только в заголовочной записи. Visual FoxPro 9.0, кроме того, использует это поле для колонки Field (или Expression) элементов раскладки. В результате, в 60FRX.Usedby_obj имеются два ключевых слова, разделенных символом "|".

Приведенная ниже таблица предоставляет вам информацию о ключевых словах, хранящихся в поле 60FRX.Usedby_obj для каждого типа объектов отчета.

Таблица отчета Значение поля Objtype Описание объекта отчета Значение поля 60FRX.Usedby_obj

0

Comment

N/A

1

Report Header

HEADER

2

Workarea (FoxPro 2.x reports)

20TABLE

3

Index (FoxPro 2.x reports)

20INDEX

4

Relation (FoxPro 2.x reports)

20RELATION

5

Label

TEXT

6

Line

LINE

7

Rectangle / Shape

SHAPE

8

Field

EXPR

9

Bandinfo

BAND

10

Group

GROUP

17

Picture / OLE Bound

PICT

18

Variable

VAR

21

Printer Driver Setup (FoxPro 2.x reports)

20PDRIVER

23

Font resource

FONTRES

25

Data Environment

DATAENV

26

Cursor, Relation, или CursorAdapter (Смотри содержание поля Name для определения, какой именно объект имеется в виду)

CURSOR-RELATION

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

Visual FoxPro 9 поставляется вместе с примерным кодом с целью показать вам, как найти и оразмерить различные объекты, используемые в фундаментальных классах. Для получения подробной информации смотри статью Фундаментальный класс FRX Cursor и Фундаментальный класс FRX Device Helper. Эти классы являются частью приложения построителя отчета, используемого по умолчанию. Они дают вам для использования инструмент приложения построителя отчета, для случаев, когда вы желаете определить подходящие размещения и метрики для новых элементов отчетов и этикеток.

Форматирование и пересмотр информации в 60FRX.DBF

Новый файл отчета 90FRX.FRX, находящийся в каталоге FILESPEC, предоставляет объединенную информацию о полном использовании таблиц отчетов и этикеток во всех версиях, с подчеркиванием новинок в использовании с Visual FoxPro 9. Ранние версии отчетов 60FRX.DBF, 60FRX1.FRX и 60FRX2.FRX по-прежнему включены в поставку и находятся в каталоге FILESPEC.

Безопасное расширение таблиц отчетов и этикеток

Visual FoxPro 9 предоставляет возможность надежного существование определенного пользователем содержания в отчетах и этикетках. Вы можете добавить свое собственное содержание в эти таблицы следующими способами:

  • Добавить новые колонки в таблицы отчетов и этикеток.

  • Добавить новые типы объектов отчетов и этикеток в виде новых строк таблицы.

  • Добавить записи со значениями новой платформы (записи в которых значение платформы отличается от "Windows").

  • Добавлять личную информацию в колонки, такие как колонка User, не используемую отчетами и этикетками.

  • Добавлять личные аттрибуты в XML схему данных в Reporting memberdata. Reporting memberdata хранится в колонке Style. Для получения подробной информации смотри Как: присвоить структурированные метаданные элементам (controls) отчета.

Visual FoxPro 9 поддерживает все эти типы определенного пользователем содержания, независимо от того, будут ли они находиться в записях, используемых системой или в дополнительных записях. Он делает возможным использовать это содержание в пользовательском коде в сессиях дизайнера отчета, через перехватчики событий построителя отчета. Когда вы выполняете отчеты или этикеты, он делает доступным полное содержание таблиц отчетов и этикетов событиям и методам объектов ReportListener.

Предупреждение:
Ранние версии Visual FoxPro не поддерживают пользовательское содержание таблиц в сессиях дизайнеров и не допускают наличия добавленных пользователем строк и колонок в таблицах отчетов и этикеток. Следовательно, вы не должны вводить новые типы содержания в отчеты и этикетки, используя Visual FoxPro 9, если вы предполагаете в будущем редактировать эти файлы в его ранних версиях, так как новое содержание будет просто потеряно. Вы можете добавлять свое содержание в уже существующие записи таблиц и распространять их в дальнейшем пользователям ранних версий. Однако избегайте добавлять новые колонки в эти таблицы, для гарантии, что ранние версии смогут распознать эти таблицы, как корректные таблицы отчетов и этикеток.

Когда вы расширяете отчеты и этикетки новыми типами содержания, то должны быть соблюдены приведенные ниже ограничения.

Разграничение между "родными" (Native) и определенными пользователями типами записей

Существует 100 возможных значений Objtype (от 0 до 99). Visual FoxPro 9 прямо поддерживает значения Objtype от 49 и ниже для внутреннего использования и коренного использования дизайнером отчета. В дизайнере отчета "родным" для VFP образом работа ведется только с записями с распознаваемыми и документированными значениями Objtype и только с записями, содержащие значения поля Objcode, природно ассоциированные с этими значениями Objtype.

Пользователи и разного рода дополнительные инструменты, такие как приложение построителя отчета (ReportBuilder Applications) могут менять содержание записей с "родными"-распознаваемыми значениями в поле Objtype таблиц отчетов и этикеток. Они, кроме того, могут добавлять новые записи с "родными" Objtypes, памятуя о следовании стандарту использования колонок для всех "родных" типов.

Пользователи и используемые программные дополнения не должны добавлять неизвестные или недокументированные значения Objcode в записи в "родными" значениями Objtype (49 и ниже). Они могут быть удалены встроенным дизайнером отчета без каких-либо предупреждений.

Вы можете добавлять записи с определенными вами значениями Objtype в диапазоне от 50 и выше. Эти записи могут иметь любые значения Objcode. Встроенный дизайнер отчета сохраняет и игнорирует все содержание таких записей, однако, для их ввода и редактирования могут быть использованы приложение ReportBuilder и прочие дополнительные программные инструменты.

Замечание:
Хотя добавленные пользователем записи со значением Objtype в 50 и выше сохраняются в таблице, позиция таких записей в таблицах отчетов и этикеток не гарантируется. Сессия дизайнера отчета может изменить порядок записей в таблице раскладки. Добавленные пользователем записи будут скорее всего появляться в конце таблице, после записей, сохраненных дизайнером отчетов. Если для вас порядок записи принципиально важен, то храните необходимую информацию в колонках записи с требуемой позицией.

Гарантирование значения Unique ID для записей с определенным пользователем содержанием

Дополнительное содержание в любой записи без значения UniqueID, включая содержание в родных полях, таких как User, не будет поддерживаться. Ограничение сохраняет контроль для записей с родными значениями Objtype, в той же мере, что и определенными пользователем значениями Objtype.

Совет:
Используйте функцию SYS(2015) с целью получения значений для поля UniqueID новой записи. Используйте метод getFrxTimeStamp фундаментального класса FRXCursor для получения соответствующего значения Timestamp.

Отчеты и этикетки имеют несколько "родных" значений Objtype с неопределенными UniqueIDs, особенно font (objtype 23) и ресурсы, связанные с окружением данных (objtypes 25 и 26), особым образом используемые движком отчета в runtime. Возможно, кроме того существование записи комментария (objtype 0 или пустой). Дизайнер отчета и приложение построителя отчета не гарантируют сохранение пользовательского содержания в этих записях. Вы можете добавить новые записи подходящих objtypes для этих ресурсов, придавая им стандартное содержание. Вы можете, кроме того, расширить эти ресурсы с помощью связывания с ними определенных пользователем типов объектов. Например, запись со значением objtype равным 53 может представлять запись ресурса "extended font".

Поиск добавленного пользователем содержания в структурах таблиц отчетов и этикеток

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

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

Колонки Expr, Tag и Tag2 в заголовочной записи (используемые для аттрибутов настройки принтера) зарезервированы для внутреннего использования.

В ряде редких случаев, пользователи могут редактировать значения в колонке Expr и, если эти значения основаны на связанных аттрибутах, они будут распознаны дизайнером, оставаться в записи, быть доступными в течение сессии дизайнера и использоваться движком отчета в run time. Однако, такое поведение не поддерживается и не расширяется. В частном случае, пары значений в поле Expr не будут сохранены в таблице после закрытия сессии, даже если не было сделано явных изменений в Page Setup в течение этой сессии. Вместо этого, вы можете использовать поле Picture заголовочной записи для хранения замещающей информации для инструкций принтеру. Для получения подробной информации смотри SYS(1037) - Диалоговое окно установки страницы (Page Setup).

Смотри также