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