update при цикле loop

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

update при цикле loop

Сообщение savov »

Доброго времени суток! При переходе на 8.10 столкнулся с проблемой.
Был код:
#Component "Savov_sbit"


Interface SrPriceP 'Расчет средних цен продаж' (,,) blue;
show at (2,2,60,8);



Table Struct TParam
( nRec : comp
,tdatebeg : Date
,tdateend : Date
)
with index
( TableNr = nRec
) ;

Table Struct Realiz
( nrec : Comp
,NameMC : String
,barkodMC : String
,EK : String
,Kolvo : double
,Price : double
,Summa : double
,pr : integer
,copybarkod: String
)
with index
( TNrec = nrec,
TableBarkod = barkodMC
);

Table Struct srPrices
( nrec : Comp
,NameMC : String
,barkodMC : String
,EK : String
,Kolvo : double
,Price : double
,Summa : double
,pr : integer
)
with index
( TNrec = nrec,
TableBarkod = barkodMC
) ;

Table Struct Realiz2
( nrec : Comp
,NameMC : String
,barkodMC : String
,EK : String
,Kolvo : double
,Price : double
,Summa : double
,pr : integer
,copybarkod: String
)
with index
( TNrec = nrec,
TableBarkod = barkodMC
);

File MyMakro;
Var Handle : LongInt;
var FileName: String;
var Dbeg :date;
var Dend :date;
var Kolvo_shin:double;
var Summa_shin:double;
var SP_shin, summa3, P3 :double;
var SumPos, Cena_p, Kolvo_p, Summa_p : double;
var Barkod_shin, barkodk, barkodp, Namep, file_name : string;
var r, rp, i, j, err : Integer;
var Procent: double;
var fl: boolean;

Create View T1 As Select *
From TParam, Realiz, Realiz2, srPrices;

!!!!!!!!!!!!!!!Получение списка накладных!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
create view otgr as
Select
katmc.barkod(FieldName=Barkod),
katmc.name(FieldName=Nmprod),
katmc.komplekt (FieldName=Pr),
katmc.tnved(Fieldname=EK),
katpodr.nrec(fieldname=sklad),
spsopr.kolfact(FieldName=Klv),
spsopr.price(FieldName=Cena),
spsopr.sumnds(fieldname=SumNds),
katorg.name(fieldname=org),
katsopr.dopr(fieldname=dskl)
Where ((
201==katsopr.vidsopr And
Dbeg<<=katsopr.dopr And DEnd>>=katsopr.dopr And
katsopr.nrec==spsopr.csopr And
katsopr.cpodrfrom==katpodr.nrec and
spsopr.cmcusl==katmc.nrec And
katsopr.nrec==sklorder.csopr and
spsopr.cotped==katotped.nrec and
katsopr.corg==katorg.nrec
)) and (substr(katmc.barkod,1,1)='G') and (sklorder.nrec>0) and (substr(katorg.name,1,8)<>'Рекламац')and (katpodr.nrec<>1000000000008h) and (katpodr.nrec<>400128ACD12B6BBBh)and (katpodr.nrec<>4001EFB530AE8A08h) Order by katmc.barkod, katmc.name;
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
create view otgr_p as
Select
katmc.barkod(FieldName=Barkod),
katmc.name(FieldName=Nmprod),
katmc.komplekt (FieldName=Pr),
katpodr.nrec(fieldname=sklad),
katmc3.name(FieldName=name3),
katmc3.barkod(FieldName=Barkod3),
katmc3.tnved(Fieldname=EK3),
katorg.name(fieldname=org),
katsopr.dopr(fieldname=dskl),
attrval.vdouble,
attrval.vdouble*spsopr.price/100(Fieldname=Price3),
spsopr.kolfact(FieldName=Klv),
spsopr.price(FieldName=Cena),
spsopr.kolfact*spsopr.price(fieldname=Summa)
From
Synonym
katmc katmc3
Where ((
201==katsopr.vidsopr and
Dbeg<<=katsopr.dopr and DEnd>>=katsopr.dopr and
katsopr.nrec==spsopr.csopr and
spsopr.cmcusl==katmc.nrec and
spsopr.cotped==katotped.nrec and
katsopr.corg==katorg.nrec and
katsopr.cpodrfrom==katpodr.nrec and
katmc.nrec==spmc.cmckompl and
spmc.cmc==katmc3.nrec and
katsopr.nrec==sklorder.csopr and
1411==attrnam.wtable and
'% стоимости'==attrnam.name and
1467==attrval.wtable and
spmc.nrec==attrval.crec and
attrnam.nrec==attrval.CATTRNAM
)) and (substr(katmc.barkod,1,1)='G') and (sklorder.nrec>0) and
(substr(katmc3.barkod,1,3)<>'G16') and (substr(katmc3.barkod,1,3)<>'G17') and (substr(katmc3.barkod,1,3)<>'G18')and (substr(katorg.name,1,8)<>'Рекламац') and (katpodr.nrec<>1000000000008h) and (katpodr.nrec<>400128ACD12B6BBBh)and (katpodr.nrec<>4001EFB530AE8A08h) Order by katmc.barkod, katmc.name;
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
//form srprice('srprice.out');


