:: Главная :: Решения :: Статьи :: Проект "Русский help" :: Файловый архив :: Фотоальбом :: Ссылки ::
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  


Форумы  :: FAQ FoxPro

При запуске отчета из формы формируются неверные данные
Дата: 24.09.06 11:39:41 ОтветитьЦитировать

Проблема:

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

Причина:

Отчет это всегда сканирование одной главной таблицы. Для корректной работы отчеты он должен обязательно перейти в рабочую область этой главной таблицы.

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

Решение:

Способ решения зависит от того, по какой причине оказалась потеряна (не выбрана) главная таблица отчета.

Наиболее вероятными являются следующие причины:


  1. В момент вызова отчета фокус находится в объекте Grid
  2. При создании отчета не была явно указана главная таблица отчета
  3. Главная таблица отчета не была открыта или не видна из отчета


1. В момент вызова отчета фокус находится в объекте Grid.

Это BUG (глюк) FoxPro. Причина такого поведения не вполне понятна, но если в момент вызова отчета фокус находится в объекте Grid, то объект Grid "не отпускает" текущую рабочую область.

Решение сводится к тому, чтобы перед выполнением отчета увести фокус с объекта Grid на любой другой объект формы. Если кроме собственно объекта Grid на форме ничего нет, то создайте специальный объект TextBox или CommandButton за границами видимой части окна (Top = -100, Left = -100) и передавайте фокус на этот "невидимый" объект непосредственно перед вызовом отчета:

ThisForm.Command1.SetFocus()
REPORT FORM MyReport.frx
ThisForm.Grid1.SetFocus()

2. При создании отчета не была явно указана главная таблица отчета.

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

Report.DataEnvironment.InitialSelectedAlias

Это свойство принимает значение алиаса одной из таблиц, добавленных в DataEnvironment собственно отчета. Выбранный алиас и назначается "главной" таблицей отчета.

Если же Вы не используете DataEnvironment отчета, то следует принудительно перейти в рабочую область главной таблицы непосредственно перед вызовом отчета

Select MainTab
REPORT FORM MyReport.frx

3. Главная таблица отчета не была открыта или не видна из отчета.

Подобная ситуация возможна, если Вы не используете DataEnvironment отчета или же установили его свойство

Report.DataEnvironment.AutoOpenTables = .F.

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

Как правило, подобная ситуация возникает, если в качестве источника данных для отчета используется курсор, которого просто не существует как объект, который можно было бы добавить в DataEnvironment отчета.

Но не просто факт использования курсора (это довольно легко определяется), а запуск отчета в Private DataSession. Это настраивается в режиме модификации отчета: пункт меню Report - Private DataSession.

Вообще-то, сама по себе идея запуска отчета в Private DataSession очень хорошая. Работа отчета происходит независимо от работы форм. Но применительно к курсорам следует помнить, что курсор созданный в одной DataSession "не виден" в другой DataSession. А установка свойства Private DataSession, как раз и означает, что отчет будет запущен в "другой" DataSession.

В этом случае формирование курсоров надо перенести извне отчета в методы самого отчета. Как правило, это делается в методах DataEnvironment отчета. Например, в методе

Report.DataEnvironment.BeforeOpenTables
Ratings: 0 negative/0 positive


Тема Просмотров Написано Написано
  Report 5276 Владимир Максимов 01.03.05 22:07
  Неустранимая ошибка при выполнении отчета 5839 Владимир Максимов 15.09.05 20:58
  VFP8 некорректно отображает содержимое отчета 8262 Владимир Максимов 18.09.05 10:40
  Как выбрать принтер из окна предварительного просмотра 7077 Владимир Максимов 01.02.06 23:15
  Как отобразить окно предварительного просмотра в As Top-Level форме 5820 Владимир Максимов 01.02.06 23:55
  Как запретить печать из окна предварительного просмотра 4954 Владимир Максимов 02.02.06 00:19
  При запуске отчета из формы формируются неверные данные 7000 Владимир Максимов 24.09.06 11:39


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

On-line: 1 Guest

© 2006 Fox Club 
Яндекс.Метрика