Добрый всем день!
Собственно вопрос в самом конце текста формы, в комментариях
Вот такой файл проекта:
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
			
			
									
						
										
						Проблемы с isvalidall()
Модераторы: m0p3e, edward_K, Модераторы