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

Удаление задвоения из Sumvidop

Добавлено: 17 май 2002, 10:29
sol
Нужно удалить задвоения по начислениям в архиве за март. Использую такую конструкцию 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

Re: Удаление задвоения из Sumvidop

Добавлено: 17 май 2002, 11:40
Max_Fin
Объяви синоним таблицы
Synonym SumVidOp SumVidOpSyn
наложи на нее нужные тебе условия
SumVidOp.VidOpl = SumVidOpSyn.VidOpl And
SumVidOp.Summa = SumVidOpSyn.Summa
И удаляй запись из этой таблы

А так как у тебя необязательно, что следующей записью будет именно та, которую надо тебе удалять. Вот и получается ...

Re: Удаление задвоения из Sumvidop

Добавлено: 17 май 2002, 11:41
Max_Fin
А вообще это лучше в VIP'е делать

Re: Удаление задвоения из Sumvidop

Добавлено: 17 май 2002, 13:26
Sail
Да, делать несомненно, лучше на 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 возвращает гораздо больше строк, чем есть дублей на самом деле, зато удаляются все дубли. "Оригинальная" запись остается.