Нужно удалить задвоения по начислениям в архиве за март. Использую такую конструкцию ARD. Пока ничего не получается. удаления не происходит. Никто не сталкивался с подобным?
.FORM 'ђҐ¤ ЄвЁа®ў ЁҐ sumvidop1'
.F"c:\Pens\esn.out"
!.Hide
.group 'ђ бзҐв Ї®  ў б®ўл¬ Ї« вҐ¦ ¬ Ї® бва е®ўл¬ ў§®б ¬'
.ard
.var
   mes,metka,pol,famil,famil1:string;
   god:string;
   myC,interval1,interval2: comp;
   myd,int1,int2,int3,int4,int5,int6,int7,godr:date;
   bdat:date;nr1,nr2:longint;
   bdat1:string;
   proba,n1,n2,n3,priznak,s1,s2:double;
   edat1:string;
   edat:date;
   sumv,Curs,cursdate: date;
   _month:date;
   month:string;
   data:string;
   _data:date;
   data1:string;
   _data1:date;
   data2,sub_sch,sub_sch1:string;
   _data2:date;
   v1,v2,vsego1,vsego2,vsego3: double;
   name1,name2,nameorg:string;
   dnakl:string;
   mesn,godn:integer;
.endvar
.create view tt as select * from sumvidop
where ((
        Root==sumvidop.nrec
                   ))
      and sumvidop.yearn=integer(2002)
      and sumvidop.mesn=word(3)
      order by sumvidop.tabn, sumvidop.vidopl,sumvidop.summa
            ;
.fields
 sumvidop.tabn sumvidop.vidopl sumvidop.summa
.endfields
 ’.®¬Ґа ‚Ё¤ ®Ї« вл ‘г¬¬ 
!–ЁЄ« Ї® в Ў«ЁжҐ
.{table 'tt:main'
.begin
 nr1:=sumvidop.vidopl;
 s1:=sumvidop.summa;
 metka:=modifier getnext;
 nr2:=sumvidop.vidopl;
 s2:=sumvidop.summa;
 if metka<>'4' then modifier getprev;
 if nr1=nr2 and s2=s1 then priznak:=1;
end.
.{?internal;priznak=1;
  &&&&&&&&&&&      @@@@@@@      &&&&&&&&&&&.&&
.begin
 delete current sumvidop;
 priznak:=0;
end.
.}
.}
.Endform
			
			
									
						
										
						Удаление задвоения из Sumvidop
Модераторы: m0p3e, edward_K, Модераторы
- 
				Max_Fin
- На пенсии
- Сообщения: 797
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: г. Тюмень
- Контактная информация:
Re: Удаление задвоения из Sumvidop
Объяви синоним таблицы 
Synonym SumVidOp SumVidOpSyn
наложи на нее нужные тебе условия
SumVidOp.VidOpl = SumVidOpSyn.VidOpl And
SumVidOp.Summa = SumVidOpSyn.Summa
И удаляй запись из этой таблы
А так как у тебя необязательно, что следующей записью будет именно та, которую надо тебе удалять. Вот и получается ...
			
			
									
						
							Synonym SumVidOp SumVidOpSyn
наложи на нее нужные тебе условия
SumVidOp.VidOpl = SumVidOpSyn.VidOpl And
SumVidOp.Summa = SumVidOpSyn.Summa
И удаляй запись из этой таблы
А так как у тебя необязательно, что следующей записью будет именно та, которую надо тебе удалять. Вот и получается ...
Жду выхода Вселенная 2.12!
			
						Re: Удаление задвоения из Sumvidop
Да, делать несомненно, лучше на Vip'е
Вот простенький интерфейс:
interface corr '!!!' EscClose, cyan;
create view as
select s1.*
from
synonym sumvidop s1,
synonym sumvidop s2
where((
s1.cex == s2.cex
and
s1.tabn == s2.tabn
and
s1.yearn == s2.yearn
and
s1.mesn == s2.mesn
and
s1.vidopl == s2.vidopl
and
s1.summa == s2.summa(noindex)
))
and
s1.nrec > s2.nrec
and
2002 = s1.yearn
and
6 = s1.mesn
;
handleevent
cmInit:{
delete all from s1;
closeinterface(cmdefault);
}
end;
end.
Конечно, сам select возвращает гораздо больше строк, чем есть дублей на самом деле, зато удаляются все дубли. "Оригинальная" запись остается.
			
			
									
						
										
						Вот простенький интерфейс:
interface corr '!!!' EscClose, cyan;
create view as
select s1.*
from
synonym sumvidop s1,
synonym sumvidop s2
where((
s1.cex == s2.cex
and
s1.tabn == s2.tabn
and
s1.yearn == s2.yearn
and
s1.mesn == s2.mesn
and
s1.vidopl == s2.vidopl
and
s1.summa == s2.summa(noindex)
))
and
s1.nrec > s2.nrec
and
2002 = s1.yearn
and
6 = s1.mesn
;
handleevent
cmInit:{
delete all from s1;
closeinterface(cmdefault);
}
end;
end.
Конечно, сам select возвращает гораздо больше строк, чем есть дублей на самом деле, зато удаляются все дубли. "Оригинальная" запись остается.