#include %occInclude HistPRStockChangeBld ;Historiek [ 03/08/2002 2:51 PM ] Set D="\",U=";" Do BLDCONTR^Stat.Product.StockWaarde ;Do ##class(Stat.PR.ProductKenmerken).%DeleteExtent() ;Do ##class(Stat.PR.StockAanpassing).%DeleteExtent() ;Do ##class(Stat.PR.StockABCKwotering).%DeleteExtent() Set Begin=$$CALCDATE^vhLib.DataTypes($H,"W",-52,"FD") Set End=$$CALCDATE^vhLib.DataTypes($H,"W",-1,"LD") Set PRNr=0 Set Maand=$$CALCDATE^vhLib.DataTypes($H,"M","FD") set time=$P($H,",",2) Write "ClnStockABCKwot",! ;Do ClnStockABCKwot(Maand) Write "ClnStockAanpassing",! ;Do ClnStockAanpassing(Begin,End) Write "BldKenmerk,StockAanpassing en ABCKwotering",! For Set PRNr=$O(^KPR(PRNr)) Quit:PRNr="" Do ;Quit:PRNr>2000 . Do FETCHPR^UTILI(PRNr,"PRec") . ;Set Chk=$$BldProductKenmerk(PRNr,.PRec) . ;Quit:'Chk . ;Do BldStockAanpassing(PRNr,.PRec,"W",Begin,End) . Do BldStockABCKwot(PRNr,.PRec,Maand) Write !,"doorloop (sec)",$P($H,",",2)-time,! Quit InputAll For Dat="08/02","09/02" Do ;,"04/02","05/02","08/02","09/02","10/02" Do . w Dat,! . Set Maand=$$INTDATE^vhLib.DataTypes("01/"_Dat) . Do Input(Maand,"Stock"_$TR(Dat,"/","")) Quit Input(Maand,filenm) New D Set D="\" If '$L($G(Maand)) Do .Read "Maand : ",Maand .Set Maand=$$CALCDATE^vhLib.DataTypes($$INTDATE^vhLib.DataTypes(Maand,"DK"),"M","FD") .Write !,$$EXTDATE^vhLib.DataTypes(Maand,"DM"),! If '$L($G(filenm)) Read "FileNm : ",filenm Do ClnStockABCKwot(Maand) Set file=##class(%File).%New("c:\"_filenm_".txt") Do file.Open("R") Do file.Rewind() Set D=$C(9) For Set Lengte=1000,Rec=file.Read(.Lengte) Quit:Rec="" Do .Quit:$P(Rec,D,1)'?4.7N .New PRObj,ABC,GemWvk,GemSt,Ok .Set PRObj=##class(SQLStat.PRStockABCKwotering).%New() .Set PRObj.Product=$P(Rec,D,1) .Set PRObj.Datum=Maand .Set PRObj.CiffPPL=+$TR($P(Rec,D,9),",",".") .Set PRObj.ABCWaarde=$P(Rec,D,11) .Set PRObj.Kwotering=$P(Rec,D,12) .Set PRObj.GemGewogenWVK=$P(Rec,D,14)*PRObj.CiffPPL .Set PRObj.GemWVK=+$P(Rec,D,13)*PRObj.CiffPPL .Set PRObj.Rotatie=+$P(Rec,D,15) .Set PRObj.GemFysStock=+$P(Rec,D,16)*PRObj.CiffPPL .Set PRObj.FysStock=+$P(Rec,D,10)*PRObj.CiffPPL .Set PRObj.StockType=$P(Rec,D,6) .Set Ok=PRObj.%Save() .If 'Ok W $$ParseStatus^vhLib(Ok)," " Quit .Do PRObj.%Close() Do file.%Close() Quit ClnStockABCKwot(Maand) New tmpStatus,RS Set RS=##class(%ResultSet).%New("%DynamicQuery:SQL") //PREPARE for DELETE Set tmpStatus=RS.Prepare("DELETE FROM SQLStat.StockABCKwotering WHERE (Datum= CAST(? AS DATE))") //PREPARE ERROR? If $$$ISERR(tmpStatus) Do Quit tmpStatus . Do RS.%Close() //EXECUTE Delete Set tmpStatus=RS.Execute($ZDATE(Maand,3)) //SQLCode=100 betekent de tabel is leeg, dit is geen error Set:(tmpStatus["SQLCODE = 100") tmpStatus=$$$OK Do RS.%Close() Quit BldStockABCKwot(PRNr,PRec,Maand) If $$ISORGAL^ORGALUX(PRNr),$D(^PRLINK("D",PRNr)) Quit ; Indien orgalux en het is een moederproduct dan product niet opnemen in de stock New PRObj,ABC,GemWvk,GemSt,Ok Quit:$P(PRec(1),D,25)=1 0 ; Geen Non akt Set PRObj=##class(SQLStat.PRStockABCKwotering).%New() ;Set PRObj=##class(Stat.PR.StockABCKwotering).%New() Set PRObj.Product=PRNr Set PRObj.Datum=Maand Set PRObj.CiffPPL=$J($P(PRec("J"),D,23),0,4) Set ABC=$P($P(PRec(0),D,8),"#",2) Set:ABC="" ABC="C" Set PRObj.ABCWaarde=ABC Set PRObj.Kwotering=$$ABCKWOT^PRODUKT2(PRNr,1) Set GemWvk=$P(PRec(1),D,21) Set PRObj.GemGewogenWVK=$P(GemWvk,"#")+$P(GemWvk,"#",2) Set GemWvk=$P(PRec(1),D,23) Set PRObj.GemWVK=$P(GemWvk,"#")+$P(GemWvk,"#",2) Set GemSt=$P(PRec(1),D,24) Set PRObj.Rotatie=$P(GemSt,"#") Set PRObj.GemFysStock=$P(GemSt,"#",2) Set PRObj.FysStock=$P(PRec(0),D,14) Set PRObj.StockType=$S($P(PRec(1),D,20):"S",$D(ContrInd(PRNr)):"C",1:"N") Set Ok=PRObj.%Save() If 'Ok W " Fout ABCKWot" Quit 0 Do PRObj.%Close() Quit ClnStockAanpassing(Begin,End) ;Begin,End : $H-formaat New tmpStatus,RS Set RS=##class(%ResultSet).%New("%DynamicQuery:SQL") //PREPARE for DELETE Set tmpStatus=RS.Prepare("DELETE FROM Stat_PR.StockAanpassing WHERE (Datum>= CAST(? AS DATE)) and (Datum<= CAST(? AS DATE))") //PREPARE ERROR If $$$ISERR(tmpStatus) Do Quit tmpStatus . Do RS.%Close() //EXECUTE Delete Set tmpStatus=RS.Execute($ZDATE(Begin,3),$ZDATE(End,3)) //SQLCode=100 betekent de tabel is leeg, dit is geen error Set:(tmpStatus["SQLCODE = 100") tmpStatus=$$$OK Do RS.%Close() Quit BldStockAanpassing(PRNr,PRec,Groep,Begin, End) ;Begin,End : $H-formaat ;Soort : 1 = Aankoop,2=Verkoop,3=Man. UIT,4=Man. IN New Key,I,Cumul,Qty,Cnt,Hulp Set Qty=0 Kill Hulp Set CiffPPL=$P(PRec("J"),D,23) Set Key="H" For Set Key=$O(^KPR(PRNr,Key)) Quit:$E(Key)'="H" Do . Set HRec=^(Key) . For Set Node=$P(HRec,D),HRec=$P(HRec,D,2,999) Do:Node'="" Quit:HRec="" .. Set Code=$E("AVMM",$E(Node,7)) .. Set Dat=$E(Node,1,6) .. Set Dat=$$INTDATE^vhLib.DataTypes($E(Dat,5,6)_"."_$E(Dat,3,4)_"."_$E(Dat,1,2),"DK") .. Quit:DatEnd .. ;Write Node," ",Dat," ",Begin," ",Einde,! .. Set GrpDat=$$CALCDATE^vhLib.DataTypes(Dat,Groep,"FD") .. Set Qty=$S($E(Node,7)=3!($E(Node,7)=1):1,1:-1)*$E($P(Node,"#"),8,99) .. Set CRec=$G(Hulp(GrpDat,Code)) .. Set $LI(CRec,1)=$LG(CRec,1)+1 .. Set $LI(CRec,2)=$LG(CRec,2)+Qty .. Set $LI(CRec,3)=$LG(CRec,3)+(Qty*CiffPPL) .. Set Hulp(GrpDat,Code)=CRec ;Opslaan Set (Dat,Code)="" For Set Dat=$O(Hulp(Dat)) Quit:Dat="" Do . For Set Code=$O(Hulp(Dat,Code)) Quit:Code="" Do .. Set CRec=Hulp(Dat,Code) .. Set PRObj=##class(Stat.PR.StockAanpassing).%New() .. Set PRObj.Product=PRNr .. Set PRObj.Datum=Dat .. Set PRObj.Type=Code .. Set PRObj.AantalLijnen=$LI(CRec,1) .. Set PRObj.AantalStuks=$LI(CRec,2) .. Set PRObj.Waarde=$LI(CRec,3) .. Set Ok=PRObj.%Save() .. If 'Ok W " Fout StockChange" .. Do PRObj.%Close() Quit BldProductKenmerk(PRNr,PRec) New PRObj Quit:$P(PRec(1),D,25)=1 0 ; Geen Non akt If ##class(Stat.PR.ProductKenmerken).%ExistsId(PRNr) Do . Set PRObj=##class(Stat.PR.ProductKenmerken).%Open($lb(PRNr,"Stat.PR.ProductKenmerken")) Else Do . Set PRObj=##class(Stat.PR.ProductKenmerken).%New() . Set PRObj.Product=PRNr Set PRObj.KortTekst=$P(PRec(0),D,1) Set PRObj.HoofdGroep=$P(PRec("I"),D,1) Set PRObj.Groep=$P(PRec("I"),D,2) Set PRObj.SubGroep=$P(PRec("I"),D,3) Set PRObj.Leverancier=$P(PRec("J"),D,1) Set PRObj.Divisie=$S($P(PRec("J"),D,1)=6332:"H",1:"B") Set PRObj.StockType=$S($P(PRec(1),D,20):"S",$D(ContrInd(PRNr)):"C",1:"N") Set PRObj.ABCWaarde = $P($P(PRec(0),D,8),"#",2) Set:PRObj.ABCWaarde="" PRObj.ABCWaarde="C" Set PRObj.ABCBeweging = $P($P(PRec(0),D,8),"#",1) Set:PRObj.ABCBeweging="" PRObj.ABCBeweging="C" Set Ok=PRObj.%Save() If 'Ok W " Fout Productkenmerk" Quit 0 Do PRObj.%Close() ;Quit:$D(^PRLINK("IKM",PRNr)) 0 ; If Select("KIND")'["M" Quit:$D(^PRLINK("D",PRNr)) 0 Quit 1