#include vhLib.Macro #include Prod.Product STATWEEK ;Weekstatistiek van klanten in bepaalde produktgroepering [ 12/10/2003 2:29 PM ] Set %J=$$%J^vhRtn1() Set (KLNr,Grp)="" Do SELECT Do:Grp'="" .For Do Quit:Input="-"!(Input="CANC") ..If DispMode="O" Do ...Set Input=$$SCROLL^vhLIST(.LD,,1) ...Set LevWk=$S(LD("SELECT"):$P($G(^HULP(%J,"L",LD("SELECT"))),D,1),1:"") ..If DispMode="D" Do ...Set Input=$$SCROLL^vhLIST(.DLD) ..If Input="COM" Set Input="" Do CALL^vhMenu("STATWEEK") ..Do EXEC^vhMenu("STATWEEK",.Input) Write @FS80 Quit INIT New I,TC,LijstDef Set KLNr="" Set SubWk="" Set DispMode="O" Kill ^HULP(%J) Set TransCumul="O;O/B;B/F;F/P;P/T;O" ; Volgorde en cumul bv Orders bij Bons Set DispO= "1;2;4;5;7;9;10;12;14;15;19;23;25;26" ; Pieces te tonen van de HULP global, overzicht Set DispK= "1;3;5;8;10;13;15;19;24;26" ; Pieces te tonen van de HULP global, klant #dim LijstDef As %String = "Overzicht" #dim LijstDtlDef As %String = "Detail" Kill NodeCumul Set NodeSeq="" For I=1:1:$L(TransCumul,"/") Do .Set TC=$P(TransCumul,"/",I) .Set NodeCumul($P(TC,";"))=$P(TC,";",2) ; Cumul van node naar node .Set:NodeSeq=""!(NodeSeq'[$P(TC,";",2)) NodeSeq=NodeSeq_$P(TC,";",2) ; Node sequentie Do INIT^vhLIST("STATWEEK",LijstDef,.LD) Quit SELECT New MemGrp Set MemGrp=Grp Do FIELD^vhScherm("STATWEEK","PRODGRP") If Grp="" Set Grp=MemGrp Quit:Grp="" Do INIT,FETCH(),REFRESH Quit REFRESH Write @F11,@F1 Write:DispMode="O" @FS80 Write:DispMode="D" @FS132 Do DISPLAY^vhScherm("STATWEEK") If DispMode="O" Do .Do WRITE^vhLIST(.LD) If DispMode="D" Do .Do WRITE^vhLIST(.DLD) Quit FETCH(KLNr) New LevWk,VolgNr,OvzDtl,I,J,RecH,Rec Set KLNr=$G(KLNr) Set LevWk="",Cnt=0 Set OvzDtl=$S(KLNr:"D",1:"O") Set:$G(Nodes)="" Nodes="OBFP" Set LevWk=$O(^STATWEEK(Grp,OvzDtl,LevWk)) Set LevWk=$$CALCDATE^vhLib.DataTypes(LevWk,"W",-1,"MD") For Set LevWk=$$CALCDATE^vhLib.DataTypes(LevWk,"W",+1,"MD") Do Quit:$O(^STATWEEK(Grp,OvzDtl,LevWk))="" .Set Cnt=Cnt+1 .Set Rec="" .Set $P(Rec,D,1)=LevWk .Set:LevWk<$H DefSelect=Cnt .Set Node="" .For Set Node=$O(^STATWEEK(Grp,OvzDtl,LevWk,Node)) Quit:Node="" Do ..Set:'KLNr RecH=$G(^STATWEEK(Grp,OvzDtl,LevWk,Node)) ..Set:KLNr RecH=$G(^STATWEEK(Grp,OvzDtl,LevWk,Node,KLNr)) ..Quit:RecH="" ..Set I=$F(NodeSeq,NodeCumul(Node))-1 ; Volgorde van de nodes na cumulvertaling ..For J=1:1:5 Do ...Set $P(Rec,D,I*5-4+J)=$P(Rec,D,I*5-4+J)+$P(RecH,D,J) ...Set $P(Rec,D,22+J)=$P(Rec,D,22+J)+$P(RecH,D,J) ; cumul .Set ^HULP(%J,"L",Cnt)=Rec .; Rec = 1:Week\ .; 2:#Order1\ 3:#Lijn1\ 4:Qty1\ 5:Omzet1\ 6:Marge1\ .; 7:#Order2\ 8:#Lijn2\ 9:Qty2\10:Omzet2\11:Marge2\ .; 12:#Order3\13:#Lijn3\14:Qty3\15:Omzet3\16:Marge3\ .; 17:#Order4\18:#Lijn4\19:Qty4\20:Omzet4\21:Marge4\\ .; 23:#Order5\24:#Lijn5\25:Qty5\26:Omzet5\27:Marge5 Set:$G(DefSelect) LD("SELECT")=DefSelect Quit STOREREC(Node,RecH,Rec) Quit:RecH="" Set I=$F(Nodes,Node)-1 For J=1:1:4 Set $P(Rec,D,I*4-3+J)=$P(Rec,D,I*4-3+J)+$P(RecH,D,J) Quit SHOWOVZ Set DispMode="O",KLNr="" Do FETCH(KLNr) Do REFRESH Quit SHOWKL If DispMode="D",DLD("SELECT") Do .Set KLNr=$P($G(^HULP(%J,"D",DLD("SELECT"))),D,1) Else Do .Do FIELD^vhScherm("STATWEEK","KLANT") Set DispMode="O" Do FETCH(KLNr) Do REFRESH Quit SHOWDTL(LevWk) New Rec,I,J,Soort,Node,RecH,SortNr,VolgNr Kill DLD Do INIT^vhLIST("STATWEEK",$S($L($G(LijstDtlDef)):LijstDtlDef,1:"Detail"),.DLD) Set DispMode="D" Kill ^HULP(%J,"D"),^HULP(%J,"T1"),^HULP(%J,"T2") Set SortNr="" Set Node="" For Set Node=$O(^STATWEEK(Grp,"D",LevWk,Node)) Quit:Node="" Do .Set I=$F(NodeSeq,NodeCumul(Node))-1 ; Volgorde van de nodes na cumulvertaling .Set KLNr=0 .For Set KLNr=$O(^STATWEEK(Grp,"D",LevWk,Node,KLNr)) Quit:KLNr="" Do ..Set Rec=$G(^HULP(%J,"T1",KLNr),KLNr) ..Set RecH=^STATWEEK(Grp,"D",LevWk,Node,KLNr) ..For J=1:1:4 Do ...Set $P(Rec,D,I*5-4+J)=$P(Rec,D,I*5-4+J)+$P(RecH,D,J) ...Set $P(Rec,D,22+J)=$P(Rec,D,22+J)+$P(RecH,D,J) ..Set ^HULP(%J,"T1",KLNr)=Rec ; Sorteren volgens omzet Set KLNr="" For Set KLNr=$O(^HULP(%J,"T1",KLNr)) Quit:KLNr="" Do .Set Rec=^HULP(%J,"T1",KLNr) .Set ^HULP(%J,"T2",-$P(Rec,D,26),KLNr)=Rec ; Flat list Set SortNr="" Set (Key,KLNr)="" For Set Key=$O(^HULP(%J,"T2",Key)) Quit:Key="" Do .For Set KLNr=$O(^HULP(%J,"T2",Key,KLNr)) Quit:KLNr="" Do ..Set SortNr=SortNr+1 ..Set ^HULP(%J,"D",SortNr)=^HULP(%J,"T2",Key,KLNr) Kill ^HULP(%J,"T1"),^HULP(%J,"T2") Do REFRESH Quit RPLKL If DispMode="D" New KLNr Do .Quit:'DLD("SELECT") .Set KLNr=$P($G(^HULP(%J,"D",DLD("SELECT"))),D,1) Quit:'$G(KLNr) New Actie Set Actie=$$RAADPL^KLANT(KLNr,"O") Do REFRESH Quit RPLPR New PRNr,Actie Quit:DispMode'="D" Quit:'DLD("SELECT") Set PRNr=$P($G(^HULP(%J,"D",DLD("SELECT"))),D,2) Set Actie=$$RAADPL^PRODUKT(PRNr,"O") Do REFRESH Quit ;-------------------------------------- NIGHT ; Week verkoopstatistiek HALUX Do BUILD("OBFP",,0) Quit COPYHIST ; Copieren van de ganse data voor debugging New Grp,HistMax,Hist,Key Set Grp="" For Set Grp=$O(^STATWEEK(Grp)) Quit:Grp="" Do . Set HistMax=$O(^STATWEEK(Grp,"H",""),-1) . Set Hist="" . For Set Hist=$O(^STATWEEK(Grp,"H",Hist)) Quit:Hist="" Do .. Kill:Hist<(HistMax-10) ^STATWEEK(Grp,"H",Hist) . Set HistMax=HistMax+1 . Set ^STATWEEK(Grp,"H",HistMax)=$H . For Key="D","O","P" Do .. Merge ^STATWEEK(Grp,"H",HistMax,Key)=^STATWEEK(Grp,Key) Quit JOB Job NIGHT^STATWEEK Do WARN^vhTXTPOP("Achtergrond opdracht gestart~Duurtijd ongeveer 60 min.") Quit ISJOB() Lock +^STATWEEK:0 Else Do Quit 1 .Do WARN^vhTXTPOP("Ophalen van de gegevens is NOG STEEDS bezig","Achtergrond opdracht") Lock -^STATWEEK Quit 0 REBUILD(ItemList) Do BUILD(ItemList,,1) Quit BUILD(ItemList,VanWeek,Display) Try { Do HerberekenSTATWEEK($G(ItemList),$G(VanWeek),$G(Display)) } Catch { Kill ^STATWEEK Lock -^STATWEEK #dim Exceptie As TECH.Exceptions.Exception = ##class(TECH.ExceptionHandler).Catch() Do ##class(vhLib.Logger).LogEnMailExceptie(Exceptie) #dim NieuweExceptie As TECH.Exceptions.Exception = ##class(TECH.Exceptions.GeneralErrorException).%New("Fouten bij berekenen van NIGHT^STATWEEK") Do NieuweExceptie.VoegToeInnerExceptie(Exceptie) Do ##class(TECH.ExceptionHandler).Throw(NieuweExceptie) } Quit HerberekenSTATWEEK(ItemList,VanWeek,Display) ; PRIVATE ; Optioneel : Vanweek : oude gegevens blijven bestaan ; Optioneel : Display : met tussentijdse gegeven display Lock +^STATWEEK:1 Else Do:$G(Display) Quit .Set FP=2301 Write @F,@F1,!,"Databank gelockt, geen nieuwe gegevens opgehaald" Hang 5 Do STORE^LOG("STATWEEK","","O",$G(ItemList)_";"_$G(VanWeek)) Set %J=$$%J^vhRtn1() Kill ^HULP(%J) Set FP=2301 Write:$G(Display) @F,@F1,!,"Verwerken orders en bons" If ItemList["O" Do CLEAN("OT"),FETCHO("O",$NA(^ORD("IP"))) If ItemList["B" Do CLEAN("B"),FETCHU Kill ^HULP(%J) ; Onthouden van de ordernrs is verschillend met deze van de fakturen (roundrobin van het ordernr) Write:$G(Display) @F,@F1,!,"Verwerken fakturen" If ItemList["F" Do CLEAN("F",$G(VanWeek)),FETCHF() Write:$G(Display) @F,@F1,!,"Verwerken proforma" If ItemList["P" Do CLEAN("P",$G(VanWeek)),FETCHP() Write:$G(Display) @F,@F1 Kill ^HULP(%J) Do STORE^LOG("STATWEEK","","C",$G(ItemList)_";"_$G(VanWeek)) Lock -^STATWEEK Quit CLEAN(NodeList,VanWeek) New Grp,Datum,I Set Grp="" For Set Grp=$O(^STATWEEK(Grp)) Quit:Grp="" Do . Set Datum="" . For Set Datum=$O(^STATWEEK(Grp,"O",Datum)) Quit:Datum="" Do .. If $G(VanWeek) Quit:VanWeek>Datum ; Oude laten staan .. For I=1:1:$L(NodeList) Do ... Kill ^STATWEEK(Grp,"O",Datum,$E(NodeList,I)) ... Kill ^STATWEEK(Grp,"D",Datum,$E(NodeList,I)) Set Grp="" For Set Grp=$O(^STATWEEK(Grp)) Quit:Grp="" Do . Set Datum="" . For Set Datum=$O(^STATWEEK(Grp,"P",Datum)) Quit:Datum="" Do .. If $G(VanWeek) Quit:VanWeek>Datum ; Oude laten staan .. For I=1:1:$L(NodeList) Do ... Kill ^STATWEEK(Grp,"P",Datum,$E(NodeList,I)) Quit #define Z10A 342751 STORE(Grp,Node,PRNr,KLNr,FAKNr,ULNr,ORDNr,NewOrd,Datum,Qty,Omzet,Marge) New Key Set LevWk=$$CALCDATE^vhLib.DataTypes(Datum,"W","MD") Do:'LevWk ##class(vhLib.Logger).%New("STATWEEK").Warning("STORE","Geen leverdatum ingevuld bij order '" _ $Get(ORDNr) _ "', factuur '" _ $Get(FAKNr) _ "', lijn '" _ $Get(ULNr) _ "'." ) Quit:'LevWk ; bij grote uitzondering is er geen leverdatum ingevuld in het order Set FAKNr=$G(FAKNr) Set ULNr=$G(ULNr) Set ORDNr=$G(ORDNr) Set Marge=$G(Marge) If $D(^KPR(PRNr,0)) Do ; Bestaand product . If Grp["BBX",$E($P(^KPR(PRNr,0),D,1),1,3)'="BBS" Set Qty=0 ; Bij buroBOX wordt alleen de zijwanden geteld . If Grp["SERVODRIVE",($P(^KPR(PRNr,0),D,1)'?1(1"Z10A",1" 21FA",1"SD1")1.E) Set Qty=0 ; Bij ServoDrive alleen de uitwerper tellen . If Grp["SERVODRIVE",($P(^KPR(PRNr,0),D,1)?1(1"SD1")1.E) Do ; Bij voorgemonteerde ServoDrive alleen de uitwerper tellen . . Set Key="",SomHF=0 . . For Set Key=$O(^PRBS("IP",PRNr,$$$Z10A,Key)) Quit:Key="" Do ; Z10.A...Servodrive . . . Set SomHF=SomHF+$P(^PRBS("BS",PRNr,Key),"\",2) . . Set Qty=Qty*SomHF . If Marge="" Do . . Set Key=$O(^KPR(PRNr,"J")) . . Set Marge=Omzet-($P(^KPR(PRNr,Key),D,23)*Qty) ; Marge=Omzet-Aankoop Else Do ; Verwijderd product . If Grp["BBX",$E($P(^KPRO(PRNr,0),D,1),1,3)'="BBS" Set Qty=0 ; Bij buroBOX wordt alleen de zijwanden geteld . If Grp["SERVODRIVE",($P(^KPRO(PRNr,0),D,1)'?1(1"Z10A",1" 21FA",1"SD1")1.E) Set Qty=0 ; Bij ServoDrive alleen de uitwerper tellen . If Marge="" Do . . Set Key=$O(^KPRO(PRNr,"J")) . . Set Marge=Omzet-($P(^KPRO(PRNr,Key),D,23)*Qty) ; Marge=Omzet-Aankoop /// NewOrd dient om na te gaan of het order al in een andere week is meegeteld. /// Zoja wordt NewOrd op nul gezet en wordt er geen aantal aangevuld in CUMUL Set NewOrd=0 If ORDNr?6N Do . Set Found=1,LevWk2="" . For Set LevWk2=$O(^HULP(%J,ORDNr,LevWk2)) Quit:LevWk2="" Quit:$S(LevWk