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

NoteЗамечание
Некоторые из кодов в этом разделе используют системную переменную _REPORTOUTPUT  для вызова   ReportOutput.app. _REPORTOUTPUT может содержать имя другого приложения вывода отчетов в вашем окружении. В этом случае, замените HOME() + ReportOutput.app, или подобный код, чтобы вызывать по умолчанию приложение вывода отчетов. Там, где инструкции назначают имя и место пользовательской таблицы регистрации, замените на ваше имя и место нахождение

Для большей информации об использовании таблицы регистрации с вашими классами и  расширениями возможности вывода, смотри Как: зарегистрировать пользовательские классы ReportListener и Пользовательские типы вывода в таблице регистрации Приложения Вывода Отчета.

Для большей информации о формате таблицы регистрации, смотри Как работает Приложения Вывода Отчета.

Создание таблицы регистрации вывода отчетов

Вы можете использовать или ReportOutput.app или фундаментальный класс ReportListener для создания таблицы,потому что они используют один и тот же  формат таблицы конфигурации.
NoteЗамечание
Эти два метода могут создавать различные образцы и записи конфигурации в таблице, и они могут, в общем случае, включать различные наборы индексов. Если вы разделяете таблицу регистрации между различными компонентами отчета, каждый компонент, использующий таблицу, проверяет содержимое таблицы в соответствии со своими собственными требованиями. Если необходимо, каждый компонент способен добавить свои собственные записи и индексы налету ("on-the-fly").

Создание новой таблицы регистрации вывода отчетов с помощью ReportOutput.app

  1. В командном окне или в программе(.prg), используйте следующий код:

      CopyCode imageКопировать код
    * #DEFINE OUTPUTAPP_CONFIG_WRITE -100
    DO (_REPORTOUTPUT) WITH -100
  2. ReportOutput.Аpp создает таблицу с именем OutputConfig.DBF, и соответствующее Мемо (.fpt) и структурные индексные файлы (.cdx), в том же самом месте, где находится ReportOutput.App (обычно, каталог Visual FoxPro или  HOME() ).
  3. ReportOutput.App отображает BROWSE этой новой таблицы, так что можно проверить ее содержимое. Содержимое будет включать записи, требуемые для ReportListener XML Foundation Class, плюс некоторые удаленные записи, служащие  образцами различных типов записей регистрации.
  4. Вы можете увидеть удаленную запись для debugListener, ReportListener Debug Foundation Class. Эта запись показывает, как выглядит запись регистрации ReportListener в соответствии с требованиями  ReportOutput.App.
  5. Вы также можете увидеть среди удаленных записей две записи ObjType со значением 1000. Это значение находится в диапазоне, зарезервированным для использования utilityReportListener, утилитой ReportListener и File-handling Foundation Class. Одна запись показывает как создать запись конфигурации для установки свойства класса и другая - как создать запись конфигурации для вызова метода. Для большей информации о том, как этот класс и его производные используют записи конфигурации, смотри  ReportListener Utility и File-handling Foundation Class.
  6. Вы можете переименовать три файла OutputConfig.* и разместить их где-то еще на вашем диске для последующего использования.

Создание новой таблицы регистрации вывода отчетов с помощью ReportListener Foundation class

  1. Создайте экземпляр ReportListener Utility и File-handling Foundation Class, или от какого либо производного от ReportListener Foundation Class. Вы можете создать экземпляр этого класса используя библиотеку классов (vcx), встроенную в ReportOutput.app, или вы можете создать экземпляр класса, используя копию библиотеки классов, находящуюся в папке Visual FoxPro's FFC.
      CopyCode imageКопировать код
    * "взять" копию прямо из ReportOutput.App:
    #DEFINE CONFIG_REPORTLISTENER_CLASS "utilityReportListener"
    oRL = NEWOBJECT(CONFIG_REPORTLISTENER_CLASS, ;
                    "listener.vcx", ;
                    _REPORTOUTPUT)
    * - ИЛИ -
    * прямой доступ к библиотеки  Foundation Class:
    #DEFINE FFC_HOME HOME()+"FFC\"
    oRL = NEWOBJECT(CONFIG_REPORTLISTENER_CLASS, ;
                    FFC_HOME + "_reportListener.vcx")
    NoteПодсказка
    Все фундаментальные классы ReportListener обеспечивают файл-ориентированный вывод, такие как  ReportListener HTML Foundation Class, производные от ReportListener Utility and File-handling Foundation Class. Некоторые из этих классов нуждаются в таблице регистрации. Класс, который нуждается в таблице, проверяет наличие таблицы в момент его инициализации. Если таблица отсутствует, он создает ее копию в момент выполнения процедур инициализации и располагает в месте по умолчанию. Для большей информации, смотри  ReportListener Utility и File-handling Foundation Class.
  2. Запрашивайте (Request)  новую таблицу конфигурации из экземпляра ReportListener. Вы можете определить ее имя и расположение:
      CopyCode imageКопировать код
    * если SAFETY уствновлен в ON, пытаемся переписать, если файл существует:
    oRL.createConfigTable("c:\temp\myconfig.dbf")
    *- ИЛИ -
    * используем второй параметр для прямой перезаписи:
    oRL.createConfigTable("c:\temp\myconfig.dbf", .T.)
    NoteПодсказка
    Классы соблюдают установку  SAFETY в вашем окружении, в том, что они предложат подтвердить переписать таблицу, если SET SAFETY установлено в ON и если вы не укажите второй параметр в методе createConfigTable как True (.T.). Для большей информации, смотри SET SAFETY Command. Если вы отклоняете предложение переписать таблицу при подсказке, классы предпринимают некоторые действия; они проверяют таблицу на наличие требуемых индексов и добавляют в таблицу необходимые для них записи.

