Production Process Steering - Tandembox Genereert van een Toelevering de verpakkingsdefinitie Prod.Product,BL.Prod.OptiBox,BL.Sys.Toegang,BL.Sys.Proxy 1 %RegisteredObject 0 S;S;S;S 3 (Stuk; Pallet of VertStack) TBX||VertStack Overdoos TBX||Bulk LO Doos TBX||Bulk LO Corpusprofiel TBX||Bulk LO Reling TBX||Bulk LO Afdekkap TBX||Bulk LO Blumotion TBX||Bulk LO Frontblok TBX||Bulk LO Diverse TBX||Bulk FRONT Lade TBX||Bulk FRONT Doos TBX||AntislipMat GEN||Pallet PRCPLI PRBS PRRL PRRLADAP PRFB PRFRP PRBMM PRAKLI PROVL PRSB PRASM XXXX BasisType RLTUS Verpak V1 3 het BasisType van het Halffabrikaat wordt gegroepeerd in C : Corpusprofiel G : groepering van kleine onderdelen, zoals afdekkappen; Reling; Frontblok; Blumotion meenemer I : Inside bv. Antislipmat S : Separaat boxside, stabilisator, opvullijst (niet in te vullen default) \CP;C\BMM;G\RL;G\RLALU;G\RLH;G\AK;G\FRONTB;G\FRONTGRP;G\MAT;I\MATROL;I\ \CP;C\BMM;G\RL;G\RLALU;G\RLH;G\AK;G\FRONTB;G\FRONTGRP;G\MAT;I\MATROL;I\ WS.Prod.PanOpti.q1.OPTIREQ WS.Prod.PanOpti.q1.BOXDEF WS.Prod.PanOpti.q1.BOXDEF samenvatten van onderdelen separaat verpakt %String 1 %String 1 %String 1 %Boolean %Integer %Integer 1 TOENr 1 D ##class(BL.PPS.TBX.OptiBox).TestV1() 1 PRNr 0 1 PRNr,ForceV1 1 Breedte,LC,LD,DC:%String Prijsberekening TBX : V1 lade 1 LC,LD,DC:%String %Float Prijsberekening TBX : V1 lade 1 LC,IB,DC:%String %Float 1 Breedte,LC,LD,DC:%String Prijsberekening TBX : V1 losse onderdelen 1 LC,LD,DC:%String %Float Prijsberekening TBX : V1 losse onderdelen 1 LC,DC:%String %Float 1 Breedte,ZW,LD Prijsberekening TBX : V1 boxkap INTIVO 1 ZW,LD %Float Prijsberekening TBX : V1 boxkap INTIVO 1 ZW,BS %Float s sc=##class(BL.PPS.TBX.OptiBox).%New().SnijV1(499436,1,"V1","TEST",,1,-1,"") s sc=##class(BL.PPS.TBX.OptiBox).%New().SnijV1(499436,1,"LOS","TEST",,1,-1,"") ; dry run s sc=##class(BL.PPS.TBX.OptiBox).%New().SnijV1(499436,1,"LOS","TEST",,1,1,"HALUX") ; cut Usage="LOS" : Alleen losonderdeel Usage="V1" : Alleen verpakkiing Usage="" : V1 en losonderdeel PRNr:%Integer,Qty:%Integer,Usage,BaseRef,CallBack:%List,SnijPrioriteit:%Integer,PPSOutput:%Integer,MachineID:%String BL.Sys.Proxy.pxStatus 0 Do . . Set OptiID="TBX||V1 LosseOnderdelen" . . Set Params("LOQTY")=Qty . . Set Status=##class(BL.Prod.OptiBox.Optimize).OneBox($$$SplitID(OptiID), .Params, Qty, BaseRef, .PRNr, .CallBack, .SnijPrioriteit, .PPSOutput, .MachineID) . If $G(Params("BKQTY"))>0 Do . . Set OptiID="TBX||V1 Boxkap Doos" . . Set OptiID="TBX||V1 Boxkap" . . Set Params("BKQTY")=Qty . . Set Status=##class(BL.Prod.OptiBox.Optimize).OneBox($$$SplitID(OptiID), .Params, Qty, BaseRef, .PRNr, .CallBack, .SnijPrioriteit, .PPSOutput, .MachineID) Else If Usage="V1" Do . Set Params("LOQTY")=-1 . Set Params("BKQTY")=-1 . Set Status=##class(BL.Prod.OptiBox.Optimize).OneBox($$$SplitID(OptiID), .Params, Qty, BaseRef, .PRNr, .CallBack, .SnijPrioriteit, .PPSOutput, .MachineID) Else Do . ;k %Params m %Params=Params zw %Params . Set Status=##class(BL.Prod.OptiBox.Optimize).OneBox($$$SplitID(OptiID), .Params, Qty, BaseRef, .PRNr, .CallBack, .SnijPrioriteit, .PPSOutput, .MachineID) Quit $G(Status) ]]> TOENr 1 oParent,TOENr Definitie van de dozen en de er bij horende volumes. oParent,BasisRef oParent,BasisRef oParent,BasisRef Groeperen van de losse onderdelen Deze routine kan uitgebreid worden met een volume berekening om bv. boxsides toch in de verpakking te plaatsen als de lade voldoende breed is. Verpakking : "Z" V1 zonder onderdelen (antislipmat en front zijn reeds verpakt met de lade) : "V" Verticaal stack zonder onderdelen PRNr,Qty,LijnRef,VpkLO Diverse . ;Do WL^vhDBG("OPVULLIJST") . $$$GetHFRec(..#bsOpvullijst) . Set HFPRNr=$P(HFRec,"\",1) . Set HFQty=$P(HFRec,"\",2) . ;w "LD",":",LD,"=",$S(LD>500:500,1:LD),! . $$$AddLOGroep(..#bsDiverse,$LB(PRNr,LijnRef,HFPRNr,Qty*HFQty,$S(LD>500:500,1:LD),25,50)) ; Lengte,Dikte,Breedte If $$$CheckBS(..#bsStabilisator) Do ; Stabilisator -> Diverse . ;Do WL^vhDBG("STABILISATOR") . $$$GetHFRec(..#bsStabilisator) . Set HFPRNr=$P(HFRec,"\",1) . Set HFQty=$P(HFRec,"\",2) . $$$AddLOGroep(..#bsDiverse,$LB(PRNr,LijnRef,HFPRNr,Qty*HFQty,LD,20,40)) ; Lengte,Dikte,Breedte If $$$CheckBS(..#bsBlumotion) Do ; Blumotion meenemer . $$$GetHFRec(..#bsBlumotion) . Set HFPRNr=$P(HFRec,"\",1) . Set HFQty=$P(HFRec,"\",2) . $$$AddLOGroep(..#bsBlumotion,$LB(PRNr,LijnRef,HFPRNr,Qty*HFQty)) ; Lengte,Dikte,Breedte If $$$CheckBS(..#bsFrontblok) Do ; Frontblok . $$$GetHFRec(..#bsFrontblok) . Set HFPRNr=$P(HFRec,"\",1) . Set HFQty=$P(HFRec,"\",2) . $$$AddLOGroep(..#bsFrontblok,$LB(PRNr,LijnRef,HFPRNr,Qty*HFQty/2,FB)) ; FB = type frontblok If 'NMAK Do ; Afdekkap . $$$AddLOGroep(..#bsAfdekKap,$LB(PRNr,LijnRef,,Qty)) ]]> Groeperen van AntiSlipMat PRNr,Qty,LijnRef,VpkASM Groeperen van fronten van binnenladen PRNr,Qty,LijnRef,VpkFRONT Toevoegen van lade aan vertstacking oParent,PRNr,Qty,BasisRef,LijnRef 1) Set DefList=$$$SpoelBak ;Else If Last="Y"&&($L(LC)>1) Set DefList=$$$Syfon Else If Last="B"&&($L(LC)>1) Set DefList=$$$Buro Else Set DefList=$$$Lade Set DefOne=$P(DefList,$E(LC)_";",2) Set Params("HOOGTE")=+$P(DefOne,";",2) Set:$P(DefOne,";",1)=$$$HogeRug Params("OVERHANGSIZE")=+$P(DefOne,";",3)-$P(DefOne,";",2) Set OptiBox=$$$OptiGroep_"||"_$$$OptiBoxBegin_$P(DefOne,";",1) Set Params("BREEDTE")=IB Set Params("DIEPTE")=LD Set Gewicht=$$$PRGet($$$Gewicht)-2800*LD/650 ; per paar Set ProductRef=$$$PRGet($$$KortTekst) Do WL^vhDBG("VerStack lade "_OptiBox_" "_ProductRef_" "_LC) Set oBox=%blProdOptiBoxOptimize.AddOptiRef(oParent, ,$$$SplitID(OptiBox), .Params, , Qty, BasisRef, LijnRef, , PRNr, , Gewicht) Set oBoxV1=..AddV1Drawer(oBox, PRNr, 1, BasisRef, LijnRef,"B") ;Alternatief voor VertStack, deze wordt alleen genomen als de optimizer oordeelt dat het beter is met V1 Quit oBox ]]> Toevoegen van lade aan pallet oParent,PRNr,Qty,BasisRef,LijnRef,VpkLO 1 LC,DC %String 1) Set DefList=$$$SpoelBak Else If Last="Y"&&($L(LC)>1) Set DefList=$$$Syfon Else If Last="B"&&($L(LC)>1) Set DefList=$$$Buro Else Set DefList=$S(LC["DL":$$$LadeINTIVO,LC["CL":$$$LadeINTIVO,LC["DK":$$$LadeMetK,1:$$$Lade) ;do WLIP^vhDBG(15,Last_"->"_DefList) Set IsAntaroKBinnenlade = (($G(DC) = "A") && (LC = "K/Z")) Set LC=$E(LC) Set DefOne=$P($P(DefList,LC_";",2),"\",1) If IsAntaroKBinnenlade { Set $P(DefOne, ";", 2) = $P(DefOne, ";", 2) + 5 } Quit DefOne ]]> s PRNr=573515 d ##class(BL.PPS.TBX.OptiBox).%New().GetV1Params(PRNr,1,.Params,.Opti,1) 1 "_BoxDef) Set Params("ZIJHOOGTE")=+$P(BoxDef,";",2) ; UITZONDERING : Losse onderdelen doosje is voor M en B gelijk aan dat van de D laden van 500 diep daarom moet de hoogte van de doos aangepast worden If ((RH="M")||((RH="B")&&'BinLade))&&(LD=500) Set Params("ZIJHOOGTE")=95 ;PV 21/12/09 Set Params("RUGHOOGTE")=Params("ZIJHOOGTE") Set:$P(BoxDef,";",1)=$$$HogeRug Params("RUGHOOGTE")=+$P(BoxDef,";",3) Set OptiID=$$$OptiGroep_"||"_$$$OptiBoxBegin_$P(BoxDef,";",1) If (BM["L")||(BM["R") Do ; externe blumotion . Set Params("ZIJHOOGTE")=Params("ZIJHOOGTE")+5 . Set Params("RUGHOOGTE")=Params("RUGHOOGTE")+5 If (BM="T") Do ; TIP-ON . If ((LC="B")||(LC="BS2")) Do ; B zijkant . . ;Set Params("ZIJHOOGTE")=Params("ZIJHOOGTE")+5 ;tijdelijk afgezet voor PV 20/02/2010 . If ((LC="M")||(LC="MS2")) Do ; M zijkant . . Set Params("ZIJHOOGTE")=Params("ZIJHOOGTE")+10 Set Params("BREEDTE")=IB-12+$S(BinLade:4,1:0) ; interne breedte - 12 + extra 4mm voor binlade Set:DS="BA" Params("BREEDTE")=Params("BREEDTE")+6 ; interne breedte - 12 Set Params("LOQTY")=-1 ; Losse onderdelen: niet toevoegen Set Params("LOCP")=0 Set Params("DIEPTE")=LD++$S(BinLade:2,1:0) ; diepte Quit:VPK'="S" ; zonder onderdelen If OpvulLijst Do ; Extra ruimte voor opvullijst : 25x50xLadeDiepte . If (Params("ZIJHOOGTE")<(OpvulLijst*50)) Do . . Set Params("BREEDTE")=Params("BREEDTE")+50 ; volgens hoogte . Else Do . . Set Params("BREEDTE")=Params("BREEDTE")+25 ; volgens opdikking Set Params("BKQTY")=-1 If ((LC["DL")||(LC["CL"))&&'BinLade&&(((BS'="CAP")&&(KV'="ZV"))||((BS="CAP")&&($LG(##class(Prod.Kenmerk.DataDefinitie).Get("TBX",PRNr,"KL"))="MG"))) Do ; Intivo boxcover en metaalgrijze boxcap (niet voor binnenlade) . Set Params("BREEDTE")=Params("BREEDTE")+40 ; volgens opdikking . Set Params("BKDIKTE")=$S(BS="CAP":17,1:15) . Set Params("BKDIEPTE")=Params("DIEPTE") . Set Params("BKHOOGTE")=$S(RH="C":70,1:100) . Set Params("BKQTY")=1 If ((CorpusProfiel)||(Reling&&'BinLade))&&(VpkLO'="B") Do ; Losse onderdelen doosje toevoegen . Set Params("LOQTY")=1 ; Toevoegen . If LC="N" Do ; lage rug . . Set Params("LOBREEDTE")=87 ; binnenmaten . . Set:Params("LOBREEDTE")>$$$LoBreedteMax Params("LOBREEDTE")=$$$LoBreedteMax ; max. voor onderdelen bij bv. voorraadbinnenladen . . Set Params("LOHOOGTE")=Params("ZIJHOOGTE")-($S(DK'<50:1,1:2)*$$$KartonDikte) ; vanaf 50 kg hoogte iets groter . . Set Params("LODIEPTE")=Params("DIEPTE") ;-(2*$$$KartonDikte) . . Set Params("DIEPTE")=Params("DIEPTE")+(2*$$$KartonDikte) . . Set Params("BREEDTE")=Params("BREEDTE")+Params("LOBREEDTE")+(3*$$$KartonDikte) . Else Do . . Set Params("LOBREEDTE")=Params("ZIJHOOGTE")-(3*$$$KartonDikte) ; binnenmaten . . Set:Params("LOBREEDTE")>$$$LoBreedteMax Params("LOBREEDTE")=$$$LoBreedteMax ; max. voor onderdelen bij bv. voorraadbinnenladen . . Set Params("LOHOOGTE")=$CASE(DK,25:60,30:64,50:70,65:72,80:76,:64)+$S(BM="T":5,1:0) . . Set Params("LODIEPTE")=Params("DIEPTE") ;-(2*$$$KartonDikte) . . If (Reling && ((DC = "A")||(LC="B"))) Do ; Antaro reling . . . Set Params("LOHOOGTE")= Params("LOHOOGTE") + 10 ; extra plaats voor dikkere reling . . Set Params("DIEPTE")=Params("DIEPTE")+(2*$$$KartonDikte) . . Set Params("BREEDTE")=Params("BREEDTE")+Params("LOHOOGTE")+(3*$$$KartonDikte) . Set Params("LOCP")=$CASE(DK,25:30,30:31,50:32,65:40,80:36,:31)+$S(BM="T":10,1:0) Set:..VoorgesnedenHuls(PRNr) Params("LOQTY")=-1 ]]> Parameter VoorgesnedenHuls = "500D;500C;500K;500B;500M;500N"; 500D;500C;500K;500B;500M;500N;450D;450C;450K;450B;450M;450N W ##class(BL.PPS.TBX.OptiBox).VoorgesnedenHuls() 1 PRNr:%Integer 50)||(BM="T") Voorgesneden=0 ; niet voor 65kg en Tip-ON Set:(DC="A")&&(RH?1(1"B",1"C",1"D")) Voorgesneden=0 ; niet voor Antaro met vierkante reling } Quit Voorgesneden ]]> W ##class(BL.PPS.TBX.OptiBox).TeSnijdenLO() 1 PRNr,ExcludeList 0)+(Params("BKQTY")>0) ; een van de twee verpakking moeten gesneden worden ]]> 1 PRNr 0:25,1:0)+$S(Params("BKQTY")>0:20,1:0) ]]> TOENr ..#MinVertStack ; Minimum 3 laden voor vert stack ]]> De verpakking opsplitsing in een verpakking Lade, Onderdelen, AntiSlipMat en Fronten VpkLA= P:Palletstapeling, S:V1, V:Vertikale stacking VpkLO= B:Bulk, S:V1, C:Corpusprofiel bulk ander onderdelen in V1 VpkASM= B:Bulk, S:V1 VpkFRONT= B:Bulk, S:V1 1 (1200-32) VpkLA="S" ; Max. breedte ; Verpakking Losseonderdelen Set VpkLO="B" Set:VPK?1(1"Z",1"S") VpkLO="S" Set:VPK?1(1"R") VpkLO="C" ; Verpakking Antislipmat Set VpkASM="S" Set:VpkLA="V" VpkASM="B" ; Bulk indien vertikale stacking ; Verpakking Front binnenlade Set VpkFRONT="S" Set:VpkLA="V" VpkFRONT="B" ; Bulk indien vertikale stacking ]]> 1 Werkpost:%String %String