Рассматриваемое Событие происходит в тот момент, когда Пользователь закрывает Окно Предварительного Просмотра (PreView) или начинает Печатать Отчет из указанного Окна Просмотра Отчета.

oReportListener.OnPreviewClose([lPrint])

Параметры

lPrint

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

Expand imageВозвращаемое значение

Нет (Отсутствует).

Expand imageКомментарии

Применяется В: ReportListener, объект.

API-интерфейс компоненты PreviewContainer определяет, что если Пользователь закрывает Форму Предварительного просмотра Отчета, то указанная компонента PreviewContainer должна вызвать соответствующий метод OnPreviewClose управляющего объекта ReportListener. Если Пользователь начинает Процесс Печати текущего отчета при закрытии указанной Формы, то метод OnPreviewClose вызывается с параметром, =  True (.T.).

NoteОбратите Внимание

Объект ReportListener вызывает специальный метод SetReport контейнера PreviewContainer в программном коде метода OnPreviewClose с параметром = NULL (.NULL.). В этот момент, объект ReportListener может установить указатель на используемый объект PreviewContainer в значение,  = NULL (.NULL.),  или сохранить ссылку на указанный объект. Однако, в соответствие с принятым API-интерфейсом используемого контейнера PreviewContainer, ответственность за удаление ссылки на управляющий Объект ReportListener лежит на данном объекте-контейнере. Дополнительную информацию смотрите в разделах:  API-интерфейс для контейнера Preview , или PreviewContainer, свойство.

Если Пользователь принял решение Печатать Отчет из окна Предварительного Просмотра, то сам процесс печати начинается после завершения выполнения рассматриваемого Метода. Задание Печати использует Кэшированные Страницы Отчета, которые были подготовлены ранее для Просмотра, поэтому печатные копии в точности совпадают с графическим изображением этих страниц Отчета. Аналогичные выводы можно сделать относительно других характеристик Отчета, включая  опции RANGE или другие опции Фильтра страниц, указанные в стартовой команде REPORT FORM, которая инициировала режим Просмотра.

Если свойство компоненты Объекта ReportListener CommandClauses.Prompt = True (.T.)  в рассматриваемой точке выполнения Отчета, то активируется Диалоговый бокс определения свойств Принтера перед тем, как выполняется Задание Печати Отчета. В этот момент Пользователь может изменить требуемые Характеристики и продолжить выполнение Задания Печати. Указанное свойство может иметь значение, = True в результате выполнения следующих Условий (причин):

  • Вы используете секцию PROMPT в стартовой команде REPORT FORM.

  • Используемый контейнер PreviewContainer или управляющий объект ReportListener динамически изменяют (устанавливают) требуемое значение указанного свойства: CommandClauses.Prompt = .T. .

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

  • Пользователь изменяет диапазон выводимых Страниц в Диалоговом боксе, порожденном секцией PROMPT.

  • Рассматриваемые выше объекты PreviewContainer / ReportListener динамически изменяют свойства компоненты объекта ReportListener CommandClauses, которые определяют список или диапазон печатаемых Страниц Отчета, которые уточняются в рассматриваемом методе: OnPreviewClose. К указанным характеристикам относятся: PrintPageCurrent, PrintRangeFrom, PrintRangeTo. Дополнительную информацию смотрите в разделе: CommandClauses, свойство.

Если вы используете стандартную секцию NOPAGEEJECT для компановки нескольких Отчетов в один Комплексный Отчет, то текущая установка значения рассматриваемого свойства: CommandClauses.Prompt действует только в течение текущего Задания на Печать, для текущей копии объекта: PreviewContainer. Если вы динамически Не изменяете значение свойства CommandClauses.Prompt, то для данного комплексного Отчета действует установленная в стартовой команде REPORT FORM установка секции PROMPT.

NoteВажное Замечание.

Поскольку Диалоговый Бокс определения характеристик Принтера активируется в результате установки соответствующего значения свойства CommandClauses.Prompt, и в силу того, что рассматриваемый Отчет был создан до рассматриваемого Момента (до текущего уточнения свойств Принтера), то существует потенциальная возможность Несоответствия предварительно созданных Страниц Отчета и напечатанных Копий этих страниц (Страницы создавались без учета устанавливаемых позднее свойств Принтера). Например, в процессе Диалога был выбран Принтер, который имеет несовместимый Формат (или размер) печатаемой Страницы, которая была сформатирована для другого Принтера. Описанный сценарий печати страниц Отчета возникает в результате попытки Драйвера нового принтера обработать Форматы Страниц Отчета, подготовленные для другого Принтера.

Expand imageПример

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

CopyCode imageКопировать Код
PROCEDURE OnPreviewClose(lPrint)
LOCAL liRange
IF lPrint
NODEFAULT
IF NOT EMPTY(THIS.CommandClauses.PrintPageCurrent
*user chose "print current page" option from PreviewContainer.
*Print only that page:
THIS.CommandClauses.PrintRangeFrom = ;
THIS.CommandClauses.PrintPageCurrent
THIS.CommandClauses.PrintRangeTo = ;
THIS.CommandClauses.PrintPageCurrent
DODEFAULT(.T.)
ELSE
THIS.ShowCustomPageSetupDialog()
THIS.CommandClauses.Prompt = .F.
IF EMPTY(THIS.PageRangeArray[1])
* no printing is requested
DODEFAULT(.F.)
ELSE
* user chose at least one range;
* go through the array set up by
* the dialog and print the range(s)
FOR liRange = 1 TO (ALEN(THIS.PageRangeArray,1))
THIS.CommandClauses.PrintRangeFrom = ;
THIS.PageRangeArray[liRange,1]
THIS.CommandClauses.PrintRangeTo = ;
THIS.PageRangeArray[liRange,2]
DODEFAULT(.T.)
ENDFOR
ENDIF
ENDIF
ENDIF
ENDPROC

Expand imageСм. также