Виснет отчет

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Larisa
Посетитель
Сообщения: 38
Зарегистрирован: 12 мар 2009, 15:17

Виснет отчет

Сообщение Larisa »

Подскажите пожалуйста виснет отчет, из-за чего непонятно.
Смысл отчета по каждой spkau будет некий набор stzatr с данными tab25 внутри.
Есть две вьюшки.
.Create View m //
from spkau
where ((
10013<<=spkau.kodgrkau
and 10036>>=spkau.kodgrkau
))
order by spkau.kodgrkau,spkau.code
;
.create view n from tab_25, stzatr
where ((
stzatr.nrec == tab_25.stkau3
and spkau_nrec == tab_25.ckau
));

Вывод в отчет осуществляется таким образом
if m.getfirst spkau = tsok {message('есть данные spkau')}
.{table 'm.spkau'
spkau_nrec := m.spkau.nrec;
if n.getfirst stzatr = tsok {message('есть данные stzatr')}
else message('нет данных stzatr');
.{table 'n.stzatr'
.{table 'n.tab_25'
...... подсчеты сумм по данной stzatr и spkau
.}
вывод итогов по данной stzatr
.}
вывод итогов по данной spkau
.}
вывод общих итогов

Вьюшки выгружаются нормально. Но сообщение "'есть данные spkau'" не выходит, отчет перед ним выснет.
В чем может быть причина подскажите пожалуйста.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

операторы навигации по ЛТ выполняются в блоке begin end в fcom
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

Сообщение Masygreen »

Код: Выделить всё

.begin
spkau_nrec := m.spkau.nrec;
if n.getfirst stzatr = tsok {message('есть данные stzatr')}
else message('нет данных stzatr');
end.
потом попробуйте закоментить

Код: Выделить всё

order by spkau.kodgrkau,spkau.code
Время ведет!
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Сообщение KATZ »

Когда-то давно пытался сделать отчет с двумя логическими таблицами, долго бился, но он у меня так и не заработал. Объединил две ЛТ в одну - всё пошло с полуоборота. Может, в текущем атлантисе эта проблема решена, но тем не менее... Да и по логике разбивать вашу выборку на две части смысла нет. Сделайте как-то так:

Код: Выделить всё

.create view AAA
from spkau, stzatr, tab_25
where
((
  10013<<=spkau.kodgrkau and 10036>>=spkau.kodgrkau and
  stzatr.nrec==tab_25.stkau3 and
  spkau.nrec==tab_25.ckau
))
order by spkau.kodgrkau, spkau.code, stzatr.kod;
.....
.{table 'AAA.spkau'
.{table 'AAA.stzatr'
.{table 'AAA.tab_25'
.....
.}
.....
.}
.....
.}
Обход записей здесь идет благодаря .{table, так что в getfirstах нет надобности.
Ответить