Index: FLOWTOE6.mac.rou =================================================================== diff -u -r948 -r1024 --- FLOWTOE6.mac.rou (.../FLOWTOE6.mac.rou) (revision 948) +++ FLOWTOE6.mac.rou (.../FLOWTOE6.mac.rou) (revision 1024) @@ -1,6 +1,7 @@ + #Include BL.Derde.LevSpecifiek FLOWTOE6 ;Toelevering [ 07/10/2002 4:36 PM ] ; -BACKORD(LEVNr,TOENr,TLNr,BOQty,RestQty,LevWk) +BACKORD(LEVNr,TOENr,TLNr,BOQty,RestQty,LevWk,ReturnLocal) ; RestQty is optioneel New R,ModAant,Aantal,TLUNr,KLNr,ORDNr,OLNr,ModOLNr,OLUNr,ModTLNr,SwapFrom,SwapTo Set ModAant=$G(RestQty),LevWk=$G(LevWk),ModTLNr=TLNr @@ -30,12 +31,12 @@ ..Quit:SwapTo'>ModOLNr ..Do LSWAP^FLOWORD2(ORDNr,SwapFrom,SwapTo,1) ..Set SwapFrom=SwapTo - Set SwapFrom=TLNr + Set (SwapFrom,ReturnLocal("NewTLNr"))=TLNr For Do Quit:SwapTo'>ModTLNr .Set SwapTo=$O(^KTO(LEVNr,TOENr,SwapFrom),-1) .Quit:SwapTo'>ModTLNr .Do LSWAP^FLOWTOE2(TOENr,SwapFrom,SwapTo) - .Set SwapFrom=SwapTo + .Set (SwapFrom,ReturnLocal("NewTLNr"))=SwapTo Do MODAANT(LEVNr,TOENr,ModTLNr,ModAant) Quit ; @@ -92,16 +93,16 @@ .Do MODLEVWK^FLOWORD6(,ORDNr,OLNr,LevWk) Quit ; -SPLITTLN(LEVNr,TOENr,TLNr,Aantal,LevWk) +SPLITTLN(LEVNr,TOENr,TLNr,Aantal,LevWk,ReturnLocal) New I,R,ORDNr,OLNr,KLNr,PakFact Set LevWk=$G(LevWk) If '$G(LEVNr) Set R=^KTO1(TOENr),LEVNr=$P(R,D) Set R=^KTO(LEVNr,TOENr,TLNr),ORDNr=$P(R,D,27),OLNr=$P(R,D,28) If ORDNr Do .Set R=^KO1(ORDNr,"F"),KLNr=$P(R,D),R=^KOD(KLNr,"F",ORDNr,OLNr),PakFact=$P(R,D,36) .Set:PakFact Aantal=Aantal\PakFact - .Do SPLITOLN^FLOWORD6(,ORDNr,OLNr,Aantal,LevWk) - Else Do BACKORD(LEVNr,TOENr,TLNr,Aantal,,LevWk) + .Do SPLITOLN^FLOWORD6(,ORDNr,OLNr,Aantal,LevWk,,.ReturnLocal) + Else Do BACKORD(LEVNr,TOENr,TLNr,Aantal,,LevWk,.ReturnLocal) Quit ; ; Oude toelevering tijdelijk opslaan voor later nazicht @@ -190,6 +191,56 @@ Kill ^DEVSAVE($I,"ALLTOE") Quit ; + ; Afsplitsen van een aantal van een toeleveringslijn via het uniek lijnnummer + ; Het aantal is het aantal wat in in de originele lijn moet blijven +SplitsLijn(TOENr,TLUNr,Aantal) + New LEVNr,ReturnLocal,TLNr,NewTLNr,NewTLUNr + Set LEVNr=$P(^KTO1(TOENr),D),TLNr=^TO("IU",TOENr,TLUNr) + Set AantalInOrigineel = $P(^KTO(LEVNr,TOENr,TLNr),D,3) + If (Aantal '< AantalInOrigineel) + { + Set Exceptie = ##class(TECH.Exceptions.BaseException).%New(##class(TECH.enu.ExceptionCode).InvalidInput(),"Aantal is groter dan het aantal in de lijn") + Do ##class(TECH.ExceptionHandler).Throw(Exceptie) + } + If '$$CheckOLUNr(TOENr,TLNr) + { + Set Exceptie = ##class(TECH.Exceptions.BaseException).%New(##class(TECH.enu.ExceptionCode).InvalidInput(),"De lijn is kan niet meer opgedeeld worden") + Do ##class(TECH.ExceptionHandler).Throw(Exceptie) + } + Set Aantal=AantalInOrigineel-Aantal ; Aantal bepalen wat in de originele lijn moet blijven omdat SPLITTLN omgekeerd werkt + Do SPLITTLN(LEVNr,TOENr,TLNr,Aantal,,.ReturnLocal) + Set NewTLNr=$G(ReturnLocal("NewTLNr")) + Set:NewTLNr NewTLUNr=$P(^KTO(LEVNr,TOENr,NewTLNr),D,15) + Quit $G(NewTLUNr) + ; + ; Copieeren van een aantal lijnen van een toeleveing naar een nieuwe toelevering. + ; AfTeSplitsenLijnen zijn TLUNrs (unieke nummers) +SplitsToelevering(TOENr,AfTeSplitsenLijnen) + New LEVNr,ToTOENr,TLNr,TLUNr,ToTLNr,Iterator + Set LEVNr=$P(^KTO1(TOENr),D) + Set ToTOENr=$$GETNUM^FLOW("KTO","KTO1") + Set ^KTO(LEVNr,ToTOENr,1)=^KTO(LEVNr,TOENr,1),^KTO(LEVNr,ToTOENr,0)=101 + Set ^KTO1(ToTOENr)=LEVNr_D,^KTO2(LEVNr,ToTOENr)="",^KTOB(ToTOENr)=LEVNr_D + Set:LEVNr=$$$LevBlum ^BLBeri("Z",ToTOENr)=LEVNr_D + Set Iterator = ##class(TECH.ListIterator).%New(AfTeSplitsenLijnen) + While Iterator.HasNext(){ + Set TLUNr = Iterator.Next() + Set TLNr=^TO("IU",TOENr,TLUNr) + Set ToTLNr=^KTO(LEVNr,ToTOENr,0),^KTO(LEVNr,ToTOENr,0)=ToTLNr+1 + Do LMOVE^FLOWTOE3(TOENr,TLNr,ToTOENr,ToTLNr) + Set ^KTO(LEVNr,ToTOENr,4)=ToTLNr#100+1 + } + Quit ToTOENr + ; + ; Indien Kom, nazien of de orderlijn nog mag opgesplitst worden i.v.m. OLUNrs +CheckOLUNr(TOENr,TLNr) + New LEVNr,ORDNr,OLNr,OLUNr,Ok + Set Ok=1,LEVNr=$P(^KTO1(TOENr),D) + Set ORDNr=$P(^KTO(LEVNr,TOENr,TLNr),D,27) + Set OLNr=$P(^KTO(LEVNr,TOENr,TLNr),D,28) + If ORDNr,OLNr Set Ok=$$CheckOLUNr^FLOWORD6(ORDNr,OLNr) + Quit Ok + ; ; Rebuild ^KTO2 RebuildKTO2 New LEVNr,TOENr