Таблица в памяти
Добавлено: 08 дек 2004, 16:58
У меня возникла проблема с Update таблицы в памяти. Необходимо подбить итоги за период по приходам МЦ на несколько складов (суммы берутся из накладных).
Версия Галактики 5.85.02
Версия Атлантис 4.35
Проблема в следующем: при первом вхождении МЦ происходит вставка записи в таблицу в памяти, при повторном вхождении МЦ программа не находит ее в таблице и опять делает Insert, а хочется Update.
В чем причина? HELP !!!!
Вот текст программы:
!
! В prj-файле первой строкой идет
! #include grmc_struct.inc
! в котором описана таблица в памяти
!
!Table struct SMC
! (mname : String[80], // Наименование МЦ
! gcode : String[10], // Код группы МЦ
! ves_n : Double,
! sum_n : Double,
! ves_d : Double,
! sum_d : Double,
! nds : Double)
!with index (M1 = mname);
!
! Таблица в памяти используется для накопления итогов по МЦ по нескольким складам
!
.linkform 'PMN_1' prototype is 'EngSklad'
.NameInList ' ------------ '
.group 'PMN'
.defo Portrait
.p 80
.c 1
.o 10
.var
kgroup, mcname : string;
kol, rprice, sumnds : double; nds_1, ves_1, sum_1 : double;
nds_0, ves_0, sum_0 : double; nds_a, ves_a, sum_a : double;
.endvar
!
.Create view MySpSopr from SpSopr(readonly)
where (( nRec_SpSopr /== SpSopr.nrec and Spsopr.cmcusl /== KatMC.nrec ));
!
.Create view mctab from SMC;
!
.begin delete all from SMC end.
.fields
CommonFormHeader
'О Т Г Р У З К А П Р О Д У К Ц И И' 'с '+begper+' по '+endper
namemat ves_1 sum_1 nds_1 sum_1+nds_1
skl ves_0 sum_0 nds_0 sum_0+nds_0
mctab.mname mctab.ves_n mctab.sum_n mctab.nds mctab.sum_n+mctab.nds
ves_a sum_a nds_a sum_a+nds_a
.endfields
Р ^
@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.{
───────────────────────────────────┬────────────┬───────────────┬─────────────┬───────────────
Наименование МЦ │ вес, кг │ сумма без НДС │ НДС, руб. │ сумма с НДС
───────────────────────────────────┼────────────┼───────────────┼─────────────┼───────────────
.begin ves_0 := 0; sum_0 := 0; nds_0 := 0; end.
.{
.begin ves_1 := 0; sum_1 := 0; nds_1 := 0; end.
.{
.begin
kgroup := if(MySpSopr.getfirst SpSopr != tsOK, '',
if(MySpSopr.getfirst KatMC != tsOK, '', Trim(MySpSopr.KatMC.kgroupmc)));
kol := if(MySpSopr.getfirst SpSopr != tsOK, 0, MySpSopr.SpSopr.kol);
rprice := if(MySpSopr.getfirst SpSopr != tsOK, 0, MySpSopr.SpSopr.rprice);
sumnds := if(MySpSopr.getfirst SpSopr != tsOK, 0, MySpSopr.SpSopr.sumnds);
mcname := Trim(namemat);
nds_1 := nds_1 + sumnds; sum_1 := sum_1 + rprice*kol; ves_1 := ves_1 + kolprmas;
end.
.}
.begin
ves_0 := ves_0 + ves_1; sum_0 := sum_0 + sum_1; nds_0 := nds_0 + nds_1;
!
!
if ((GetFirst SMC where SMC.mname = mcname) = tsOk)
!
!
!
! Вот тут начинаются капризы.
! Условие ((GetFirst SMC where SMC.mname = mcname) = tsOk)
! никогда не выполняется и все время происходит вставка записи в SMC
!
!
!
then Update Current SMC Set
SMC.nds := SMC.nds + sumnds, SMC.sum_n := SMC.sum_n + rprice*kol,
SMC.ves_n := SMC.ves_n + kolprmas;
else { Insert SMC; Update Current SMC Set SMC.mname := mcname, SMC.gcode := kgroup,
SMC.ves_n := kolprmas, SMC.sum_n := rprice*kol, SMC.nds := sumnds;
}
end.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@│&#&&&&&&.&&&│&'&&&&&&&&&&&&&│&'&&&&&&&&&&&│&'&&&&&&&&&&&&&
.}
Б@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@│&#&&&&&&.&&&│&'&&&&&&&&&&&&&│&'&&&&&&&&&&&│&'&&&&&&&&&&&&& Б
─────────────────────────────────────┴────────────┴───────────────┴─────────────┴─────────────
.if DetSkl
.{ DetSklC CheckEnter
.}
.end
.}
.if engsklad01
.if DetOrg
.{ DetOrgC CheckEnter
.}
.end
.end
!
! Далее следует вывод итоговой таблицы по МЦ
!
Р
.endform
Версия Галактики 5.85.02
Версия Атлантис 4.35
Проблема в следующем: при первом вхождении МЦ происходит вставка записи в таблицу в памяти, при повторном вхождении МЦ программа не находит ее в таблице и опять делает Insert, а хочется Update.
В чем причина? HELP !!!!
Вот текст программы:
!
! В prj-файле первой строкой идет
! #include grmc_struct.inc
! в котором описана таблица в памяти
!
!Table struct SMC
! (mname : String[80], // Наименование МЦ
! gcode : String[10], // Код группы МЦ
! ves_n : Double,
! sum_n : Double,
! ves_d : Double,
! sum_d : Double,
! nds : Double)
!with index (M1 = mname);
!
! Таблица в памяти используется для накопления итогов по МЦ по нескольким складам
!
.linkform 'PMN_1' prototype is 'EngSklad'
.NameInList ' ------------ '
.group 'PMN'
.defo Portrait
.p 80
.c 1
.o 10
.var
kgroup, mcname : string;
kol, rprice, sumnds : double; nds_1, ves_1, sum_1 : double;
nds_0, ves_0, sum_0 : double; nds_a, ves_a, sum_a : double;
.endvar
!
.Create view MySpSopr from SpSopr(readonly)
where (( nRec_SpSopr /== SpSopr.nrec and Spsopr.cmcusl /== KatMC.nrec ));
!
.Create view mctab from SMC;
!
.begin delete all from SMC end.
.fields
CommonFormHeader
'О Т Г Р У З К А П Р О Д У К Ц И И' 'с '+begper+' по '+endper
namemat ves_1 sum_1 nds_1 sum_1+nds_1
skl ves_0 sum_0 nds_0 sum_0+nds_0
mctab.mname mctab.ves_n mctab.sum_n mctab.nds mctab.sum_n+mctab.nds
ves_a sum_a nds_a sum_a+nds_a
.endfields
Р ^
@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.{
───────────────────────────────────┬────────────┬───────────────┬─────────────┬───────────────
Наименование МЦ │ вес, кг │ сумма без НДС │ НДС, руб. │ сумма с НДС
───────────────────────────────────┼────────────┼───────────────┼─────────────┼───────────────
.begin ves_0 := 0; sum_0 := 0; nds_0 := 0; end.
.{
.begin ves_1 := 0; sum_1 := 0; nds_1 := 0; end.
.{
.begin
kgroup := if(MySpSopr.getfirst SpSopr != tsOK, '',
if(MySpSopr.getfirst KatMC != tsOK, '', Trim(MySpSopr.KatMC.kgroupmc)));
kol := if(MySpSopr.getfirst SpSopr != tsOK, 0, MySpSopr.SpSopr.kol);
rprice := if(MySpSopr.getfirst SpSopr != tsOK, 0, MySpSopr.SpSopr.rprice);
sumnds := if(MySpSopr.getfirst SpSopr != tsOK, 0, MySpSopr.SpSopr.sumnds);
mcname := Trim(namemat);
nds_1 := nds_1 + sumnds; sum_1 := sum_1 + rprice*kol; ves_1 := ves_1 + kolprmas;
end.
.}
.begin
ves_0 := ves_0 + ves_1; sum_0 := sum_0 + sum_1; nds_0 := nds_0 + nds_1;
!
!
if ((GetFirst SMC where SMC.mname = mcname) = tsOk)
!
!
!
! Вот тут начинаются капризы.
! Условие ((GetFirst SMC where SMC.mname = mcname) = tsOk)
! никогда не выполняется и все время происходит вставка записи в SMC
!
!
!
then Update Current SMC Set
SMC.nds := SMC.nds + sumnds, SMC.sum_n := SMC.sum_n + rprice*kol,
SMC.ves_n := SMC.ves_n + kolprmas;
else { Insert SMC; Update Current SMC Set SMC.mname := mcname, SMC.gcode := kgroup,
SMC.ves_n := kolprmas, SMC.sum_n := rprice*kol, SMC.nds := sumnds;
}
end.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@│&#&&&&&&.&&&│&'&&&&&&&&&&&&&│&'&&&&&&&&&&&│&'&&&&&&&&&&&&&
.}
Б@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@│&#&&&&&&.&&&│&'&&&&&&&&&&&&&│&'&&&&&&&&&&&│&'&&&&&&&&&&&&& Б
─────────────────────────────────────┴────────────┴───────────────┴─────────────┴─────────────
.if DetSkl
.{ DetSklC CheckEnter
.}
.end
.}
.if engsklad01
.if DetOrg
.{ DetOrgC CheckEnter
.}
.end
.end
!
! Далее следует вывод итоговой таблицы по МЦ
!
Р
.endform