Назначение вашей собственной таблицы регистрации для приложения вывода отчетов

В последнем разделе вы видели, что чтобы создать таблицу регистрации, вы можете вызывать ReportOutput.app, используя отрицательный номер (-100) в качестве первого параметра, передаваемого программе. ReportOutput.app интерпретирует отрицательные значения в этом параметре как специальные рутинные инструкции по поддержанию, нежели чем инструкции по своим нормальным задачам  по снабжению ReportListener ссылками.

ReportOutput.app резервирует второе значение, -200, для того чтобы иметь возможность назначать название и расположение вашей собственной таблицы регистрации, как показано ниже.

Назначить вашу пользовательскую таблицу регистрации для использования приложением ReportOutput.app

  • Выполните следующую строку с кодом, замещая имя и путь вашей пользовательской таблицы регистрации:

      CopyCode imageКопировать код
    * #DEFINE OUTPUTAPP_CONFIG_READ -200
    DO (_REPORTOUTPUT) WITH -200,"c:\temp\myconfig.dbf"

Проверка текущей таблицы регистрации Приложения Вывода Отчетов

Во время исполнения, ReportOutput.app поддерживает коллекцию ссылок ReportListener. Для большей информации, смотри Как: использовать коллекцию ссылок Приложения Вывода Отчета. ReportOutput.app использует специальный член этой коллекции, который содержит имя своей таблицы регистрации. Вы можете использовать коллекцию ссылок для того, чтобы определить какая таблица регистрации используется в настоящий момент приложением ReportOutput.app. Вы также можете проверить название текущей таблицы регистрации, вызывая напрямую Приложение вывода отчета (Report Output Application).

Проверить имя текущей таблицы регистрации приложения ReportOutputю.App, используя коллекцию ссылок

  1. Если вы выполнили команду CLEAR ALL или освободили (RELEASE) глобальную переменную ссылки на коллекцию после последнего успешного вызова ReportOutput.app или если вы еще не вызывали его в текущей сессии  Visual FoxPro, коллекция может еще не существовать. Убедитесь, что коллекция существует и, затем, проверьте значение соответствующего члена коллекции.

      CopyCode imageКопировать код
    #DEFINE OUTPUTAPP_CONFIG_READ -200
    IF VARTYPE(_oReportOutput) = "O"
      lcFile = _oReportOutput[TRANSFORM(OUTPUTAPP_CONFIG_READ)]
    ENDIF
  2. Проверьте результат, что вы получили в переменную lcFile. Если он является именем файла с полным путем, ReportOutput.app использует таблицу регистрации на диске. Если  lcfile не включает путь, ReportOutput.app использует таблицу регистрации, встроенную в приложение (.app или .exe).

Проверить имя текущей таблицы регистрации приложения ReportOutput.App, вызывая ReportOutput.App

  1. Инициализировать переменную, которая содержит название таблицы регистрации

      CopyCode imageКопировать код
    LOCAL lcFile
  2. Вызвать ReportOutput.app со специальным значением конфигурации, который вы использовали раннее,  употребляя инициализированную раннее переменную в качестве второго параметра. Это подобно тому, как вы вызываете ReportOutput.app для получения ссылки для ReportListener:

      CopyCode imageКопировать код
    #DEFINE OUTPUTAPP_CONFIG_READ -200
    DO (_REPORTOUTPUT) WITH OUTPUTAPP_CONFIG_READ, lcFile
  3. Проверьте результат, что вы получили в переменную lcFile. Если он является именем файла с полным путем, ReportOutput.app использует таблицу регистрации на диске. Если  lcfile не включает путь, ReportOutput.app использует таблицу регистрации, встроенную в приложение (.app или .exe).
    NoteЗамечание

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