XMLCreateFile() ; Params: ReturnPath,KlantID,DestinDir #define XSLFile "../XSL/Format FreesBed.xsl" Quit:($G(DestinDir)="") 0 Quit:(%this.FreesBed.Count()'>0) 0 New OutF,FileName,FNFirst,FNLast Set FNFirst=$$xcfGetFirstFile Set FNLast=$$xcfGetLastFile Quit:(FNFirst="") 0 ; FileName samenstellen: CNCFiles moeten van de vorm "1234ACR.???" of "1234AACR.???" zijn Set FileName="FB"_ $E(FNFirst,1,$F(FNFirst,".")-3)_ $S(FNLast'=FNFirst:"_"_$E(FNLast,5,$F(FNLast,".")-3), 1:"")_ ".XML" Set ReturnPath=##class(%Library.File).NormalizeDirectory(DestinDir)_FileName Set OutF=##class(%Library.File).%New(ReturnPath) Do OutF.Open("WSN") Do:('OutF.IsOpen) OutF.%Close() ; Make sure the reference to the object is released If OutF.IsOpen Do . Do OutF.Rewind() . Do %this.XMLWrite(OutF,$G(KlantID),"VTL=1",$$$XSLFile) Else Quit "0;Kan bestand niet openen: "_ReturnPath Do OutF.%Close() Quit 1 xcfGetFirstFile() ; Geeft de eerste FileName van het eerste niet-lege bed terug. New BKey,emBed,FN Set FN="" Set BKey="" For Set emBed=%this.FreesBed.GetNext(.BKey) Quit:(BKey="") Do Quit:(FN'="") . Set FN=emBed.CNCFiles.GetNext("") Quit FN xcfGetLastFile() ; Geeft de laatste FileName van het laatste bed terug. Nieuwe methode zoekt tot een niet-lege naam gevonden wordt. ; Quit $S(%this.FreesBed.GetPrevious("").CNCFiles.Count()>0:FNLast=%this.FreesBed.GetPrevious("").CNCFiles.GetPrevious(""), 1:"") New BKey,emBed,FN Set FN="" Set BKey="" For Set emBed=%this.FreesBed.GetPrevious(.BKey) Quit:(BKey="") Do Quit:(FN'="") . Set:(emBed.CNCFiles.Count()>0) FN=emBed.CNCFiles.GetPrevious("") Quit FN XMLWrite ; Params: DevObj,KlantID,Opties,XSLURL ; BedLijst.XMLWrite(DevObj,KlantID,Opties,XSLURL) Quit:(%this.FreesBed.Count()'>0) New Key,emBed,objKlant,NL Set NL=$C(13)_$C(10) If $L(XSLURL) Do . Do WRITE^XMLWRITE(DevObj,"") . Do WRITE^XMLWRITE(DevObj,"") . Do WRITE^XMLWRITE(DevObj,NL) Do BEGINTAG^XMLWRITE(DevObj, "BEDLIJST", "") Do WRITE^XMLWRITE(DevObj,NL) ; If $G(KlantID)>0 Do . Do BEGINTAG^XMLWRITE(DevObj, "KLANT", "") . Do TAGWRITE^XMLWRITE(DevObj, "ID", KlantID) . Set objKlant=##class(Derde.Klant.Klant).%OpenId(KlantID) . Do:(objKlant) TAGWRITE^XMLWRITE(DevObj, "NAAM", $$ConvertToHTML^vhRtn1(objKlant.Naam)) . Do:(objKlant) objKlant.%Close() . Do ENDTAG^XMLWRITE(DevObj,"KLANT") . Do WRITE^XMLWRITE(DevObj,NL) Set Key="" For Set emBed=%this.FreesBed.GetNext(.Key) Quit:Key="" Do . Quit:(emBed.IsLeeg()) . Do emBed.XMLWrite(DevObj,Key,"",$G(Opties)) . Do WRITE^XMLWRITE(DevObj,NL) Do ENDTAG^XMLWRITE(DevObj,"BEDLIJST") Do WRITE^XMLWRITE(DevObj,NL) Quit EersteVrijePlaats() ; Parameters : VakKey (optioneel; default="") New BedKey,emBed,emVak Set BedKey="" Set emBed=%this.FreesBed.GetPrevious(.BedKey) Quit:(BedKey="") "P006;Geen emBed aanwezig" Set VakKey=$G(VakKey,"") For Do emBed.NextVak(.VakKey) Quit:(VakKey'>0) Quit:(emBed.Vakken.GetAt(VakKey).BezetCode="V") ; Vakken aflopen kolom per kolom, dus niet via emBed.Vakken.GetNext(), want dat is rij per rij Quit:(VakKey>0) VakKey_"\"_BedKey ; Else : nieuw bed toevoegen Set VakKey="" Set BedKey=%this.AppendBed(emBed.BedDef,1) Set emBed=%this.FreesBed.GetAt(BedKey) For Do emBed.NextVak(.VakKey) Quit:(VakKey'>0) Quit:(emBed.Vakken.GetAt(VakKey).BezetCode="V") Quit:(VakKey'>0) "P101;Geen vakken vrij in nieuw bed" Quit VakKey_"\"_BedKey AlternerendLeggen() ; Parameters : PLijst, LegLijst, VakKey, Opties, BedLijst2 (optioneel) ; Opties: ; * O=GKL : GeKoppeld Leggen: roept de method %this.GekoppeldLeggen() op voor ieder vastgelegd profiel; BedLijst2 is verplicht door te geven! ; VakKey will be modified by each action Quit:($G(LegLijst)="") "1;OK" ; -no data" Quit:($LG(LegLijst)="") "1;OK" ; -no list" New i,LegDtlA,LegDtlB,LegAantA,LegAantB,LegN,msg,blnFirstP,OptiesAL Set VakKey=$G(VakKey) Set blnFirstP=(VakKey>0) Set OptiesAL=$G(Opties)_";O=AP;O=ISF" Set msg="1;OK" For i=1:2:$LL(LegLijst) Do Quit:($E(msg,1)'="1") . Set LegDtlA=$LI(LegLijst,i) ; LegDtl must be : $LB(PLIndex, LegAantal, Richting) . Set LegDtlB=$LG(LegLijst,i+1) . Set LegAantA=$S($LG(LegDtlA,1)'>0:0, 1:$LG(LegDtlA,2)) ; If PLIndex is invalid, then LegAant=0 . Set LegAantB=$S($LG(LegDtlB,1)'>0:0, 1:$LG(LegDtlB,2)) ; If PLIndex is invalid, then LegAant=0 . Do alPLIndixSwitch(.LegDtlA,.LegDtlB) ; order of execution is IMPORTANT !!! first determine LegAant, then overwrite PLIndex (if necessary) . For Quit:(LegAantA'>0)&&(LegAantB'>0) Do Quit:($E(msg,1)'="1") .. If ('blnFirstP) Do %this.EersteVrijePlaats(.VakKey) ; Eerst volgende vrije plaats .. Else Set blnFirstP=0 .. Set LegN=1 .. Set msg=%this.ProfielLeggen($G(PLijst), $LG(LegDtlA,1), .VakKey, .LegN, $LG(LegDtlA,3), OptiesAL_$S(LegAantA'>0:";O=PNV", 1:""), $G(BedLijst2)) .. Quit:($E(msg,1)'="1") .. Set:(LegN=0) LegAantA=LegAantA-1 .. Do %this.EersteVrijePlaats(.VakKey) ; Eerst volgende vrije plaats .. Set LegN=1 .. Set msg=%this.ProfielLeggen($G(PLijst), $LG(LegDtlB,1), .VakKey, .LegN, $LG(LegDtlB,3), OptiesAL_$S(LegAantB'>0:";O=PNV", 1:""), $G(BedLijst2)) .. Quit:($E(msg,1)'="1") .. Set:(LegN=0) LegAantB=LegAantB-1 Quit msg alPLIndixSwitch(LegDtlA,LegDtlB) ; Overwrite PLIndex (if necessary): copies PLIndex from the Valid LegDtl into the Invalid LegDtl Quit:($LG(LegDtlA,1)>0)&&($LG(LegDtlB,1)>0) If ($LG(LegDtlA,1)>0)&&($LG(LegDtlB,1)'>0) Set $LI(LegDtlB,1)=$LI(LegDtlA,1) Else If ($LG(LegDtlB,1)>0)&&($LG(LegDtlA,1)'>0) Set $LI(LegDtlA,1)=$LI(LegDtlB,1) Quit GekoppeldeLeggen() ; Parameters: PLijst,PLIndex,VakKey,Richting,Opties,BedLijstOrig,BedKey #define ErrP210 "P210;Profiel:Status=Finished" New PLIndex2,PLM2,emBed2,VakKey2,OptiesVL,Rsl,BedDefOrig,BedDef2 ; Overeenkomstig profiel zoeken Set PLIndex2=$P(PLijst.GekoppeldeZoeken(PLIndex),";",1) Quit:(PLIndex2'>0) "0;OK" ; Geen andere zijkant gevonden Set PLM2=PLijst.Profielen.GetAt(PLIndex2) Quit:(PLM2.Status="F")&&($G(Opties)'["O=ISF") $$$ErrP210 ; profiel reeds volledig (in aantal) geplaatst Do gklBedSynchroonBepalen Set:('emBed2) $ECode=",UGekoppeld Leggen: emBed2 niet gevonden," Quit:('emBed2) "P220;Gekoppeld Leggen: emBed2 niet gevonden" Quit:('$$gklPlaatsbaar) "0;OK" Do gklVakKeyBepalen Do gklOptiesAanpassen Set Rsl=%this.ProfielLeggen(PLijst,PLIndex2,.VakKey2,1,$G(Richting),OptiesVL) Set:($E(Rsl,1,2)="1;") VakKey=VakKey2 Quit Rsl gklBedSynchroonBepalen New iKey Set emBed2="" Set iKey="" ; Bepaal BedDefOrig en BedDef2 uit BedLijstOrig en uit %this; indien BedDef2 niet gekend, dan gelijkstellen aan BedDefOrig Set BedDefOrig=BedLijstOrig.FreesBed.GetPrevious("").BedDef Set BedDef2=$S(%this.FreesBed.Count()>0:%this.FreesBed.GetPrevious(.iKey).BedDef, 1:BedDefOrig) ;Set:('BedDef2) BedDef2=BedDefOrig ; Synchroniseren: Append Bed(den) tot iKey gelijk aan BedKey For Quit:(iKey'BedKey, dan reeds meer Bedden in %this dan in BedLijstOrig; GekoppeldLeggen() afbreken Set emBed2=%this.FreesBed.GetAt(BedKey) Quit gklPlaatsbaar() Quit (emBed2.GekoppeldActief)&&(emBed2.IsProfielPlaatsbaar(PLM2.Profiel)) gklVakKeyBepalen ; VakKey2 bepalen New Rij,blnWissel Set VakKey2=VakKey Set blnWissel=$$gklCompareProfRich(PLijst.Profielen.GetAt(PLIndex),PLM2, BedDefOrig,BedDef2) Set Rij=emBed2.GetRij(VakKey) Set VakKey2=emBed2.GetRijKolomKey($$gklWisselRij,emBed2.GetKolom(VakKey)) Quit gklWisselRij() ; Parameters: Rij,blnWissel ; Als blnWissel dan 1 <--> 2 ; 3 <--> 4 ; ... Quit:('blnWissel) Rij Quit $S(Rij#2=1:Rij+1, 1:Rij-1) gklCompareProfRich(PLM,PLM2,BedDef,BedDef2) ; Het al dan niet wisselen tussen vak1 en vak2 is afhankelijk van de richting: ; als de Richting (R=""/"I") van beide profielen gelijk is, moeten vak1 en vak2 niet gewisseld worden, anders wel. ; Hier valt nog verder over na te denken en te bespreken, a.d.h van het schematisch overzicht voor de plaatsing van profielen in de nieuwe kaliber. ; TER ILLUSTRATIE : ; Voorlopig is de koppeling enkel tussen PS?-ON en PS?-IN ; hierbij ligt PS?-ON normaal (R="") en PS?-IN ligt invers (R=I) ; dus R="" en R=I ==> vak1 en vak2 moeten gewisseld worden. ; De Richting voor het plaatsen is afhankelijk van het kaliber en de ProfielBeperking. ;Quit 1 Quit:('PLM)||('PLM2) 0 ;Quit:('PLM.Profiel)||('PLM2.Profiel) 0 New PBKey,PBKey2,Rich,Rich2 Set PBKey=BedDef.GetArrayKey(PLM.Profiel) Set PBKey2=BedDef2.GetArrayKey(PLM2.Profiel) Set Rich=BedDef.ProfSpecs.GetAt(PBKey).Richting Set Rich2=BedDef2.ProfSpecs.GetAt(PBKey2).Richting Quit Rich2'=Rich Quit 0 gklOptiesAanpassen #define REMOVE(%v1,%v2) $$REPLACE^vhRtn1(%v1,%v2,"") ; Opties aanpassen vooraleer door te geven: "O=AP", "O=PNV", "O=GKL" zijn niet mogelijk in combinatie met "O=PVL" Set OptiesVL=$G(Opties) Set:($G(Opties)'="") OptiesVL=$$$REMOVE($$$REMOVE($$$REMOVE(Opties,"O=AP"),"O=PNV"),"O=GKL") Set:(OptiesVL'[";O=PVL") OptiesVL=OptiesVL_";O=PVL" Set:(OptiesVL'[";GKV=") OptiesVL=OptiesVL_";GKV="_$G(VakKey) Quit #define ErrP001 "P001;Geen ProfielLijst" #define ErrP002 "P002;Ongeldige PLIndex" #define ErrP003 "P003;Ongeldige VakKey" #define ErrP004 "P004;Ongeldige PLIndex" #define ErrP005 "P005;Geen Profiel" #define ErrP006 "P006;Geen emBed aanwezig" #define ErrP007(%v) "P007;Ongeldige RijIndex ("_%v_")" #define ErrP008(%v) "P008;Ongeldige KolomIndex ("_%v_")" #define ErrP009 "P009;Geen emBedVak" #define ErrP010 "P010;Profiel:Status=Finished" #define ErrP011 "P011;Volgend kaliber niet aangemaakt" #define ErrU001(%v) "U001;Profiel te lang voor kaliber ("_%v_" vakken)" #define ErrU002 "U002;Vak is niet vrij" #define ErrU003(%v) "U003;Profiel te lang ("_%v_" vakken)" #define ErrU004(%v) "U004;Profiel te lang ("_%v_" vakken)" ProfielLeggen() ; Parameters: PLijst,PLIndex,VakKey,LegAantal,Richting,Opties,BedLijst2 ;BedLijst.ProfielLeggen(PLijst,PLIndex,VakKey,LegAantal,Richting,Opties,BedLijst2) ;Het leggen van profielen (van eenzelfde soort/LijstElement) gebeurt in twee fases: ; * Bij het eerste profiel worden controles uitgevoerd op de positie voor plaatsing (VakKey) ; Hierbij wordt een foutmelding teruggegeven indien het profiel niet kan geplaatst worden. ; * Bij de overige profielen wordt automatisch de volgende beschikbare plaats gezocht waar het profiel gelegd wordt ; Deze procedure blijft zich herhalen tot het volledige (=LegAantal) aantal profielen gelegd is. ; LegAantal is optioneel; indien niet doorgegeven, wordt dit gelijkgesteld aan het resterende aantal van de toelevering. ; ; Opties: ; * O=AP : Automatisch Positioneren: zoekt de eerste vrije plaats waar het profiel kan gelegd worden ; * O=ISF : Ignore Status Finish: negeert volgende instructie: >>Quit:(PLElem.Status="F") $$$ErrP010 ; * O=PNV : Profiel Niet Vastleggen: de exacte/correcte plaatsbepaling wordt uitgevoerd, maar het profiel wordt NIET effectief gelegd. ; * O=PVL : Profiel Vrij Leggen: d.i. profiel NIET sequentieel leggen (maar WEL in het laatste bed); VakKey is verplicht door te geven! ; Opties "O=AP", "O=PNV", "O=GKL" zijn niet mogelijk in combinatie met "O=PVL"! ; * O=GKL : GeKoppeld Leggen: method %this.GekoppeldLeggen() wordt opgeroepen voor ieder vastgelegd profiel; BedLijst2 is verplicht door te geven! ; * GKV=? : GeKoppeld Vak=?(VakKey): Vak.Gekoppeld = de waarde van het vraagteken (positief getal of "") ; Temporary justification of Opties (dd. 25/01/02): If $G(Opties)["AP" Set Opties=Opties_";O=AP" ; since this is only temporary, it's allowed for "AP" to occur twice Quit:($G(LegAantal)="0") "1;OK" Quit:('$G(PLijst)) $$$ErrP001 Quit:($G(PLIndex)'>0) $$$ErrP002 Quit:($G(Opties)["O=PVL")&&(($G(VakKey)="")||($G(BedKey)'>0)) $$$ErrP003 Set:($G(Opties)["O=AP")&&($G(VakKey)="") VakKey=101 Quit:($G(VakKey)="") $$$ErrP003 If $G(Opties)["O=PVL" Do . If Opties["O=AP" Set Opties=$$REPLACE^vhRtn1(Opties,"O=AP","") . If Opties["O=PNV" Set Opties=$$REPLACE^vhRtn1(Opties,"O=PNV","") . If Opties["O=GKL" Set Opties=$$REPLACE^vhRtn1(Opties,"O=GKL","") New PLElem,emProf,MaxLegAantal,emBed,BedKey,VakRij,VakKol,ProfVakken,PMaxVak New msg Set msg="" ; Profiel bepalen Set PLElem=PLijst.Profielen.GetAt(PLIndex) Quit:('PLElem) $$$ErrP004 Quit:(PLElem.Status="F")&&($G(Opties)'["O=ISF") $$$ErrP010 Set emProf=PLElem.Profiel Quit:('emProf) $$$ErrP005 ; emBed bepalen Set BedKey="" Set emBed=%this.FreesBed.GetPrevious(.BedKey) Quit:(BedKey="") $$$ErrP006 ; Andere initialisaties ;Set:($G(Opties)["O=PVL") LegAantal=1 ; this line is no longer necessary since the Quit:("O=PVL") after prlEersteProfLeggen() Set:($G(LegAantal)'>0) LegAantal=PLElem.AantalToelev-PLElem.AantalGelegd Quit:($G(LegAantal)="0") "1;OK" Set Richting=$G(Richting,"") Set ProfVakken=emBed.BedDef.VakAantal(emProf.Lengte) Quit:(ProfVakken>emBed.MaxKolom()) $$$ErrU001(ProfVakken) ; Eerste van LegAantal profielen leggen Set msg=$$prlEersteProfLeggen() Quit:(msg'="")&&($G(Opties)'["O=AP") msg ; msg<>"" ==> foutmelding, behalve als "Automatisch Positioneren" ! Quit:($G(Opties)["O=PVL") "1;OK" ; Profiel Vrij Leggen stopt steeds na EersteProfLeggen. msg="" ==> Quit "1;OK" (want "O=AP" is niet mogelijk) ; Volgende van LegAantal profielen leggen; herhalen tot LegAantal=0 For Quit:(LegAantal'>0) Do Quit:(msg'="") . Set msg=$$prlVolgendeProfLeggen() Quit:(msg'="") msg ; msg<>"" ==> foutmelding Quit "1;OK" prlEersteProfLeggen() New emVak,msg ; Analyseren van VakKey Set VakRij=emBed.GetRij(VakKey) Set VakKol=emBed.GetKolom(VakKey) Set PMaxVak=0 Quit:(VakRij>emBed.MaxRij())||(VakRij<1) $$$ErrP007(VakRij) Quit:(VakKol>emBed.MaxKolom())||(VakKol<1) $$$ErrP008(VakKol) Set emVak=emBed.Vakken.GetAt(VakKey) ;emBed.GetRijKolomKey(VakRij,VakKol) Quit:('emVak) $$$ErrP009 Set msg=$$prlControlesBezetCode ; (emBed,VakRij,VakKol,ProfVakken) Quit:(msg'="") msg ; msg<>"" ==> foutmelding Quit:($$prlNIETVastLeggen) "" ; If $G(Opties)["O=PNV" ==> Profiel Niet Vastleggen + Quit ; Else Profiel kan gelegd worden. Do prlProfVastLeggen(emBed,VakRij,VakKol,ProfVakken,Richting) Do prlSetProfsGelegd(.LegAantal,1) Do prlRecalcAutoBelet(emBed,VakRij,VakKol,ProfVakken,.PMaxVak) ;Do:($G(Opties)'["O=PVL") prlAutoBeletPrevious(emBed,VakRij,VakKol) ; als Profiel Vrij Leggen = Niet-sequentiële werkwijze. Do:($G(Opties)'["O=PVL") emBed.AutoBeletPrevious("PROF",,VakRij,VakKol) ; als Profiel Vrij Leggen = Niet-sequentiële werkwijze. Quit "" prlVolgendeProfLeggen() ; Zoek volgende beschikbare emVak New ErrBZC,CurKol,msg Set msg="" Set ErrBZC="U" For Quit:($E(ErrBZC,1,1)'="U") Do Quit:(msg'="") . Set CurKol=VakKol . Do emBed.NextVak(,.VakRij,.VakKol) . Set:(VakKol'=CurKol) PMaxVak=0 ; PMaxVak is bepaald door langste profiel in deze nieuwe kolom; is 0 vanwege sequentiële werkwijze. . If (VakRij<1)&&(VakKol<1) Do .. Set msg=$$prlDetermineNewBed ; (.emBed,.BedKey,.VakRij,.VakKol) ; Einde van het bed was bereikt; begin op volgende bed: . Quit:(msg'="") ; Niet verdergaan, want Rij-Kolom zijn ongeldig . Set ErrBZC=$$prlControlesBezetCode ; (emBed,VakRij,VakKol,ProfVakken) Quit:(msg'="") msg Quit:(ErrBZC'="") ErrBZC Quit:($$prlNIETVastLeggen) "" ; If $G(Opties)["O=PNV" ==> Profiel Niet Vastleggen + Quit ; Else Volgende profiel kan gelegd worden. Do prlProfVastLeggen(emBed,VakRij,VakKol,ProfVakken,Richting) Do prlSetProfsGelegd(.LegAantal,1) Do prlRecalcAutoBelet(emBed,VakRij,VakKol,ProfVakken,.PMaxVak) ;Do prlAutoBeletPrevious(emBed,VakRij,VakKol) Do emBed.AutoBeletPrevious("PROF",,VakRij,VakKol) Quit "" prlDetermineNewBed() ;(emBed,BedKey,VakRij,VakKol) New emBedPrev,Result ;Quit:(emBed.IsLeeg()) $$$ErrP011 If 'emBed.IsLeeg() Do . ; Nieuw bed toevoegen . Set BedKey=%this.AppendBed(emBed.BedDef,1) ; Overwrite BedKey with new key . Set emBed=%this.FreesBed.GetAt(BedKey) ; Overwrite emBed with new emBed Set VakRij=1 Set VakKol=1 Quit "" prlControlesBezetCode() ; (emBed,VakRij,VakKol,ProfVakken) ; Controleer BezetCode(s) New i,blnVrij Quit:(emBed.Vakken.GetAt(emBed.GetRijKolomKey(VakRij,VakKol)).BezetCode'="V") $$$ErrU002 Quit:(VakKol+ProfVakken-1>emBed.MaxKolom()) $$$ErrU003(ProfVakken) Set blnVrij=1 For i=1:1:ProfVakken-1 Do . Set:("V;A"'[emBed.Vakken.GetAt(emBed.GetRijKolomKey(VakRij,VakKol+i)).BezetCode) blnVrij=0 Quit:(blnVrij=0) $$$ErrU004(ProfVakken) Quit "" prlNIETVastLeggen() Quit:($G(Opties)'["O=PNV") 0 ; Return False ; Else Profiel Niet Vastleggen Set VakKey=emBed.GetRijKolomKey(VakRij,VakKol) Set LegAantal=LegAantal-1 Quit 1 ; Return True prlProfVastLeggen(emBed,VakRij,VakKol,ProfVakken,UserRichting) ; Profiel in Vak leggen New emVak,i,Rsl,VakKeyGKL Set VakKey=emBed.GetRijKolomKey(VakRij,VakKol) Set emVak=emBed.Vakken.GetAt(VakKey) Do emVak.Invullen(emProf,PLIndex,"P",PLElem.Toelevering) ;,emBed.VakRichtingCalc(pVakKey,UserRichting)) ; Boeken op "Profiel" For i=1:1:ProfVakken-1 Do . Do emBed.Vakken.GetAt(emBed.GetRijKolomKey(VakRij,VakKol+i)).Invullen("",PLIndex,"L","","") ; Boeken op "verLengd" Do emBed.SetProfielBeperking() Set emVak.Richting=emBed.VakRichtingCalc(VakKey,UserRichting) ; Richting can be determined only after "emBed.SetProfielBeperking" ; Wijzigingen aanduiden in UpdateArray Do PLijst.UpdateArraySet("PL"_(+PLijst),PLIndex,1) Do PLijst.UpdateArraySet("BL"_(+%this),,1) Set:($G(Opties)'["GKV=") emBed.GekoppeldActief=0 ; Gekoppeld Leggen is tweedelig: i.e. koppeling tussen de twee vakken/profielElementen If ($G(Opties)["O=GKL")&&($G(BedLijst2)) Do . ; Vanuit het oorspronkelijke profiel het gekoppelde leggen, en bij positief resultaat de gekoppelde VakKey invullen . Set VakKeyGKL=VakKey . Set Rsl=BedLijst2.GekoppeldeLeggen(PLijst,PLIndex,.VakKeyGKL,Richting,$G(Opties),%this,BedKey) ; VakKeyGKL wordt de VakKey van het gekoppelde profiel . Set:($E(Rsl,1,2)="1;") emVak.Gekoppeld=VakKeyGKL Else If $G(Opties)["GKV=" Do . ; Gekoppelde: wanneer ProfielLeggen() wordt opgeroepen via BedLijst2.GekoppeldeLeggen(): . Set emVak.Gekoppeld=$S(+$P(Opties,"GKV=",2)'>0:"", 1:+$P(Opties,"GKV=",2)) ; achter "GKV=" staat de VakKey v/h oorspronkelijke profiel . Set emBed.GekoppeldActief=1 Quit prlSetProfsGelegd(LegAantal,N) #define MIN(%v1,%v2) $S(%v1<%v2:%v1, 1:%v2) ; LegAantal should be passed by REFERENCE Set LegAantal=LegAantal-N If PLElem.Status'="I" Do . Set PLElem.AantalGelegd=$$$MIN(PLElem.AantalGelegd+N,PLElem.AantalToelev) . Set:(PLElem.AantalGelegd'PMaxVak) ; Else: ProfVakken > PMaxVak Set PMaxVak=ProfVakken Quit:(PMaxVak<2) For Rij=1:1:emBed.MaxRij() Do . For i=VakKol+1:1:VakKol+PMaxVak-1 Do .. Set emVak=emBed.Vakken.GetAt(emBed.GetRijKolomKey(Rij,i)) .. Set:(emVak.BezetCode="V") emVak.BezetCode="A" ; AutoBelet, i.e. Niet-Positioneerbaar Quit OLDprlAutoBeletPreviousOLD(emBed,VakRij,VakKol) ; Wordt ook opgeroepen vanuit emBed.BeletTotEinde() ; Alle vorige Vrije plaatsen op AutoBelet zetten; dit vanwege de sequentiële werkwijze. ; [Simple&Stupid methode] Alle voorgaande vakken achterwaarts doorlopen, totdat "P"rofiel gevonden is. New PrevVakKey,emVakPrev Set PrevVakKey=emBed.GetRijKolomKey(VakRij,VakKol) Set:(PrevVakKey'>0) PrevVakKey="" For Do emBed.PreviousVak(.PrevVakKey) Quit:(PrevVakKey'>0) Set emVakPrev=emBed.Vakken.GetAt(PrevVakKey) Quit:(emVakPrev.BezetCode="P") Do . Set:(emVakPrev.BezetCode="V") emVakPrev.BezetCode="A" Quit