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

ошибка при использовании isValidAll

Добавлено: 14 авг 2006, 15:39
s2176
Добрый всем день!

Вот такой файл проекта:
Table Struct tab_esn
( tabn : longInt,
tperson : comp,
vidopl : longInt,
SUMMA : double
)
With INDEX
( ind1 = tperson+vidopl
);

Table Struct tab_nach
( tabn : longInt,
tperson : comp,
vidopl : longInt,
mes : word,
SUMMA : double,
Otdel_zp : string,
schetd : string,
sschetd : string,
chasf : double
)
With INDEX
( ind1 = tperson+vidopl+mes
);


Table Struct tmpKlvop
( vidoplp : longInt,
nvidopl : string,
BKLASS : string,
NBKLASS : string,
vhvs : string
)
with index
( ind1 = vidoplp
);

Table Struct tmpapp
( tperson : comp,
appdate : date,
disdate : date,
code : string,
name : string,
dolgn : string,
kateg : string
)
with index
( ind1 = tperson
);
#include god_mes.dlg
#make "nach_mvz_new.frm"


а вот текст nach_mvz_new.frm:

.form 'Начисления за прошлые месяцы с МВЗ из ШР'
.ard
.group 'Отчеты для ОТИЗ'
.var god, mes: string[6];
_bklass: string;
dd,yy,mm,kk,i,j,mesz: word;
dostup, _row: word;
dat_uv, app_date: date;
nrec_pers: comp;
vv: longint
sss: string;
.endvar
.create view tklvo
as select klvidopl.*, exclassseg.value, exclassseg.name
from klvidopl, exclassseg
where ((klvidopl.nrec==exclassval.crec
and exclassval.cclassseg==exclassseg.nrec and 12==exclassval.classcode
and 15010==exclassval.wtable
))
;
.create view tn2
as select katpodr.name, sumvidop.*
from sumvidop, katpodr
where((cexoz==katpodr.nrec and yy==sumvidop.yearn and mm==sumvidop.mesn
))
;
.create view tn1
as select katpodr.name, nenach.*
from nenach, katpodr
where((cexoz==katpodr.nrec and yy==nenach.yearn and mm==nenach.mesn
))
;
.create view tdi
as select appointments.*,
catalogs.name, catalogs.code, cat.name, klkatego.naikat
from appointments(APNTBYPERSON), catalogs cat, catalogs, klkatego
where ((appointments.department==catalogs.nrec and
post==cat.nrec and empcategory==klkatego.nrec and
date(dd,mm,yy)>>=appointdate(noindex)
))
;
.create view tnach
as select tab_nach.*, tmpklvop.*, persons.*, tmpapp.*
from tab_nach(ind1), tmpklvop, tmpapp, persons
where ((tab_nach.tperson == tmpapp.tperson and tab_nach.vidopl == tmpklvop.vidoplp and
tab_nach.tperson == persons.nrec
))
;
.create view t_vo
as select tmpklvop.*
;
.create view t_app
as select tmpapp.*
bounds bta = nrec_pers==tmpapp.tperson
;
.create view t_nach
as select tab_nach.*
bounds bte = nrec_pers==tab_nach.tperson and vv==tab_nach.vidopl and mesz==tab_nach.mes
;
.fields
_curdatetime
_curdatetime
.endfields
Начало процесса - ^
.begin
yy:=year(dGetTune('UP.DATOTCH')); mm:=month(dGetTune('UP.DATOTCH'))
if mm=1 then { mm:=12; yy:=yy-1; }
else mm:=mm-1;
god:=string(yy); mes:=string(mm);
rundialog(getmesYear,god,mes);
yy:=word(god); mm:=word(mes); dd:=last_day(date(1,mm,yy));
dostup:=0
if sGetTune('USER.DESGR')='OTIZ' dostup:=1;
if pr_CurUserAdmin=true then dostup:=1;
! Вытаскиваю внешнюю классификацию, привязанную к видам оплет.
if tklvo.getfirst klvidopl = tsOk
{ do { if tklvo.exclassseg.value<>''
then _bklass:=tklvo.exclassseg.value
else _bklass:='';
t_vo.insert tmpklvop
set vidoplp:=tklvo.klvidopl.vidoplp, nvidopl:=tklvo.klvidopl.nvidopl, bklass:=_bklass,
nbklass:=tklvo.exclassseg.name, vhvs:=string(tklvo.klvidopl.vhvo[27]);
} while tklvo.getnext klvidopl = tsOk
}
startNewVisual(vtNumericVisual,vfTimer,'Выгружаю назначения.....',1);
t_app.pushBounds(t_app.tbbta);
end.
! Выбираю назначения из кадров, которые соответствуют выбранному
!месяцу
.{ table 'tdi'
.begin
nrec_pers:=tdi.appointments.person; app_date:=tdi.appointments.appointdate;
if tdi.appointments.dismissdate<>date(0,0,0)
then dat_uv:=tdi.appointments.dismissdate
else dat_uv:=tdi.appointments.dateend;
if dat_uv=date(0,0,0) then dat_uv:=date(31,12,2100);
if t_app.getfirst tmpapp = tsOk
{ if app_date<=date(16,mm,yy)
then { if dat_uv>=t_app.tmpapp.disdate
{ t_app.update tmpapp
set code:=tdi.catalogs.code, name:=tdi.catalogs.name, appdate:=app_date,
disdate:=dat_uv, kateg:=tdi.klkatego.naikat, dolgn:=tdi.cat.name;
}
};
}
else { t_app.insert tmpapp
set tperson:=tdi.appointments.person, code:=tdi.catalogs.code, name:=tdi.catalogs.name,
dolgn:=tdi.cat.name, kateg:=tdi.klkatego.naikat, appdate:=app_date, disdate:=dat_uv;
};
NextVisual();
end.
.}
.{?internal; dostup=1
.begin
stopVisual('',0);
t_app.popBounds(t_app.tbbta);
startNewVisual(vtNumericVisual,vfTimer,'выгpyжаю начисления.....',1);
t_nach.pushBounds(t_nach.tbbte);
end.
.{ table 'tn2'
.begin
nrec_pers:=tn2.sumvidop.tperson; vv:=tn2.sumvidop.vidoplp; mesz:=tn2.sumvidop.mes;
if t_nach.getfirst tab_nach = tsOk
then { t_nach.update from tab_nach
set summa:=tab_nach.summa+tn2.sumvidop.summa;
}
else { t_nach.insert tab_nach
set tabn:=longint(tn2.sumvidop.tabn), tperson:=comp(tn2.sumvidop.tperson),
vidopl:=longint(tn2.sumvidop.vidoplp), summa:=tn2.sumvidop.summa,
mes:=tn2.sumvidop.mes, otdel_zp:=tn2.katpodr.name, chasf:=tn2.sumvidop.chasf,
schetd:=tn2.sumvidop.cschetd, sschetd:=tn2.sumvidop.csubschd;
};
NextVisual();
end.
.}
.begin
stopVisual('',0);
startNewVisual(vtNumericVisual,vfTimer,'выгpyжаю неначисляемый доход.....',1);
end.
.{ table 'tn1'
.begin
nrec_pers:=tn1.nenach.tperson; vv:=tn1.nenach.vidopl; mesz:=tn1.nenach.mes;
if t_nach.getfirst tab_nach = tsOk
then { t_nach.update from tab_nach
set summa:=tab_nach.summa+tn1.nenach.summa;
}
else { t_nach.insert tab_nach
set tabn:=longint(tn1.nenach.tabn), tperson:=comp(tn1.nenach.tperson),
vidopl:=longint(tn1.nenach.vidopl), summa:=tn1.nenach.summa,
mes:=tn1.nenach.mes, otdel_zp:=tn1.katpodr.name, chasf:=tn1.nenach.chasf,
schetd:=tn1.nenach.cschetd, sschetd:=tn1.nenach.csubschd;
};
NextVisual();
end.
.}
.begin
stopVisual('',0);
t_nach.popBounds(t_nach.tbbte);
....
end.
.{ table 'tnach.tab_nach'
.begin
if isvalidall(tnTMPaPP) then message(tnach.persons.fio)
/* компилятор ругается на tnTMPaPP
TMPaPP - моя временная таблица, описанная в проекте.
Дело в том, что не каждой записи из tab_nach найдется соответствующая из TMPaPP. Когда нет соответсятвия тащится "левая" информация. Как отловить такую ситуацию?
*/
...
end.
.}
.}
Завершение процесса - ^
.endform