handleevent
CmInit:
{ Delete all from tParam;
Delete all from Realiz;
Delete all from Realiz2;
Delete all from SrPrices;
Insert tParam set tParam.nrec:=1, tParam.tdatebeg:=Cur_Date, tParam.tdateend:=Cur_Date;
}
end;



Panel P1;
Table TParam
screen vibdate
show at(1,,,3);
Fields
TParam.tdatebeg:[12], NoProtect ;
TParam.tdateend:[12], NoProtect ;
<<
&Период с .@@@@@@@@@@@@
&по .@@@@@@@@@@@@
>>
end;

screen vibbut
show at(1,4,,);

BUTTONS

cmgRas; cmgEsc;
<<
<.Рассчитать.> <.Выход.>
>>

end;//screen

handleevent
cmgRas:
{
DBeg:=TParam.tDatebeg;
Dend:=TParam.tDateEnd;
r:=otgR.getfirst;
i:=1;
StartNewVisual(vtRotateVisual, vfTimer,' Запись в таблицу комплектов и отдельных составляющих по накладным ',1);
while (r=0) do
{
if (otgr.Pr='1'){
insert Realiz set Realiz.NameMC:=otgr.NmProd, Realiz.EK:=otgr.EK, Realiz.barkodMC:=otgr.Barkod, Realiz.pr:=1,
Realiz.kolvo:=otgr.Klv, Realiz.Price:=otgr.Cena, Realiz.Summa:=otgr.Summa, Realiz.nrec:=i,
Realiz.copybarkod:=otgr.Barkod;
insert Realiz2 set Realiz2.NameMC:=otgr.NmProd, Realiz2.EK:=otgr.EK, Realiz2.barkodMC:=otgr.Barkod, Realiz2.pr:=1,
Realiz2.kolvo:=otgr.Klv, Realiz2.Price:=otgr.Cena, Realiz2.Summa:=otgr.Summa, Realiz2.nrec:=i,
Realiz2.copybarkod:=otgr.Barkod;
i:=i+1;
}
if (otgr.Pr='0') {
insert Realiz set Realiz.NameMC:=otgr.NmProd, Realiz.EK:=otgr.EK, Realiz.barkodMC:=otgr.Barkod, Realiz.pr:=0,
Realiz.kolvo:=otgr.Klv, Realiz.Price:=otgr.Cena, Realiz.Summa:=otgr.Summa, Realiz.nrec:=i,
Realiz.copybarkod:=otgr.Barkod;
insert Realiz2 set Realiz2.NameMC:=otgr.NmProd, Realiz2.EK:=otgr.EK, Realiz2.barkodMC:=otgr.Barkod, Realiz2.pr:=0,
Realiz2.kolvo:=otgr.Klv, Realiz2.Price:=otgr.Cena, Realiz2.Summa:=otgr.Summa, Realiz2.nrec:=i,
Realiz2.copybarkod:=otgr.Barkod;

i:=i+1}
r:=otgr.getnext;
}
r:=otgr_p.getfirst;
StopVisual('',0);
StartNewVisual(vtRotateVisual, vfTimer,' Разбиение комплектов ',1);
while (r=0) do
{
if ( (otgr_p.Pr='1') and (not (substr(otgr_p.barkod,1,4)='G123' and substr(otgr_p.barkod,9,2)='20'))
) {
if (otgr_p.Price3>0) {summa3:=otgr_p.Klv*otgr_p.Price3; P3:=otgr_p.Price3}
else {summa3:=otgr_p.Klv*otgr_p.Cena; P3:=otgr_p.Cena};
insert Realiz set Realiz.NameMC:=otgr_p.Name3, Realiz.EK:=otgr_p.EK3, Realiz.barkodMC:=otgr_p.Barkod3, Realiz.pr:=0,
Realiz.kolvo:=otgr_p.Klv, Realiz.Price:=otgr_p.Price3, Realiz.Summa:=Summa3, Realiz.nrec:=i,
Realiz.copybarkod:=otgr_p.Barkod3;
insert Realiz2 set Realiz2.NameMC:=otgr_p.Name3, Realiz2.EK:=otgr_p.EK3, Realiz2.barkodMC:=otgr_p.Barkod3, Realiz2.pr:=0,
Realiz2.kolvo:=otgr_p.Klv, Realiz2.Price:=otgr_p.Price3, Realiz2.Summa:=summa3, Realiz2.nrec:=i,
Realiz2.copybarkod:=otgr_p.Barkod3; ;
i:=i+1;
}
r:=otgr_p.getnext;
}
StopVisual('',0);
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if GetFirst Realiz=tsOk
{
Kolvo_p:=0;
Summa_p:=0;
Cena_p:=0;
i:=1;
Barkod_shin:='';
_loop Realiz
{ Message('конт точка ='+Barkod_shin+' '+Realiz.BarkodMC,0);
if ((Barkod_shin<>Realiz.BarkodMC) and (Realiz.copybarkod<>'XX'))
{ Barkod_shin:=Realiz.BarkodMC;
if GetFirst Realiz2=tsOK
{
Kolvo_p:=0;
Summa_p:=0;
_loop Realiz2
{

if (Realiz2.barkodMC=Barkod_shin)
{

Kolvo_p:=Kolvo_p+Realiz2.Kolvo;
Summa_p:=Summa_p+Realiz2.Price*Realiz2.Kolvo;
};

}
}

if ((Summa_p/Kolvo_p)>0)
{
insert srPrices set srPrices.NameMC:=Realiz.NameMC, srPrices.EK:=Realiz.EK, srPrices.barkodMC:=Barkod_shin, srPrices.pr:=Realiz.pr,
srPrices.kolvo:=Kolvo_p, srPrices.Price:=Summa_p/Kolvo_p, srPrices.Summa:=Summa_p, srPrices.nrec:=i
};
update Realiz where ((Barkod_shin==Realiz.barkodMC)) set Realiz.copybarkod:='XX';//РАНЬШЕ РАБОТАЛО!
}

}
}


if GetFirst srPrices=tsOk
// r:= srPrices.getFirst;
{ fl:=xlCreateExcel('%startpath%\Средние_цены_продажи_c'+DateToStr(DBeg,'DD.MM.YYYY')+'_по_'+DateToStr(DEnd,'DD.MM.YYYY')+'.xls',true);
fl:=xlSetCellStringValue('СРЕДНИЕ ЦЕНЫ ПРОДАЖ',1,1,1,1);
fl:=xlSetCellStringValue('за период с '+DateToStr(DBeg,'DD.MM.YYYY')+' по '+DateToStr(DEnd,'DD.MM.YYYY'),2,1,2,1);
fl:=xlSetCellStringValue('ЕК АМТЕЛ',3,1,3,1);
fl:=xlSetCellStringValue('Номенклатурный',3,2,3,2);
fl:=xlSetCellStringValue('Наименование',3,3,3,3);
fl:=xlSetCellStringValue('Кол-во,',3,4,3,4);
fl:=xlSetCellStringValue('Цена,',3,5,3,5);
fl:=xlSetCellStringValue('Сумма,',3,6,3,6);
fl:=xlSetCellStringValue('номер',4,2,4,2);
fl:=xlSetCellStringValue('штук',4,4,4,4);
fl:=xlSetCellStringValue('руб.',4,5,4,5);
fl:=xlSetCellStringValue('руб.',4,6,4,6);
j:=5;
_loop srPrices
// while(r=0) do
{
fl:=xlSetCellStringValue(srPrices.EK,j,1,j,1);
fl:=xlSetCellStringValue(srPrices.BarkodMC,j,2,j,2);
fl:=xlSetCellStringValue(srPrices.NameMC,j,3,j,3);
fl:=xlSetCellStringValue(srPrices.kolvo,j,4,j,4);
fl:=xlSetCellStringValue(srPrices.Price,j,5,j,5);
fl:=xlSetCellStringValue(srPrices.Summa,j,6,j,6);
Message(srPrices.NameMC,0);
j:=j+1;
// r:=srPrices.getNext;
}

file_name:=CreateTMPFileName+'.txt';
MyMakro.openfile(file_name,StCreate);
MyMakro.writeln('Sub Makros1()');
MyMakro.writeln('ActiveSheet.PageSetup.Orientation = xlPortrait');
MyMakro.writeln('ActiveSheet.PageSetup.Zoom = False');
MyMakro.writeln('ActiveSheet.PageSetup.FitToPagesWide = 1');
Mymakro.writeln('ActiveSheet.PageSetup.FitToPagesTall = 100');
MyMakro.writeln('ActiveSheet.PageSetup.TopMargin = Application.InchesToPoints(0.3)');
MyMakro.writeln('ActiveSheet.PageSetup.BottomMargin = Application.InchesToPoints(0.3)');
MyMakro.writeln('ActiveSheet.PageSetup.LeftMargin = Application.InchesToPoints(0.3)');
MyMakro.writeln('ActiveSheet.PageSetup.RightMargin = Application.InchesToPoints(0.3)');
// MyMakro.writeln('Range("A3:AA'+String(nn-1)+'").Select');
// MyMakro.writeln('Selection.HorizontalAlignment = xlCenter');
// MyMakro.writeln('Range("S3:S'+String(nn-1)+'").Select');
// MyMakro.writeln('Selection.NumberFormat = "0.000"');
// MyMakro.writeln('Range("A1:S1").Select');
MyMakro.writeln('End Sub');
MyMakro.Close;
fl:=xlImportModule(file_name);
fl:=xlRunMacro('Makros1()');
DeleteFile(file_name);
fl:=xlKillExcel;
// SrPrice.ShowFile('');
}
}
cmgEsc:
{ CloseInterface(CmOK);
}
end; // HandleEvent


