WerkOverzicht Set Select("GENTYP")="TBX;DIV" Set %J=$$%J^vhRtn1() Set Select("GLOBREF")=$NAME(^HULP(%J)) Set Select("PERIODE")="H" Set Select("STOCKPROBLEEM")=1 Set Select("ORDER")="G" Set Select("TIJDVERLET")="G" Set Select("LIJSTSTART")=$$RoundDueOut($H,Select("PERIODE")) Set Select("LIJSTPOS")=10 Do Fetch(.Select) Do Groep(.Select) Quit ; Select doorgeven via .Local ; Select("WERKKOST")=W:Werkplaats of K:KostPlaats ; Select("GENTYP") = multiple met ";" gescheiden TBX;DIV;KAD;PRF;BAN;GLA ; Select("GENSUBTYP") = multiple met ";" gescheiden, het type wordt via "\" van het subtype gescheiden (indien leeg of onbestaande dan alles toelaten) ; Select("PERIODE")=W:Week; D:Dag; H:Halfdag ; Select("STOCKPROBLEM") = 1:fysisch stock probleem apart groeperen ; Select("TIJDVERLET") = Z:Zonder; K:met Klein; G:met Klein en Groot ; Select("NOPRBS") = 1:opnemen van producten zonder bouwsteen definitie ; Select("GLOBREF") = Global referentie ; Select("ORDER") = WG:Werkplaats+GenTyp; W:Werkplaats; G:GenTyp; GW:GenTyp+WerkPlaats ; Select("LIJSTSTART")= Start periode ($H) ; Select("LIJSTPOS")= 5 ; Groeperen in tabel vorm Groep(Select) Set DueOut="" Do BuildPosList(.PosList,Select("PERIODE"),Select("LIJSTSTART"),Select("LIJSTPOS"),''Select("STOCKPROBLEEM")) Set TijdVerlet=Select("TIJDVERLET") Set OrderType=Select("ORDER") Set GlobRef=Select("GLOBREF") For Set DueOut=$O(@GlobRef@("C",DueOut)) Quit:DueOut="" Do . Set DueOut=$$RoundDueOut(DueOut,Select("PERIODE")) . Set Pos=$$PosDueOut(DueOut,.PosList) . For Set FabKey=$O(@GlobRef@("C",DueOut,FabKey)) Quit:FabKey="" Do . . Set Qty=$LG(@GlobRef@("C",DueOut,FabKey),2) . . Set GenTyp=$LG(@GlobRef@("C",DueOut,FabKey),3) . . For Set WerkPlaats=$O(@GlobRef@("C",DueOut,FabKey,WerkPlaats)) Quit:WerkPlaats="" Do . . . Set Tijden=@GlobRef@("C",DueOut,FabKey,WerkPlaats) . . . Set GroepKey=$$GroepLijn(GenTyp,WerkPlaats,OrderType) . . . Set List=$G(@GlobRef@("L",GroepKey)) . . . Set:List="" List=$$FillDummyList(GenTyp,WerkPlaats,OrderType) . . . Set $LI(List,Pos*5+1)=$LG(List,Pos*5+1)+Qty . . . Set $LI(List,Pos*5+2)=$LG(List,Pos*5+2)+(Qty*$LG(Tijden,$S(TijdVerlet="Z":3,TijdVerlet="K":2,1:1))) . . . Set @GlobRef@("L",GroepKey)=List Do ArrayToTextW^vhLib($NA(@GlobRef@("L"))) Quit FillDummyList(GenTyp,WerkPlaats,OrderType) If OrderType="G" Quit $LB(GenTyp) If OrderType="W" Quit $LB(WerkPlaats) If OrderType="WG" Quit $LB(WerkPlaats,GenTyp) If OrderType="GW" Quit $LB(GenTyp,WerkPlaats) GroepLijn(GenTyp,WerkPlaats,OrderType) If OrderType="G" Quit GenTyp If OrderType="W" Quit WerkPlaats If OrderType="WG" Quit WerkPlaats_";"_GenTyp If OrderType="GW" Quit GenTyp_";"_WerkPlaats RoundDueOut(DueOut,PeriodeType) If DueOut?1.A Quit DueOut ; geen ascii If PeriodeType="H" Quit $P(DueOut,",",1)_","_$S($P(DueOut,",",2)>43200:86430,1:4320) ; 's middags of 's avonds If PeriodeType="D" Quit $P(DueOut,",")_",86340" ; om 23:59 ; Week Quit $$CALCDATE^vhLib.DataTypes(DueOut,"W","LD")_",86340" ; laatste dag van de week om 23:59 ; Opbouw van een positie lijst die dan later gebruikt worde door PosDueOut en om de titel te maken BuildPosList(Lijst,PeriodeType,Start,MaxPos,MetNoStock) Kill Lijst If PeriodeType="H" Set MaxPos=MaxPos/2\1*2 ; veelvoud van 2 Set Datum=$P($$RoundDueOut(Start,PeriodeType),",") For Pos=1:$S(PeriodeType="H":2,1:1):MaxPos Do . If PeriodeType="H" Do . . Set Lijst(Datum_",43200")=Pos+1+MetNoStock . . Set Lijst(Datum_",86340")=Pos+2+MetNoStock . Else Do . . Set Lijst(Datum_",86340")=Pos+1+MetNoStock . If PeriodeType="W" Do . . Set Datum=$$CALCDATE^vhLib.DataTypes(Datum,"W",1,"LD") ; volgende week . Else Do . . Set Datum=$$CALCDATE^vhLib.DataTypes(Datum,"A",1) ; volgende arbeidsdag Quit PosDueOut(DueOut,Lijst) ; Bepaalt de positie in de lijst, omzetting van $H naar positie If DueOut="STOCK" Quit Pos=1 Set First=$O(Lijst("")) If (+$P(DueOut,",")<+$P(First,","))||(+$P(DueOut,",")=$P(First,",")&&($P(DueOut,",",2)'>$P(First,",",2))) Quit Lijst(First)-1 Set Last=$O(Lijst(""),-1) If (+$P(DueOut,",")>+$P(Last,","))||(+$P(DueOut,",")=$P(Last,",")&&($P(DueOut,",",2)>$P(Last,",",2))) Quit Lijst(Last)+1 Quit Lijst(DueOut) OrderDueOut(Dir,Select) ; Dir= -1 of +1 If Select("PERIODE")="W" Do . Set Select("LIJSTSTART")=$$CALCDATE^vhLib.DataTypes($G(Select("LIJSTSTART"),RoundDueOut($H,"W")),"W",Dir,"LD") Else Do . Set Select("LIJSTSTART")=$G(Select("LIJSTSTART"),RoundDueOut($H,"D")) + Dir Quit ; Sommeren van het aantal producten en de benodigde werktijd Fetch(Select) New Batch,Rec,PRNr,VolgNr,Som,Txt Set (Batch,VolgNr)="" Set LEVNr=6332 Set TOENr="" For Set TOENr=$O(^KTO(LEVNr,TOENr)) Quit:TOENr="" Do . Set RecH=^KTO(LEVNr,TOENr,1) . Set KLNr=$P(RecH,D,8) . Set DueOut="" . Set TLNr="" . For Set TLNr=$O(^KTO(LEVNr,TOENr,TLNr)) Quit:TLNr="" Do .. Set RecL=^KTO(LEVNr,TOENr,TLNr) .. Set PRNr=$P(RecL,D,2) .. Quit:PRNr'?4.7N .. Set Qty=$P(RecL,D,3) .. Set FabKey=$$FABKEYT^HADOPV(TOENr,$P(RecL,D,15)) .. Do FetchOne(PRNr,FabKey,Qty,KLNr) Quit FetchOne(PRNr,FabKey,Qty,KLNr) Set GenTyp=$P($$GENTYP^HAD(PRNr),D,1,2) Set:DueOut="" DueOut=$$RoundDueOut($$DUEOUTFabKey^HAD(FabKey),"H") Quit:$G(Select("GENTYP"))'[$P(GenTyp,D) ; ook de lege GENTYP telt niet mee If $G(Select("STOCKPROBLEM")) Do . Quit:$P($G(^HADPR("F",FabKey,"K")),D,3)="A" ; alles klaargezet . Quit:$D(^HADPR("F",FabKey,"F")) ; fysisch stockprobleem . Set DueOut="STOCK" Kill Som Do SomTijd(PRNr,.Som) Quit:'$D(Som) Set Som=$LB(PRNr,Qty,GenTyp,KLNr) Merge @Select("GLOBREF")@("C",DueOut,FabKey)=Som Quit SomTijd(PRNr,Som) New KostPlaatsObj Set BSCode="" ; Som via .Local For Set BSCode=$O(^PRBS("BS",PRNr,BSCode)) Quit:BSCode="" Do . Set BSRec=^PRBS("BS",PRNr,BSCode) . Quit:$P(BSRec,D,3)'="T" ; alleen Tijd berekening . Set KostPlaats=$P(BSRec,D,9) ; kostplaats code . If KostPlaats="" Do Quit . . Set Error($P(BSKey,".",2))=$P(BSRec,D,13)_": Kostplaats niet ingevuld" . . Set KostPlaatsObj=##class(Prod.GAMeta.BT.KostPlaats).%OpenId(KostPlaats) . If '$IsObject(KostPlaatsObj) Do Quit . . Set Error(BSKey)=$P(BSRec,D,13)_": "_KostPlaats_" kostplaats onbekend" . Set KV=KostPlaatsObj.GetToeslagKleinVerlet("N") . Set GV=KostPlaatsObj.GetToeslagGrootVerlet("N") . . Set TijdP=$P(BSRec,D,7) ; Tijdplanning . . Set WerkPlaats=$S($G(Select("WERKKOST"))="W":$$TranslateKost2Werk(KostPlaats),1:KostPlaats) . Set SomRec=$G(Som(WerkPlaats)) . Set $LI(SomRec,1)=$LG(SomRec,1)+$J(TijdP*KV*GV,0,4) . Set $LI(SomRec,2)=$LG(SomRec,2)+$J(TijdP*KV,0,4) . Set $LI(SomRec,3)=$LG(SomRec,3)+$J(TijdP,0,4) . Set Som(WerkPlaats)=SomRec Quit TranslateKost2Werk(KostPlaats) Quit KostPlaats