почему не всегда работает update?
Добавлено: 08 июн 2010, 16:10
Здравствуйте, подскажите, почему на большом интервале дат у меня срабатывает update, а на маленьком до месяца, всегда вставляется новая строка , всегда срабатывает INSERT .
lim3 из проекта Table Struct Lim3
(
barkod: string[81],
LASTUSER: string[21],
DSUMLIMIT: double,
DCOTP: double,
NAMEMC: string[81],
DCOT: DOUBLE,
DCON: DOUBLE,
DNAZ201: DOUBLE,
DNAZ502: DOUBLE,
DNAZ103: DOUBLE,
DNAZ600:DOUBLE,
DNAZ102:DOUBLE,
DNAZP630:DOUBLE,
DNAZR630:DOUBLE,
DNAZ106:DOUBLE,
DNAZR600:DOUBLE,
DNAZ202:DOUBLE,
DNAZ204:DOUBLE,
DnazPOV:Double,
DNazPOP:Double,
DnazROv:Double,
DnazROP:Double,
D1:DOUBLE,
D2:DOUBLE,
SSIMV: STRING[81],
sh:string[20],
svet:string[20],
CKATMC: comp,
SumOO: Double
)
With Index
(
Index00 =barkod+Lastuser,
Index01 = ckatmc,
Index03 = SumOO,
INDEX04 = LASTUSER
);
#make "C:\ira\forms8\mc\nnn\i2.slk"
Присоединенная форма.
...
.Create view ord1
from SKLORDER,sporder,synonym katmc kat1
where
((sklOrder.nrec==spOrder.CSKLORDER
and
sporder.cmc==kat1.nrec
and Dat1 <<= SklOrder.dord
and Dat2 >>=sklorder.dord
))
and
(
sklorder.CSOPR=comp(0000000000000000h)
and sklorder.tipord=tp
and sklorder.vidorder=vid1
and sklOrder.cpodr=sklad_nrec
)
;
.create view tt
from lim3
order by barkod,LASTUSER
;
...
!расходный ордер операц с производством
.begin
tp:=2;Skolf:=0;vid1:=1;
end.
.{table 'ord1.sklorder'
.{table 'ord1.sporder'
.begin
NamMc:='';Skolf:=0;
C_Mc:=ord1.spOrder.Cmc;
CVET:=sTXoGetField('SpKau','Name',GetKauMcUsl(10087,281474976710658,0,c_mc));
NomMc:=StxoGetField('KatMC','Barkod',C_Mc);
Nammc:=StxoGetField('KatMC','Barkod',C_Mc)+' '+StxoGetField('KatMC','Name',C_Mc);
SkolF:=Double(ord1.Sporder.kol);
if (GetFirst lim3
where (( CVET ==lim3.Barkod AND NomMc==lim3.Lastuser)) = tsOk) Then
{
Update current lim3 set
lim3.DNAZROP:=lim3.DNAZROP+SkolF;
}
else
insert lim3
set
lim3.barkod:=CVET,
lim3.Lastuser:=NomMc,
lim3.namemc:=NamMc+' '+bk,
lim3.svet:=CVET,
lim3.DNAZROP:=SkolF;
end.
.}
.}
Такое впечатление, что таблица tt на маленьких интервалах времени не успевает создаваться. И поэтому образуется у меня много одинаковых строчек.
lim3 из проекта Table Struct Lim3
(
barkod: string[81],
LASTUSER: string[21],
DSUMLIMIT: double,
DCOTP: double,
NAMEMC: string[81],
DCOT: DOUBLE,
DCON: DOUBLE,
DNAZ201: DOUBLE,
DNAZ502: DOUBLE,
DNAZ103: DOUBLE,
DNAZ600:DOUBLE,
DNAZ102:DOUBLE,
DNAZP630:DOUBLE,
DNAZR630:DOUBLE,
DNAZ106:DOUBLE,
DNAZR600:DOUBLE,
DNAZ202:DOUBLE,
DNAZ204:DOUBLE,
DnazPOV:Double,
DNazPOP:Double,
DnazROv:Double,
DnazROP:Double,
D1:DOUBLE,
D2:DOUBLE,
SSIMV: STRING[81],
sh:string[20],
svet:string[20],
CKATMC: comp,
SumOO: Double
)
With Index
(
Index00 =barkod+Lastuser,
Index01 = ckatmc,
Index03 = SumOO,
INDEX04 = LASTUSER
);
#make "C:\ira\forms8\mc\nnn\i2.slk"
Присоединенная форма.
...
.Create view ord1
from SKLORDER,sporder,synonym katmc kat1
where
((sklOrder.nrec==spOrder.CSKLORDER
and
sporder.cmc==kat1.nrec
and Dat1 <<= SklOrder.dord
and Dat2 >>=sklorder.dord
))
and
(
sklorder.CSOPR=comp(0000000000000000h)
and sklorder.tipord=tp
and sklorder.vidorder=vid1
and sklOrder.cpodr=sklad_nrec
)
;
.create view tt
from lim3
order by barkod,LASTUSER
;
...
!расходный ордер операц с производством
.begin
tp:=2;Skolf:=0;vid1:=1;
end.
.{table 'ord1.sklorder'
.{table 'ord1.sporder'
.begin
NamMc:='';Skolf:=0;
C_Mc:=ord1.spOrder.Cmc;
CVET:=sTXoGetField('SpKau','Name',GetKauMcUsl(10087,281474976710658,0,c_mc));
NomMc:=StxoGetField('KatMC','Barkod',C_Mc);
Nammc:=StxoGetField('KatMC','Barkod',C_Mc)+' '+StxoGetField('KatMC','Name',C_Mc);
SkolF:=Double(ord1.Sporder.kol);
if (GetFirst lim3
where (( CVET ==lim3.Barkod AND NomMc==lim3.Lastuser)) = tsOk) Then
{
Update current lim3 set
lim3.DNAZROP:=lim3.DNAZROP+SkolF;
}
else
insert lim3
set
lim3.barkod:=CVET,
lim3.Lastuser:=NomMc,
lim3.namemc:=NamMc+' '+bk,
lim3.svet:=CVET,
lim3.DNAZROP:=SkolF;
end.
.}
.}
Такое впечатление, что таблица tt на маленьких интервалах времени не успевает создаваться. И поэтому образуется у меня много одинаковых строчек.