",!
+ Write $c(9)
+ For d=1:1:7 {
+ Write !,$c(9)
+ New Temp
+ Set Temp=$G(arrValues(d,u))
+ Set Temp=$S((Temp>0):Temp,1:0) /// om lege velden tegen te gaan (leeg wordt 0)
+ Set CellColor=$S(($G(arrTopTwintig(d,u))="TOP10"):"#FFDDDD",($G(arrTopTwintig(d,u))="TOP20"):"#FFFFCA",1:"white")
+ Write !,"
+Standaard zijn posities STEEDS gemeten van Links (X), van Boven (Y) en vanaf de Rug (Z)
+AfstandRand is steeds relatief (t.o.v. de buitenrand van het profiel)
+Negatieve posities zijn gemeten van de tegenovergestelde kant:
+| PosX < 0 ==> X = KD.Breedte - PosX
+| PosY < 0 ==> Y = KD.Hoogte - PosY
+| PosZ < 0 ==> Z = KD.ProfType.Dikte - PosZ
+De negatieve posities zijn
+- te tonen als positieve waarden in de User Interface
+- op te slaan in Caché als negatieve waarden
+- in XML eveneens als negatieve waarden op te slaan met ev. een Attribute "omschrijving", bvb. "OMS=Van onderkant"
+
+
+%Library.Float
+
+0
+
+
+
+
+
+Alleen te gebruiken indien er in het glas en in het kader wordt geboord voor de "glas"-profielen.
+Deze is nodig omdat de boring in glas dan verschillend is van de profielboring.
+De BoorGlasDiameter is standaard 9mm
+%Library.Float
+
+0
+
+
+
+
+
+PL - PR - PB - PO - VUL - P?;VUL
+Kader - id - id - id - Vulling - Kader&Vulling;
+Is enkel ingevuld in het geval van een "geldige boring".]]>
+%Library.String
+
+0
+
+
+
+
+
+
+Dit is de nieuwe datastructuur sinds 14/03/2001
+%Library.String
+
+0
+
+
+
+
+
+
+Als "Niet Automatisch Frezen" gekozen, dan is het eerste character een "!"]]>
+%Library.String
+
+0
+
+
+
+%String
+
+0
+
+
+
+
+%Library.String
+
+0
+
+
+
+%Library.String
+
+0
+
+
+
+%Library.String
+
+0
+
+
+
+
+Bevat de code voor TxtOpmerking. Transient.
+TxtOpmKode wordt samen met TxtOpmerking opgevuld door de method TxtOpmerkingSet
+%Library.String
+
+0
+1
+
+
+
+%Library.String
+
+0
+1
+
+
+
+
+%Library.String
+
+0
+1
+
+
+
+
+%Library.String
+
+0
+
+
+
+%Library.Float
+
+0
+
+
+
+
+%Library.Float
+
+0
+
+
+
+
+%Library.Float
+
+0
+
+
+
+
+
+Berekent de Absolute Positie voor de gegeven coördinaat (X, Y, Z) uitgaande van de relatieve positie.
+Als relatieve positie leeg is, of als blnAbsOnly=1 , dan wordt de gewone (absolute) Pos teruggegeven.
+OPM: "Next" en "Previous" zijn hier niet mogelijk.
+code
+sCode:%Library.String,KadObj:Prod.GADef.KaderDeur,blnAbsOnly:%Library.String=0
+%Library.Float
+0 Do
+ . Set AbsPos=RelIPos
+ Else If (RelIPos'="") Do
+ . Set AbsPos=KadObj.AbsPosCalc(sCode,RelIPos)
+ . Set:(AbsPos=RelIPos) AbsPos=""
+ Set:($G(AbsPos)="") AbsPos=IPos
+
+ Quit AbsPos
+
+]]>
+
+
+
+
+Als blnOpposite=1, dan geeft CalcHoogtePos steeds de dikte/breedte (voor onder+boven/interne+externe zijde).]]>
+code
+GADefProd:Prod.GADef.KaderDeur,blnOpposite:%Library.Integer=1
+%Library.Float
+
+
+
+
+code
+GADefProd:Prod.GADef.KaderDeur
+%Library.Float
+
+
+
+
+code
+GADefProd:Prod.GADef.KaderDeur
+%Library.Float
+
+
+
+
+
+Returns "" (empty string) if OK.
+Mogelijke waarschuwingen zijn:
+Boring in Vrije zone Verbinder
+Boring in profiel van Scharnierzijde.]]>
+code
+KadObj:Prod.GADef.KaderDeur
+%Library.String
+0)&(%this.AfschuinDiameter>%this.BoorDiameter) D2=%this.AfschuinDiameter/2
+ . ; Transformatie naar eerste kwadrant
+ . Set:((2*pX)>KadObj.Breedte) pX=KadObj.Breedte-pX
+ . Set:((2*pY)>KadObj.Hoogte) pY=KadObj.Hoogte-pY
+ . ; Take BoorDiameter into account
+ . Set pX=pX-D2
+ . Set pY=pY-D2
+ . ; Get Vrijze Zone verbinder
+ . Set HoekL=KadObj.ProfType.Hoek.ConstructAfm.GetAt("VRZBOR")
+ . Set HoekB=KadObj.ProfType.Hoek.ConstructAfm.GetAt("BORAX") ; "VRZBORB"
+ . ; Controle Vrije Zone
+ . If ((pX
+
+
+
+
+Voor een D=5;7 doorboring wordt automatisch CncID="HULS" en AD=6.5, behalve als CncID="BOR".
+Info wordt weggeschreven in de property ]]>
+code
+Breedte:%Library.Float,Hoogte:%Library.Float,ProfType:Res.PI.ProfType,VullingObj:Prod.GADef.emKadVulling,KadObj:Prod.GADef.KaderDeur
+%Library.Boolean
+0)&(%this.AfschuinDiameter>%this.BoorDiameter) D2=%this.AfschuinDiameter/2
+
+ ; Transformatie naar eerste kwadrant
+ Set:((2*pX)>Breedte) pX=Breedte-pX
+ Set:((2*pY)>Hoogte) pY=Hoogte-pY
+
+ If (%this.BoringType="ON")!(%this.BoringType="BO") Do ; Laterale boring
+ . ; Diameter ligt volledig binnen de Kaderdeur ?
+ . Set:(pX-D2'>0) msg="Rand Kader"
+ . Set:(pY-D2'>0) msg="Rand Kader"
+ . Quit:(msg'="")
+ . ;
+ . ; Boring beslist welke punten (posities) in het profiel moet gecontroleerd worden
+ . Set Pos1D=$S(pX"" of CncID="BOR"
+ ... Set %this.CncID="HULS"
+ ... Set %this.AfschuinDiameter=6.5
+ . If %this.CncID["HULS", ((%this.BoringType'="ON")!(%this.BoorDiameter'=5)!(%this.BoorDiepte'<0)) Do
+ .. ; Reset/Remove "HULS" indien niet meer van toepassing
+ .. Set %this.CncID=""
+ .. Set:(%this.AfschuinDiameter=6.5) %this.AfschuinDiameter=""
+ . ;
+ . ; Controle Vulling
+ . If (%this.BoorDiepte=-1) Quit:($$cbgControleVulling(.msg,VullingObj)=0) ; Doorboring NIET mogelijk ? --> Quit
+ . Else Set:(msg="OK: VUL") msg="Rugboring in Glas" ; Rugboring in glas NIET mogelijk
+ . ;
+ . Quit:($E(msg,1,3)'="OK:") ; Set msg="Fout Boring"
+ . Set OK=1
+
+ Else If (%this.BoringType="IN")!(%this.BoringType="EX") Do ; Dwarse (zij)boring
+ . ; Diameter ligt op de rand van de Kaderdeur ?
+ . Set:(%this.BoringType="EX") ProfPos=0
+ . Set:(%this.BoringType="IN") ProfPos=ProfType.Breedte
+ . ;
+ . Set:(pX-ProfPos\1=0)&(pY-ProfPos\1=0) msg="Fout Rand"
+ . Set:(pX-ProfPos\1<0)!(pY-ProfPos\1<0) msg="Niet op Rand"
+ . Set:(pX-ProfPos\1'=0)&(pY-ProfPos\1'=0) msg="Niet op Rand"
+ . Quit:(msg'="")
+ . ;
+ . Set Pos1D=%this.ZPos
+ . Set msg=$$cbgTestBoring1D(ProfType,%this.BoringType,Pos1D,D2,%this.BoorDiepte)
+ . Quit:($E(msg,1,3)'="OK:")
+ . ;
+ . Set OK=1
+
+ Else Do
+ . ; Type boring onbekend
+ . Set OK=0
+ . Quit
+
+ Do %this.OpmerkingKodeSet(msg,"NL")
+ Quit OK
+
+
+cbgTestBoring1D(ProfielType,Kant,Pos1D,Straal,Diepte)
+ New TypePlus,TypeMin
+ Set TypePlus=ProfielType.PuntInfoGet(Kant,Pos1D+Straal,Diepte)
+ Set TypeMin=ProfielType.PuntInfoGet(Kant,Pos1D-Straal,Diepte)
+ ;Set %this.Opmerking="Test: TP="_TypePlus_" , TM="_TypeMin_" , P+S="_(Pos1D+Straal)_" , P-S="_(Pos1D-Straal)
+ Quit:(TypePlus'=TypeMin) "Fout Boring"
+ Quit TypePlus
+
+
+cbgControleVulling(msg,VullingObj)
+ ; msg should be passed by reference !
+ New vOK,ResultB
+
+ If msg'["VUL" Set vOK=1
+ Else Do
+ . Set ResultB=VullingObj.ControleBoring($E(msg,4,999))
+ . If (ResultB'="OK:"),(ResultB'="") Do
+ .. ; Fout bij boring in de vulling: foutmelding via teruggeven.
+ .. Set msg=ResultB
+ .. Set vOK=0
+ . Else Set vOK=1
+ . ;
+
+ Quit vOK
+
+]]>
+
+
+
+]]>
+code
+MaxX:%Library.Float,MaxY:%Library.Float,MaxZ:%Library.Float,MaxD:%Library.Float
+%Library.String
+0)!(%this.XPos'0)!(%this.YPos'0),%this.BoorDiameter'="",(%this.BoorDiameter'>0)!(%this.BoorDiameter'0)!(%this.AfschuinDiameter'0,%this.BoorDiameter>0,(%this.AfschuinDiameter'>%this.BoorDiameter) Set msg="A" ; AfschuinD is kleiner dan BoorDiameter
+ . Else If %this.BoorGlasDiameter'="",(%this.BoorGlasDiameter<5) Set msg="BGD"
+ . Else If (%this.XPos="")&(%this.YPos="")&(%this.BoorDiameter="") Set msg="Leeg"
+ . Else If (%this.XPos="")!(%this.YPos="")!(%this.BoorDiameter="") Set msg="Onvolledig"
+ . ;Else If (%this.XPos="")!(%this.YPos="")!(%this.BoorDiameter="")!((%this.BoringPlaats="KG")&(%this.BoorGlasDiameter="")) Set msg="Onvolledig"
+ . Else Set OK=1
+
+ Else IF (%this.BoringType="EX")!(%this.BoringType="IN") Do
+ . ; Zijboring
+ . If %this.XPos'="",(%this.XPos<0)!(%this.XPos>MaxX) Set msg="X"
+ . Else If %this.YPos'="",(%this.YPos<0)!(%this.YPos>MaxY) Set msg="Y"
+ . Else If %this.ZPos'="",(%this.ZPos'>0)!(%this.ZPos'0)!(%this.BoorDiameter'0),%this.BoorDiameter'="",(%this.BoorDiameter'>0)!(%this.BoorDiameter'0)!(%this.AfschuinDiameter'%this.BoorDiameter) Set msg="A" ; AfschuinD is kleiner dan BoorDiameter
+ . Else If (%this.XPos="")&(%this.YPos="")&(%this.ZPos="")&(%this.BoorDiameter="") Set msg="Leeg"
+ . Else If (%this.XPos="")!(%this.YPos="")!(%this.ZPos="")!(%this.BoorDiameter="") Set msg="Onvolledig"
+ . Else Set OK=1
+ . ;
+
+ Else Do
+ . ; Type boring onbekend
+ . Set OK=0
+ . Quit
+
+
+ Do:(OK'=1) %this.OpmerkingKodeSet(msg,"NL")
+ Quit OK
+
+]]>
+
+
+
+
+Copy maken van een boring in een nieuw object.
+Verschillende CopyModes: "FullCopy" (=Default), "BorNormal", "Empty"
+code
+CopyMode:%Library.String="FullCopy"
+Prod.GADef.emKadBoring
+
+
+
+
+
+Geeft True of False terug, naargelang de boring een speciale of een gewone is.
+code
+%Library.Boolean
+0) Quit 0
+ ; boring is een "HULS" doorboring
+ If %this.BoorDiepte<0, %this.BoorDiameter=5, %this.AfschuinDiameter=6.5, %this.BoorGlasDiameter>5, $E(%this.CncID,1,4)="HULS" Quit 0
+ ; boring is een normale doorboring
+ If %this.BoorDiepte<0, ('%this.BoorDiameter)!(%this.BoorDiameter>0), %this.AfschuinDiameter'>0, ('%this.BoorGlasDiameter)!(%this.BoorGlasDiameter=7) Quit 0
+ ; boring is een normale rugboring
+ If %this.BoorDiepte>0, ('%this.BoorDiameter)!(%this.BoorDiameter>0), %this.AfschuinDiameter'>0, ('%this.BoorGlasDiameter)!(%this.BoorGlasDiameter=7) Quit 0
+
+ Quit 1
+
+]]>
+
+
+
+code
+QtyStaffel:%Library.Integer,MuntPar:%Library.Float,DtlObj:Res.PI.emKostDetail,Opties:%Library.String,Omtrek:%Library.Float,Opp:%Library.Float,Volume:%Library.Float
+%Library.Float
+
+
+
+
+code
+Kode:%Library.String,Taal:%Library.String="NL"
+
+
+
+
+
+Creëert een tekstlijn op basis van de gegevens van het Embedded Boring Object.
+Deze Tekst wordt tijdelijk opgeslagen in de property TxtSpecial (Transient).
+code
+Taal:%Library.String="NL"
+%Library.String
+
+
+
+
+
+Tekenen van de VML-boringen binnen de groep van alle beslag.
+Voor iedere boring van het beslag wordt deze routine telkens opgeroepen.
+code
+DevObj:%Library.String,Plaats:%Library.String,ProfBreedte:%Library.Float,TekeningCode:%Library.String,Opties:%Library.String
+"
+ ; ""
+
+ New BType,strVML,OriginX,OriginY,intSize,intRotate,strColor,TekCode
+
+ Set BType=$S((%this.BoringType="EX")!(%this.BoringType="IN"):"Z", 1:%this.BoringType)
+ If BType="Z",$G(Plaats)="" Quit
+ Set TekCode=$G(TekeningCode,"")
+
+ Set OriginX=%this.XPos
+ Set OriginY=%this.YPos
+ Set intSize=$S(%this.BoorDiameter<0:0, 1:%this.BoorDiameter)
+ Set intRotate=$S(Plaats="PL":0, Plaats="PB":90, Plaats="PR":180, Plaats="PO":270, 1:0) ; Externe boring
+ Set strColor="blue"
+
+ ;; Select VML type for this boring
+ ;If %this.VmlID="KAD" Do ; Special case: FREES in Kaderscharnier
+ ;. ; Draw rectangle
+ ;. Set strVML=$$KADFREES^VHSys.Library.VMLLib(OriginX,OriginY,intRotate,strColor,)_NL
+ ;Else If %this.VmlID="SD30" Do ; Special case: FREES in Schuifdeurbeslag
+ ;. ; Draw arc
+ ;. Set strVML=$$SD30FREES^VHSys.Library.VMLLib(OriginX,OriginY,intRotate,strColor,)_NL
+ ;Else If $E(%this.VmlID,1,4)="SD35" Do ; Special case: FREES in Schuifdeurbeslag
+ ;. ; Draw arc
+ ;. Set strVML=$$SD35FREES^VHSys.Library.VMLLib(OriginX,OriginY,intRotate,strColor,)_NL
+
+ ; Select VML type for this boring
+ If $L(%this.VmlID)>2 Do ; Special VML-code
+ . Set strVML=$$VMLShape^VHSys.Library.VMLLib(%this.VmlID,OriginX,OriginY,intSize,intRotate,strColor,)_NL
+ . ;Set strVML=$$KADFREES^VHSys.Library.VMLLib(OriginX,OriginY,intRotate,strColor,)_NL
+
+ Else If BType="Z" Do ; ZIJ BORING ("T")
+ . Set intSize=14 ; Fixed size for "Zijboring"
+ . Set:(%this.BoringType="IN") intRotate=(intRotate+180)#360
+ . Set strColor="red"
+ . Set strVML=$$TCross^VHSys.Library.VMLLib(OriginX,OriginY,intSize,intSize,strColor,intRotate,)_NL
+ Else If %this.IsSpecialeBoring() Do ; SPECIALE BORING ("+")
+ . Set intSize=10
+ . Set strVML=$$CrossHV^VHSys.Library.VMLLib(OriginX,OriginY,intSize,intSize,strColor,)_NL
+ Else If %this.BoorDiepte<0 Do ; DOORBORING ("o")
+ . Set strVML=$$Circle^VHSys.Library.VMLLib(OriginX,OriginY, $S(intSize<2:2, 1:intSize), strColor,strColor,)_NL
+ Else If (%this.BoorDiameter<0)||(%this.BoorDiepte=0) Do ; PUNT BORING ("X")
+ . Set intSize=10
+ . Set strVML=$$CrossDiag^VHSys.Library.VMLLib(OriginX,OriginY,intSize,intSize,strColor,)_NL
+ Else Do ; STD RUGBORING ("o"&"X")
+ . Set strVML=""
+ . Set:(intSize'>10) strVML=$$CrossDiag^VHSys.Library.VMLLib(OriginX,OriginY,10,10,strColor,)_NL
+ . Set strVML=strVML_$$Circle^VHSys.Library.VMLLib(OriginX,OriginY, $S(intSize<2:2, 1:intSize), strColor,strColor,)_NL
+ . ;
+
+ ; Add VML boring to DevObj
+ Do WRITE^XMLWRITE(.DevObj,strVML)
+ Quit
+
+
+]]>
+
+
+
+
+Voor een zijboring ("Z") is [objParent] of ( [Plaats] en [ProfBreedte]) verplicht door te geven.]]>
+code
+
+
+ ; ...
+ ;
+
+ New BType,strVML,strVML2,intLeft,intTop,intSize,intRotate,strColor,FKey
+ New sProf,Opposite,NL
+ Set NL=$C(13)_$C(10)
+ Set BType=$S((%this.BoringType="EX")!(%this.BoringType="IN"):"Z", 1:%this.BoringType)
+ If BType="Z",$G(Plaats)="",'$G(objParent) Quit
+ Set:($G(Plaats)="") Plaats=objParent.ProfielPlaatsGet(%this)
+ Quit:(objParent.NietOpProfiel(Plaats))
+
+ ; Prepare Boring Symbol
+ ; ---------------------
+ Set strVML=""
+ Set strColor="black"
+
+ If BType="Z" Do
+ . ; Zijboring
+ . ;Set:($G(Plaats)="") Plaats=objParent.ProfielPlaatsGet(%this)
+ . Set intRotate=$S(Plaats="PL":0, Plaats="PB":90, Plaats="PR":180, Plaats="PO":270, 1:0) ; Externe boring
+ . Set:(%this.BoringType="IN") intRotate=(intRotate+180)#360
+ . Set strColor="red"
+ . Set strVML=$$TCross^VHSys.Library.VMLLib(50,50,50,50,strColor,intRotate,)_NL
+ . ; Values for
+ . Set intSize=14*2
+
+ Else If %this.IsSpecialeBoring() Do
+ . ; Speciale boring: put (+) sign to draw users attention
+ . Set strVML=$$CrossHV^VHSys.Library.VMLLib(50,50,100,100,strColor,)_NL
+ . ; Values for
+ . Set intSize=12
+
+ Else If %this.BoorDiepte<0 Do
+ . ; Doorboring (normal circle)
+ . Set strVML=$$Circle^VHSys.Library.VMLLib(50,50,100,strColor,)_NL
+ . ; Values for
+ . Set intSize=$S(%this.BoorDiameter<2:2, 1:%this.BoorDiameter)
+
+ Else If (%this.BoorDiameter<0)||(%this.BoorDiepte=0) Do
+ . ; Puntboring (X : diagonal cross)
+ . Set strVML=$$CrossDiag^VHSys.Library.VMLLib(50,50,100,100,strColor,)_NL
+ . ; Values for
+ . Set intSize=10
+
+ Else Do
+ . ; Standaard Rugboring (
+ . Set strVML=$$CrossDiag^VHSys.Library.VMLLib(50,50,100,100,strColor,)_NL
+ . Set strVML=strVML_$$Circle^VHSys.Library.VMLLib(50,50,$S(%this.BoorDiameter<2:2, 1:%this.BoorDiameter)*10,strColor,)_NL
+ . ; Values for
+ . Set intSize=10
+
+
+ Set intLeft=%this.XPos-(intSize\2)
+ Set intTop=%this.YPos-(intSize\2)
+
+ ; Set VML Group and surrounding rectangle
+ Set strVML2=""
+ If $G(Opties)["C" Set strVML2=strVML2_""_NL
+ Set strVML2=strVML2_$$xvwVMLGroepOpen(intLeft,intTop, intSize,intSize)_NL
+ Set strVML2=strVML2_strVML
+ Set strVML2=strVML2_$$xvwVMLGroepClose()_NL
+ Do WRITE^XMLWRITE(DevObj,strVML2)
+
+
+ ; !!! DOORBORING in zijkant - draw OPPOSITE zijboring !!!
+ If (BType="Z"),(%this.BoorDiepte<0) Do
+ . Set strVML=$$TCross^VHSys.Library.VMLLib(50,50,50,50,strColor,(intRotate+180)#360,)_NL
+ . Set sProf=%this.BoringType_"-"_Plaats
+ . Set:($G(ProfBreedte)="") ProfBreedte=objParent.ProfType.Breedte
+ . Set Opposite=ProfBreedte*$S((sProf="IN-PL")!(sProf="IN-PB")!(sProf="EX-PR")!(sProf="EX-PO"):-1,(sProf="EX-PL")!(sProf="EX-PB")!(sProf="IN-PR")!(sProf="IN-PO"):1,1:0)
+ . Set:(Plaats="PL")!(Plaats="PR") intLeft=intLeft+Opposite
+ . Set:(Plaats="PB")!(Plaats="PO") intTop=intTop+Opposite
+ . Set strVML2=""
+ . Set strVML2=strVML2_$$xvwVMLGroepOpen(intLeft,intTop, intSize,intSize)_NL
+ . Set strVML2=strVML2_strVML
+ . Set strVML2=strVML2_$$xvwVMLGroepClose()_NL
+ . Do WRITE^XMLWRITE(DevObj,strVML2)
+
+ Quit
+
+
+xvwVMLGroepOpen(Left,Top,Width,Height)
+ Set:(Width\1'>0) Width=1
+ Set:(Height\1'>0) Height=1
+ Quit ""
+
+xvwVMLGroepClose()
+ Quit ""
+]]>
+
+
+
+code
+
+0 Do ; Punten van boring
+ . Do:(%this.BoorDiameter) TAGWRITE^XMLWRITE(DevObj,"DIAMETER",%this.BoorDiameter,"UNIT=""mm""")
+ . Do:(%this.BoorGlasDiameter) TAGWRITE^XMLWRITE(DevObj,"GLASDIAMETER",%this.BoorGlasDiameter,"UNIT=""mm""")
+ . Do:(%this.AfschuinDiameter) TAGWRITE^XMLWRITE(DevObj,"AFSCHUINDIAMETER",%this.AfschuinDiameter,"UNIT=""mm""")
+ Else Do ; Puntboring
+ . Do:(%this.BoorDiameter'="") TAGWRITE^XMLWRITE(DevObj,"DIAMETER","punt","")
+
+ ; Plaatsbepaling
+ If %this.BoringType="ON" Do ;Standaard boring langs ONder
+ . Set Param=$S(%this.BoorDiepte<0:"doorboring",%this.BoorDiepte>0:"rugboring",%this.BoorDiepte=0:"puntboring",1:"")
+ . Do TAGWRITE^XMLWRITE(DevObj,"BOORTYPE",%this.BoringType)
+ . Do TAGWRITE^XMLWRITE(DevObj,"BOORDIEPTE",%this.BoorDiepte,"OMS="""_Param_"""")
+ Else Do ;Speciale boring
+ . Set Param=$S(%this.BoringType="BO":"bovenkant",%this.BoringType="EX":"externe",%this.BoringType="IN":"interne",1:"fout profielkant")
+ . Do TAGWRITE^XMLWRITE(DevObj,"BOORTYPE",%this.BoringType,"OMS="""_Param_"""")
+ . Set Param=$S(%this.BoorDiepte<0:"doorboring",%this.BoorDiepte>0:"zijboring",%this.BoorDiepte=0:"puntboring",1:"")
+ . Do TAGWRITE^XMLWRITE(DevObj,"BOORDIEPTE",%this.BoorDiepte,"OMS="""_Param_"""")
+
+ Set Param=""
+ Set:($E(%this.BoringPlaats,1,2)?1"P"1E) Param=$Case($E(%this.BoringPlaats,1,2), "PL":"links", "PR":"rechts", "PB":"bovenste", "PO":"onderste", :"")_" profiel"
+ Set:(%this.BoringPlaats["VUL") Param=$S(Param'="":Param_" en ",1:"")_"glas"
+ Set:(Param="") Param="fout"
+ Do TAGWRITE^XMLWRITE(DevObj,"BOORPLAATS",%this.BoringPlaats,"OMS="""_Param_"""")
+ Do:($L(%this.Opmerking)) TAGWRITE^XMLWRITE(DevObj,"OPMERKING",%this.Opmerking)
+ Do:($L(%this.CncID)) TAGWRITE^XMLWRITE(DevObj,"CNCID",%this.CncID)
+ Do:($L(%this.VmlID)) TAGWRITE^XMLWRITE(DevObj,"VMLID",%this.VmlID)
+
+ Set LPos=%this.CalcLPos(GADefProd)
+ Set RandPos=%this.CalcRandPos(GADefProd)
+ Do:(LPos'="") TAGWRITE^XMLWRITE(DevObj,"LPOS",LPos,"UNIT=""mm""")
+ Do:(RandPos'="") TAGWRITE^XMLWRITE(DevObj,"RANDPOS",RandPos,"UNIT=""mm""")
+
+ Do ENDTAG^XMLWRITE(DevObj,"BORING")
+
+]]>
+
+
+
+%Library.CacheSerialState
+emPSBoringState
+^Prod.GAD.emKadBoringS
+
+
+AfschuinDiameter
+
+
+BoorDiameter
+
+
+BoringType
+
+
+Opmerking
+
+
+XPos
+
+
+YPos
+
+
+ZPos
+
+
+BoringPlaats
+
+
+BoorGlasDiameter
+
+
+BoorDiepte
+
+
+RelXPos
+
+
+RelYPos
+
+
+RelZPos
+
+
+CncID
+
+
+VmlID
+
+
+CStream
+
+
+
+
+
Index: Prod/ProductBasis.cls.xml
===================================================================
diff -u
--- Prod/ProductBasis.cls.xml (revision 0)
+++ Prod/ProductBasis.cls.xml (revision 2)
@@ -0,0 +1,1829 @@
+
+
+
+persistent
+DataM
+%Library.Persistent
+
+
+
+A = 80% van de meest roterende producten
+B = 15% van de tweede meest roterende producten
+C = 5% van de minst roterende producten
+
+De klassificatie wordt opnieuw berekend door ^PRABC
+De klassificatie wordt berekend op het aantal uitgaande gecumuleerde faktuurlijnen in ^KSTPR
+%Library.String
+
+
+
+
+
+
+Toeleveringen opgedeeld in drie velden door "#"
+1. Aantal stock ++ KOM
+Format: Numeric: 7
+
+2. Aantal stock
+Format: Numeric: 7
+
+3. Aantal KOM
+Format: Numeric: 7
+%Library.String
+
+
+
+
+Reservatie opgedeeld in drie velden door "#"
+1. Aantal Stock + KOM
+Format: Numeric: 7
+2. Aantal Stock
+Format: Numeric: 7
+3. Aantal KOM
+Format: Numeric: 7
+%Library.String
+
+
+
+%Library.String
+
+
+
+
+Format: Char: 2
+Waarde: E1,E2,...,H1,H2,...
+%Library.String
+
+
+
+
+
+Format: Char: 2
+Waarde: E1, E2,...,H1,H2,...
+%Library.String
+
+
+
+
+
+Format: Char: 2
+Waarde: E1,E2,...,H1,H2,...
+%Library.String
+
+
+
+
+
+Format: Char: 2
+Waarde: E1,E2,...,H1,H2,...
+%Library.String
+
+
+
+
+
+Format: Numeric: 1
+%Library.String
+
+
+
+
+Popup: PRODUKT;PRBARCODE
+%Library.String
+
+
+
+
+Fomat: 20 char
+%Library.String
+
+
+
+
+
+Copy van de fysische stock. Genomen bij het begin van de inventaris om na de inventaris een vergelijking te maken
+%Library.Integer
+
+
+
+
+Format: Numeric: 7
+%Library.Integer
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+1 = Niet bijhouden
+"" = Bijhouden
+%Library.String
+
+
+
+
+
+%Library.String
+
+
+
+
+Breedte in mm van de grootverpakking
+%Library.Integer
+
+
+
+
+Format: Numeriek, aantal weken
+%Library.Integer
+
+
+
+
+Popup PRODUKT;CYCLECOUNT
+0 = Nooit
+1 = Altijd
+2 = Grenswaardeoverschrijding
+3 = 2 + 4
+4 = Bij leegworden drager
+%Library.Integer
+
+
+
+
+
+Format: DD.MM.JJ
+Sys.cDate
+
+
+
+
+Geeft aan wanneer een produkt veranderd is zodanig dat nieuwe goederen niet meer mogen bijgestapeld worden.
+Er moet een nieuwe paletplaats voor voorzien worden.
+%Library.Date
+
+
+
+Sys.cDate
+
+
+
+
+Opgedeeld in Stock en KOM door #
+Het gemiddelde wordt berekend door (totaal verkoop over 52 weken) / 48
+1. Stock gem weekverkoop
+Format: Numeric: 7
+2. KOM gem weekverkoop
+Format: Numeric: 7
+3. Frequentie: hoeveel weken er verkoop is per jaar
+%Library.String
+
+
+
+
+Bij orderingave wordt deze routine opgeroepen voor kreatie van het afgeleide product
+%Library.String
+
+
+
+
+Format: Real: 12,3
+%Library.Numeric
+
+
+
+
+Gemiddelde weekverkoop waar de recenste weken zwaarder wegen dan de oude weken
+( VerkoopWeekx * (Weekx) MOD 4) / Weekx MOD 4 * ISVERLOF(Weekx)
+Waar Weekx gaat van 1 (= oudste week) tot 52 (= recenste week)
+De functie ISVERLOF geeft voor de verlof weken een 0 terug en voor de ander een 1.
+%Library.String
+
+
+
+
+Hoogte in mm van de grootverpakking
+%Library.Integer
+
+
+
+
+Format: String: 11
+%Library.String
+
+
+
+
+%Library.Integer
+
+
+
+
+Format: Char: 1
+Waarde: Indien empty is geen KATALOOG PRIJS - product
+Anders L,S,G dan KATALOOG PRIJS - product
+%Library.String
+
+
+
+
+
+1 = verschijnt in de KS-prijslijst
+%Library.String
+
+
+
+
+Format: Char: 1
+Waarde: Indien empty is geen KATALOOG PRIJS - product
+Anders L,S,G dan KATALOOG PRIJS - product
+%Library.String
+
+
+
+
+%Library.String
+
+
+
+
+Format: String: 25
+%Library.String
+
+
+
+
+
+Lengte in mm van de grootverpakking
+%Library.Integer
+
+
+
+%Library.String
+
+
+
+
+K = Kind of leeg
+Indien "K" dan kan dit product niet alleen verkocht worden, alleen als deel van een moederproduct
+%Library.String
+
+
+
+
+Waarde: 1= NON-Aktief, empty = Aktief
+%Library.String
+
+
+
+
+
+%Library.String
+
+
+
+%Library.String
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 26
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Boekhoudkundig rekeningnummer waarop gefaktureerd wordt. Wordt gebruikt bv. voor verpakking.
+%Library.String
+
+
+
+
+Popup: PRODUKT;OPSLAGZONE
+%Library.String
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+
+Format: String: 44
+%Library.String
+
+
+
+
+%Library.String
+1
+ Set {*}=##class(Prod.Product).GetPropViaNr({InternProductNr},"ProductGroep")
+
+1
+
+
+
+
+Popup: PRODUKT; STOCKAGEGRP
+Geeft aan tot welke productgroep dit product behoort voor opslag van dit product in een bep. opslagzone
+%Library.String
+
+
+
+
+Aantal dat gereserveerd van de fysische stock tijdens het doorsturen van de OL's naar ht WMS en het feitelijke op uitleveringsbon zetten van de lijnen
+%Library.Integer
+
+
+
+
+door "#" gescheiden
+1. Rotatie
+2. Gem. Fys Stock
+%Library.String
+
+
+
+
+Format: Char: 1
+Indien leeg = Simulatie
+Indien numeriek: Limiet met als limietwaarde de ingevulde waarde
+%Library.String
+
+
+
+
+
+Format: Numeric: 4
+%Library.Integer
+
+
+
+
+Format: Real: 4,2
+%Library.Numeric
+
+
+
+
+Dekkingsbijdrage
+Format: Real: 4,2
+%Library.Numeric
+
+
+
+
+Extra schaduw DB% voor de PRIJSLIJST-klanten (Codex = "P")
+Format: Real: 4,2
+%Library.Numeric
+
+
+
+
+Format: Real: 4,2
+%Library.Numeric
+
+
+
+%Library.String
+
+
+
+
+Format: Real: 12,2
+%Library.Numeric
+
+
+
+
+Format: Real: 4,2
+%Library.Numeric
+
+
+
+
+"" = Neen, 1 = Ja
+%Library.String
+
+
+
+
+
+
+Format: Numeric: 2
+%Library.Integer
+
+
+
+
+Waarde: 1 = stock, empty = Niet stock
+%Library.String
+
+
+
+
+
+
+Is een vermenigvuldigingsfaktor om het aantal verkochte producten correct te herleiden naar bv. hoeveel laden hebben we verkocht
+Indien Telbaar = 0 dan is het produkt niet telbaar bv. accessoires
+Waarde: 0;1;2;...;0,5;0,25;...
+%Library.String
+
+
+
+
+Popup: PRODUKT;SAMPLETYPE
+E = Eenmalig sampelen
+B = Altijd hersampelen
+N = Niet sampelen
+Opmerking: Indien Sample = E en het produkt wordt geteld door de telweegschaal dan
+wordt door het WMS 's nachts een feedback gegeven van Sample = "N". Om te melden
+dat de sample is genomen.
+%Library.String
+
+
+
+
+
+
+Popu: PRODUKT;TELWIJZE
+Z = Zonderbijsamplen
+B = Bijsamplen
+L = aansturing meettoestel niet van toepassing
+%Library.String
+
+
+
+
+
+
+Format: Numeric: 7
+%Library.Integer
+
+
+
+
+Uniekheid index voor property InternProductNr
+1
+InternProductNr
+1
+
+
+
+1
+
+%Library.String
+M.AB.9 of BQBC1->B.QBC.1 of MAHBC2->M.AH.BC.2
+
+ Set vGroep=""
+ Set vDossierNr=""
+ Set vCtrlNr=""
+
+ ;Input onthouden voor foutmeldigen
+ New OrigDossier
+ Set OrigDossier=Dossier
+
+ ;Eventueel reeds geplaatste (foutieve of correcte) punten weghalen
+ Set Dossier=$TR(Dossier,".","")
+
+ ;Controlecijfer ophalen
+ New Loop,tmpChar,CtrlNr
+ Set CtrlNr=""
+ For Loop=$L(Dossier):-1:1 Set tmpChar=$E(Dossier,Loop) Quit:('$IsValidNum(tmpChar)) Do
+ . Set CtrlNr=tmpChar_CtrlNr
+
+ Quit:(CtrlNr="") ""
+
+ Write "Controlecijfer: "_CtrlNr,!
+
+ ;Controlecijfer van dossier strippen
+ New Rest
+ Set Rest=$ZSTRIP(Dossier,">N")
+
+ Quit:(Rest="") ""
+
+ ;Groep (Tandembox,banco,...) strippen (1e char)
+ New Groep,DossierNr
+ Set Groep=$E(Rest,1)
+ Set DossierNr=$E(Rest,2,99999)
+
+ Write "Groep: "_Groep,!
+
+ Quit:(DossierNr="") ""
+
+ Write "ProdCode: "_DossierNr,!
+
+ New DottedProdCode,PCLen
+ Set PCLen=$L(DossierNr)
+ If PCLen<4 Do
+ . Set DottedProdCode=DossierNr
+ Else Do
+ . Set DottedProdCode=$CASE(PCLen,4:$E(DossierNr,1,2)_"."_$E(DossierNr,3,4),5:$E(DossierNr,1,3)_"."_$E(DossierNr,4,5),6:$E(DossierNr,1,2)_"."_$E(DossierNr,3,4)_"."_$E(DossierNr,5,6),:"")
+
+ Quit:(DottedProdCode="") ""
+
+ Set vGroep=Groep
+ Set vDossierNr=DossierNr
+ Set vCtrlNr=CtrlNr
+
+ Quit Groep_"."_DottedProdCode_"."_CtrlNr
+
+]]>
+
+
+
+1
+Opslagzone:%Library.Integer
+%Library.String
+
+
+
+
+1
+Groep:%Library.String,DossierNr:%Library.String
+%Library.String
+
+
+
+
+
+Ophalen van een property via het internproductnummer, zonder het product object te opene
+1
+PRNr:%Library.Integer,PropName:%Library.String
+%Library.String
+
+
+
+
+1
+IdentNr:%Library.String
+%Library.String
+
+
+
+
+
+Wegschrijven van een property via het internproductnummer, zonder het product object te openen.
+Geeft 1 terug als OK anders 0 of foutmelding.
+1
+PRNr:%Library.Integer,PropName:%Library.String,Val:%Library.String
+%Library.String
+
+
+
+
+
+Opties:
+
+"PROM" ;Omschrijving
+"PRLK" ; Lijst kindproducten incl.
+"PRIK" ; Is kindproduct
+"PRQTY" : Qty
+"PRKR" : incl .KLantreferentie
+Input:%Library.String,DevObj:%Library.String,Taal:%Library.String,Opties:%Library.String,XSLURL:%Library.String=""
+")
+ . Do WRITE^XMLWRITE(DevObj,"")
+ . Do WRITELN^XMLWRITE(DevObj)
+
+ Do ONEPROD(%this.InternProductNr,tmpKLNr,tmpQty,Opties)
+
+ Quit
+
+ONEPROD(PRNr,KLNr,Qty,Opties)
+ New KortTxt,IDNr,TekRef,Cnt,J,I,Node,Piece,Txt
+ Set Opties=$G(Opties)
+ Do BEGINTAG^XMLWRITE(DevObj,$S(Opties["PRIK":"KINDPRODUCT",1:"PRODUCT"))
+ Do WRITELN^XMLWRITE(DevObj)
+ Set KortTxt=%this.KortTekst ;$P(^KPR(PRNr,0),D)
+
+ ;New tmpGADefObjID,tmpGADefObj
+ ;Set tmpGADefObjID=$P(^KPR(PRNr,"G"),D,13)
+ ;If tmpGADefObjID Do
+ ;. Set tmpGADefObj=##class(Prod.GADef.AfgeleidDef).%OpenId(tmpGADefObjID)
+ ;. If '(Opties[";GAV;GAO") Do Set Opties=Opties_";GAV;GAO" ;XMLWrite van KaderDeur zeker VML & Omschrijving-opties meegeven
+ ;. Do tmpGADefObj.XMLWrite(DevObj,$G(Taal),$G(Opties),"")
+ ;. Do tmpGADefObj.%Close()
+ ;
+ ; Aanpassingen voor GAData.Product:
+ New GAProdID,GAProd,GENTYP
+ Set GAProdID=$P(^KPR(PRNr,"G"),D,13)
+ If $L(GAProdID) Do
+ . Set GENTYP=$P(##class(Prod.Product).GetPropViaNr(PRNr,"GENTYP"),"\",1) ; Geeft TBX, KAD, BAN, ... terug naargelang het product
+ . If GENTYP?1(1"TBX",1"STG") Do
+ .. If '(Opties[";GAO") Do Set Opties=Opties_";GAO" ;XMLWrite van GAData.Product zeker Omschrijving-opties meegeven
+ .. Set GAProd=##class(Prod.GAData.Product).OpenWithCalc(GAProdID)
+ . Else Do
+ .. If '(Opties[";GAV;GAO") Do Set Opties=Opties_";GAV;GAO" ;XMLWrite van KaderDeur zeker VML & Omschrijving-opties meegeven
+ .. Set GAProd=##class(Prod.GADef.AfgeleidDef).%OpenId(GAProdID)
+ . ; Als GAProd bestaat, dan XMLWrite() uitvoeren.
+ . If GAProd Do
+ .. Do GAProd.XMLWrite(DevObj,$G(Taal),$G(Opties),"")
+ .. Do GAProd.%Close()
+
+ Set IDNr=$P(^KPR(PRNr,2),D,25)
+
+ Do BEGINTAG^XMLWRITE(DevObj,"BARCODE")
+ Do TAGWRITE^XMLWRITE(DevObj,"TYPE",%this.BarcodeType)
+ Do WRITELN^XMLWRITE(DevObj)
+ Do TAGWRITE^XMLWRITE(DevObj,"WAARDE",%this.BarcodeWaarde)
+ Do WRITELN^XMLWRITE(DevObj)
+ Do ENDTAG^XMLWRITE(DevObj,"BARCODE")
+
+ Do TAGWRITE^XMLWRITE(DevObj,"PRNR",PRNr)
+ Do WRITELN^XMLWRITE(DevObj)
+ Do TAGWRITE^XMLWRITE(DevObj,"KORTTEKST",KortTxt)
+ Do WRITELN^XMLWRITE(DevObj)
+ Do TAGWRITE^XMLWRITE(DevObj,"IDENTNR",IDNr)
+ Do WRITELN^XMLWRITE(DevObj)
+ Do:Opties["PRKR" KLANTREF(PRNr,KLNr) ; Klantreferenties
+ Do:Opties["PRQTY" TAGWRITE^XMLWRITE(DevObj,"QTY",Qty)
+ Do WRITELN^XMLWRITE(DevObj)
+ Set Talen=$G(Taal,"NFDE")
+ If Opties["PROM" For I=1:1:$L(Talen) Do
+ . Set Taal=$E(Talen,I)
+ . Set:Taal="N" List="0.2,0.11,6.1,6.2,6.3"
+ . Set:Taal="F" List="1.22,3.21,8.1,8.2,8.3"
+ . Set:Taal="D" List="2.2,3.23,10.1,10.2,10.3"
+ . Set:Taal="E" List="2.1,3.22,12.1,12.2,12.3"
+ . Do BEGINTAG^XMLWRITE(DevObj,"OMS",$$PARAMFILL^XMLWRITE("TAAL",Taal))
+ . Set Cnt=0
+ . For J=1:1:$L(List,",") Do
+ .. Set Node=$P($P(List,",",J),".",1)
+ .. Set Piece=$P($P(List,",",J),".",2)
+ .. Set Txt=$P($G(^KPR(PRNr,Node)),D,Piece)
+ .. Quit:Txt=""
+ .. Set Cnt=Cnt+1
+ .. Do TAGWRITE^XMLWRITE(DevObj,"LIJN",$$ConvertToHTML^vhRtn1(Txt),$$PARAMFILL^XMLWRITE("VOLGNR",Cnt))
+ .. Do WRITELN^XMLWRITE(DevObj)
+ . Do ENDTAG^XMLWRITE(DevObj,"OMS")
+ . Do WRITELN^XMLWRITE(DevObj)
+ Do:Opties["PRLK" KINDPROD(PRNr)
+ Do ENDTAG^XMLWRITE(DevObj,$S(Opties["PRIK":"KINDPRODUCT",1:"PRODUCT"))
+ Do WRITELN^XMLWRITE(DevObj)
+ Quit
+
+TEKREF(PRNr,Opties)
+ New TekRef
+ Set TekRef=$P(^KPR(PRNr,0),D)
+ Set TekRef=$E(TekRef,4,99)
+ Set TekRef=$TR($E(TekRef,1,8),".# ","")
+ Set:($E(TekRef,7,8)=16)!($E(TekRef,7,8)=18)!($E(TekRef,7,8)=19) $E(TekRef,7,8)="xx"
+ Set:($E(TekRef,7,8)="IN")!($E(TekRef,7,8)="GR")!($E(TekRef,7,8)="WI") $E(TekRef,7,8)=""
+ Quit $S($L(TekRef):TekRef_".Gif",1:"")
+
+KINDPROD(PRNr)
+ New KPRNr,Sort
+ Set KPRNr=""
+ For Set KPRNr=$O(^PRLINK("D",PRNr,KPRNr)) Quit:KPRNr="" Do
+ . Set Sort($$SORTKEY^PRODUKT(KPRNr))=KPRNr_D_$P(^PRLINK("D",PRNr,KPRNr),D)
+ Set Sort=""
+ For Set Sort=$O(Sort(Sort)) Quit:Sort="" Do
+ . Do ONEPROD($P(Sort(Sort),D,1),$P(Sort(Sort),D,2),"QK") ; Recursie
+ Quit
+
+KLANTREF(PRNr,KLNr)
+ ; Dummy
+ Quit
+
+]]>
+
+
+
+%CacheSQLStorage
+^Prod.ProductBasisS
+
+data
+^KPR
+delimited
+
+{InternProductNr}
+0.1
+
+
+"\"
+0
+8
+
+
+"\"
+0
+17
+
+
+"\"
+2
+9
+
+
+"\"
+3
+20
+
+
+"\"
+1
+14
+
+
+"\"
+1
+10
+
+
+"\"
+1
+15
+
+
+"\"
+1
+16
+
+
+"\"
+0
+5
+
+
+"\"
+2
+13
+
+
+"\"
+2
+14
+
+
+"\"
+1
+9
+
+
+"\"
+0
+12
+
+
+"\"
+4
+1
+
+
+"\"
+4
+7
+
+
+"\"
+4
+8
+
+
+"\"
+4
+9
+
+
+"\"
+4
+10
+
+
+"\"
+5
+4
+
+
+"\"
+5
+5
+
+
+"\"
+5
+6
+
+
+"\"
+5
+7
+
+
+"\"
+5
+8
+
+
+"\"
+5
+9
+
+
+"\"
+4
+2
+
+
+"\"
+5
+10
+
+
+"\"
+4
+3
+
+
+"\"
+5
+1
+
+
+"\"
+5
+2
+
+
+"\"
+5
+3
+
+
+"\"
+4
+4
+
+
+"\"
+4
+5
+
+
+"\"
+4
+6
+
+
+"\"
+0
+15
+
+
+"\"
+3
+1
+
+
+"\"
+1
+5
+
+
+"\"
+1
+17
+
+
+"\"
+1
+2
+
+
+"\"
+0
+13
+
+
+"\"
+1
+8
+
+
+"\"
+0
+16
+
+
+"\"
+1
+23
+
+
+"\"
+0
+3
+
+
+"\"
+1
+13
+
+
+"\"
+1
+21
+
+
+"\"
+1
+4
+
+
+"\"
+2
+25
+
+
+"\"
+1
+18
+
+
+"\"
+3
+3
+
+
+"\"
+1
+19
+
+
+"\"
+3
+2
+
+
+"\"
+0
+1
+
+
+"\"
+1
+6
+
+
+"\"
+0
+6
+
+
+"\"
+0
+23
+
+
+"\"
+1
+25
+
+
+"\"
+0
+20
+
+
+"\"
+0
+21
+
+
+"\"
+2
+2
+
+
+"\"
+3
+23
+
+
+"\"
+2
+1
+
+
+"\"
+3
+22
+
+
+"\"
+1
+22
+
+
+"\"
+3
+21
+
+
+"\"
+0
+2
+
+
+"\"
+0
+11
+
+
+"\"
+0
+10
+
+
+"\"
+2
+15
+
+
+"\"
+8
+9
+
+
+"\"
+6
+9
+
+
+"\"
+8
+10
+
+
+"\"
+6
+10
+
+
+"\"
+9
+1
+
+
+"\"
+7
+1
+
+
+"\"
+9
+2
+
+
+"\"
+7
+2
+
+
+"\"
+9
+3
+
+
+"\"
+7
+3
+
+
+"\"
+9
+4
+
+
+"\"
+7
+4
+
+
+"\"
+9
+5
+
+
+"\"
+7
+5
+
+
+"\"
+9
+6
+
+
+"\"
+7
+6
+
+
+"\"
+9
+7
+
+
+"\"
+7
+7
+
+
+"\"
+9
+8
+
+
+"\"
+7
+8
+
+
+"\"
+9
+9
+
+
+"\"
+7
+9
+
+
+"\"
+9
+10
+
+
+"\"
+7
+10
+
+
+"\"
+8
+1
+
+
+"\"
+6
+1
+
+
+"\"
+8
+2
+
+
+"\"
+6
+2
+
+
+"\"
+8
+3
+
+
+"\"
+6
+3
+
+
+"\"
+8
+4
+
+
+"\"
+6
+4
+
+
+"\"
+8
+5
+
+
+"\"
+6
+5
+
+
+"\"
+8
+6
+
+
+"\"
+6
+6
+
+
+"\"
+8
+7
+
+
+"\"
+6
+7
+
+
+"\"
+8
+8
+
+
+"\"
+6
+8
+
+
+"\"
+1
+1
+
+
+"\"
+0
+9
+
+
+"\"
+1
+24
+
+
+"\"
+0
+24
+
+
+"\"
+0
+18
+
+
+"\"
+2
+7
+
+
+"\"
+2
+6
+
+
+"\"
+2
+10
+
+
+"\"
+2
+4
+
+
+"\"
+1
+3
+
+
+"\"
+2
+3
+
+
+"\"
+2
+5
+
+
+"\"
+2
+16
+
+
+"\"
+2
+8
+
+
+"\"
+1
+20
+
+
+"\"
+1
+7
+
+
+"\"
+2
+12
+
+
+"\"
+2
+11
+
+
+"\"
+0
+14
+
+
+
+
+
Index: csp/productmenusa.cls.xml
===================================================================
diff -u
--- csp/productmenusa.cls.xml (revision 0)
+++ csp/productmenusa.cls.xml (revision 2)
@@ -0,0 +1,203 @@
+
+
+
+User
+cache
+%CSP.Page,cspBasis.ProductMenu
+
+
+1
+code
+%Status
+
+
+
+
+1
+code
+%Boolean
+"
+ Write !,""
+ Write !,"
",!
+ Write $c(9)_"
",!
+ Write $c(9,9)_"
"
+ Write ""
+ Write "
",!
+ Write $c(9,9)
+ Set i=""
+ Write !,$c(9)
+%csp00002 If '(..LoopArray(.MenuArray,.i)) Goto %csp00001 ;{
+ Write !,$c(9,9)_"