Вызов отчета из своего интерфейса.
Модераторы: m0p3e, edward_K, Модераторы
Вызов отчета из своего интерфейса.
Добрый день!
Есть интерфейс, который читает таблицу 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.
Есть интерфейс, который читает таблицу 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.
Кто сказал, что бесполезно биться головой об стену?!
Во временную, конечно можно, но не хочется, а с nodialog почему-то не получается((
Я вставила в интерфейс перед oraclen.write()
oraclen.nodialog;
В форме в конце вставила:
.begin oraclen.fexit
end.
Но не помогает((( Все равно запрос выдается сразу.
Я вставила в интерфейс перед oraclen.write()
oraclen.nodialog;
В форме в конце вставила:
.begin oraclen.fexit
end.
Но не помогает((( Все равно запрос выдается сразу.
Кто сказал, что бесполезно биться головой об стену?!
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
а вы уверены что запрос пошел после ошибки? после моего куска вставте мессагу. Того ведь и добиваемся что появился не спустя полчаса а сразу.
да ReInit здесь привел исключительно для обработки некоректного програмирования когда при по концевке не делается showfile или abortform - тогда reinit дает возможность нормально перестроить отчет.
тоже справедливо. К появлению списка должно привести oraclen.errorNoDialog д. б. после ReInit, но перед Error
да ReInit здесь привел исключительно для обработки некоректного програмирования когда при по концевке не делается showfile или abortform - тогда reinit дает возможность нормально перестроить отчет.
Сделал после 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.
Ничего не изменилось(((
Похоже, придется временную таблицу делать.
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.
Ничего не изменилось(((
Похоже, придется временную таблицу делать.
Кто сказал, что бесполезно биться головой об стену?!
Не поленился, проверил. Настройка Forms.FCEnv=On более значима, чем NoDialog, т. е. при включенной настройке окно выбора появляется, несмотря на NoDialog. При выключенной настройке окна выбора нет. Если у вас оно всё равно появляется - есть какая-то причина. Выкладывайте весь текст, может, общими усилиями что-то найдем.