Страница 1 из 2

Вызов отчета из своего интерфейса.

Добавлено: 25 дек 2009, 09:03
s2176
Добрый день!
Есть интерфейс, который читает таблицу Sumvidop, проверяет кореектность информации в ней и в случае обнаружения ошибок должен выдать отчет о них.
Вроде работает, но мне не нравится, что окно с предложением выбрать отчет появляется не в конце, а сразу, как только обнаруживается первая ошибка. Можно ли так сделать, чтобы интерфейс пробежал всю таблицу, и только в конце (при наличии ошибок) выдал окно для выбора отчета?
У меня написано примерно так:

interface Nach_Or 'Выгрузка начислений' escclose;
create view
....
form oraclen('or_nach.txt');

screen Sc1
...
end;

HandleEvent
cmOk:
{
...
tp._loop sumvidop
{
...
if j>0 and _bklass='_' and tp.sumvidop.summa<>0
{
oraclen.write(tp.sumvidop.tabn);
oraclen.write(tp.sumvidop.vidopl);
oraclen.write(sd);
oraclen.write(Ошибка!!!');
priz_error:=1;
}
...
} // tp.loop
if priz_error>0 then oraclen.showfile('oracle.txt');
}
end;
end.

Добавлено: 25 дек 2009, 09:58
KATZ
1. Сначала собрать все ошибки во временную таблицу, а потом из нее выводить в отчет.
2. Использовать метод NoDialog, который
подавляет вызов окна выбора форм и исполняет все отчеты из списка отчетов формы

Добавлено: 25 дек 2009, 10:30
s2176
Во временную, конечно можно, но не хочется, а с nodialog почему-то не получается((
Я вставила в интерфейс перед oraclen.write()
oraclen.nodialog;

В форме в конце вставила:
.begin oraclen.fexit
end.

Но не помогает((( Все равно запрос выдается сразу.

Добавлено: 25 дек 2009, 10:35
edward_K
Правило хорошего тона - запросить сразу список отчетов.
типа сделать вначале
oraclen.reinit
if oraclen.error
{ abort;
exit;
}
если форма одна и fcenv=off то и запроса не будет.

Добавлено: 25 дек 2009, 11:11
s2176
форма пока одна, но, может, еще придется присоединять.

Перед _loop'ом вставила:

oraclen.reinit
if oraclen.error
{ abort;
exit;
}
oraclen.nodialog;

Но, увы, ничего не изменилось(((

Добавлено: 25 дек 2009, 13:12
Den
Тут нужно, видимо, знать как устроен устроен этот кусок атлантиса.
Если сделано так, что системе нужно знать заранее в каком виде выводить инфу (по какому Вами созданному linkform) то значит он будет спрашивать сначала по какой форме формировать отчет.

Добавлено: 25 дек 2009, 13:16
s2176
Т.е., если я вас правильно поняла, победить это нельзя, выход один - использовать временную таблицу?

Добавлено: 25 дек 2009, 13:24
Den
Ну может и можно как то )
Screw или LaaLaa может подскажут, если это возможно.
Но вообще вроде всегда вначале форму спрашивало. Не вижу в этом особого неудобства. Для Вас чем так принципиально чтобы вконце запрашивало ее ?

Добавлено: 25 дек 2009, 13:24
KATZ
NoDialog д. б. после ReInit, но перед Error.

Еще такой момент. Сам не проверял, но, возможно, если задан Forms.FCEnv=On, то NoDialog не сработает (при стандартном Off проверено и срабатывает).

Добавлено: 25 дек 2009, 14:02
edward_K
а вы уверены что запрос пошел после ошибки? после моего куска вставте мессагу. Того ведь и добиваемся что появился не спустя полчаса а сразу.
NoDialog д. б. после ReInit, но перед Error
тоже справедливо. К появлению списка должно привести oraclen.error
да ReInit здесь привел исключительно для обработки некоректного програмирования когда при по концевке не делается showfile или abortform - тогда reinit дает возможность нормально перестроить отчет.

Добавлено: 25 дек 2009, 14:33
s2176
Сделал после ReInit, но перед Error.
interface Nach_Or 'Выгрузка начислений' escclose;
create view
....
form oraclen('or_nach.txt');

screen Sc1
...
end;

HandleEvent
cmOk:
{
...
oraclen.reinit;
oraclen.nodialog;
if oraclen.error { abort; exit; }

tp._loop sumvidop
{
...
if j>0 and _bklass='_' and tp.sumvidop.summa<>0
{
oraclen.write(tp.sumvidop.tabn);
oraclen.write(tp.sumvidop.vidopl);
oraclen.write(sd);
oraclen.write(Ошибка!!!');
priz_error:=1;
}
...
} // tp.loop
if priz_error>0 then oraclen.showfile('oracle.txt');
}
end;
end.

Ничего не изменилось(((
Похоже, придется временную таблицу делать.

Добавлено: 25 дек 2009, 15:33
edward_K
а мессагу перед loop?

Добавлено: 25 дек 2009, 15:41
KATZ
Не поленился, проверил. Настройка Forms.FCEnv=On более значима, чем NoDialog, т. е. при включенной настройке окно выбора появляется, несмотря на NoDialog. При выключенной настройке окна выбора нет. Если у вас оно всё равно появляется - есть какая-то причина. Выкладывайте весь текст, может, общими усилиями что-то найдем.

Добавлено: 25 дек 2009, 15:46
s2176
сообщение выскакивает ПОСЛЕ окна выбора отчета.
Выключать настройку я не хочу((
Буду делать временную таблу.

Добавлено: 25 дек 2009, 15:52
edward_K
ну так этого и добивались - все нормально.Смысл в том чтобы человек запустил отчет и пошел пить кофе - пришел а уже все сформировалось и не надо нажимать чего то еще и ждать еще несколько минут. К тому же у пользователя fcenv = off обычно включено.