end;// panel

end. // interface

в 712 update работал внутри loop, в 8.10 update loop срывает (только первую запись берет в таблице и все).
По инструкции update так нельзя использовать вроде, но надо както помечать записи в таблице. В чем может быть причина отказа в 8.10 и что можете посоветовать?
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

только на внешней выгрузке, т.е.
external _loop Realiz
SNET
Посетитель
Сообщения: 32
Зарегистрирован: 06 июл 2009, 19:01

Сообщение SNET »

Есть же тэг [соdе], можно уж было бы такую простыню кода оформить в него
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

можно уж вообще ВЕСЬ код не приводить, а только проблемыне участки. у меня сразу желание читать проподает. :sad:
savov
Местный житель
Сообщения: 589
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Воронеж ОАО Верофарм. Воронеж

Сообщение savov »

Прошу прощения, учту замечания, так получилось
Alpiton
Посетитель
Сообщения: 40
Зарегистрирован: 18 апр 2006, 09:19

Сообщение Alpiton »

для update стоит сделать ещё один синоним Realiz
Blind_Orog
Посетитель
Сообщения: 31
Зарегистрирован: 17 июл 2008, 12:14
Откуда: Дальний Восток

Сообщение Blind_Orog »

savov
попробуй вместо

Код: Выделить всё

_loop Realiz
  {
    ...
  }
использовать

Код: Выделить всё

if (GetFirst Realiz = tsOk) do
  {
    ...
  }while (GetNext Realiz = tsOk);
Goblin
Местный житель
Сообщения: 474
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь-матушка
Контактная информация:

Re: update при цикле loop

Сообщение Goblin »

savov писал(а):в 712 update работал внутри loop, в 8.10 update loop срывает (только первую запись берет в таблице и все).
По инструкции update так нельзя использовать вроде, но надо както помечать записи в таблице. В чем может быть причина отказа в 8.10 и что можете посоветовать?
Следовать совету Alpiton и делать update на синониме,
либо перед update делать pushpos(tnRealiz), а после него poppos(tnRealiz)
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Ответить