Voegt waar nodig een ecopack pick item tussen, afhankelijk van de capaciteit van de ecopack en het aantal slots dat de vorige pick items innemen. Vult ook het aantal slots in dat in de ecopack moet vrijblijven (SlotsLeeg). Speciale handling is nodig omdat we bij het hernemen van een gedeeltelijk gepickte sequentie soms met een nieuwe ecopack willen beginnen. Dit kan een willekeurig aantal keer gebeurd zijn in het verleden. Bij het hernemen moeten we terug in sync geraken met de situatie zoals ze was. We kiezen ervoor om niet de hele historiek bij te houden van waar er allemaal ecopacks werden tussengevoegd. Vermits we toch nooit teruggaan naar eerder gepickte items van voor de meest recente ecopack, is deze historiek niet belangrijk. Om terug in sync te geraken gebruiken we een parameter LastPositie. LastPositie Dit is de positie in de input lijst van het eerste PickItem dat in een ecopack moet zitten. Als we deze sequentie voor de eerste keer opbouwen moet LastPositie = 1. Als we een gedeeltelijk gepickte sequentie hernemen moet LastPositie de positie zijn van het eerste item dat in de meest recente ecopack zat. Het is dan een soort checkpoint dat aangeeft waar de meest recente ecopack zat. Het is uiteraard belangrijk dat een gebruiker van deze klasse LastPositie juist kan bepalen. We refereren naar de positie in de input lijst, waarmee we bedoelen de lijst van alle effectief te picken items (ruggen, zijkanten, exoten en eventueel later nog toegevoegde soorten items). Als de gebruiker dus het aantal effectief gepickte items telt, dan kan LastPositie bepaald worden. Pseudo-code: Initialisatie: Set ItemsPicked = 0 of haal uit gepersisteerde state Set LastPositie = 1 of haal uit gepersisteerde state Ecopack picking bevestigd: Set LastPositie = ItemsPicked + 1 Picking bevestigd: Set ItemsPicked = ItemsPicked + PickItem.Aantal Deze klasse veronderstelt dat alle PickItems met Aantal = 1 binnenkomen. Een AccumulatieProcessor moet dus NA de EcopackProcessor komen. 1 APPS.P2L.Core.PickSequence.PickSequenceProcessor 0 15 %Integer 1 1 %Integer 1 1 %Boolean 1 1 Ecopack 1 1 %Integer 1 Ecopack 1 LastPositie:%Integer %Status Zijkant:APPS.P2L.Core.PickSequence.Zijkant 1 %Status ..#SLOTS) { // Als de twee zijkanten er niet meer inkunnen, neem // dan een nieuwe ecopack Do ..NieuweEcopack() } } // Zet zowel de linkse als de rechtse zijkant in de huidige ecopack Do ..ZetInHuidigeEcopack(Zijkant) Set ..Rechts = ' ..Rechts Quit $$$OK ]]> Ecopack:APPS.P2L.Core.PickSequence.Ecopack %Status Rug:APPS.P2L.Core.PickSequence.Rug %Status ..#SLOTS) { Do ..NieuweEcopack() } // Zet de rug bij in huidige ecopack Do ..ZetInHuidigeEcopack(Rug) ]]> Zijkant:APPS.P2L.Core.PickSequence.Zijkant %Status Exoot:APPS.P2L.Core.PickSequence.ZijkantExoot %Status 1 PickItem:PickItem 1 ..#SLOTS) { ZTrap "PRE" } // Preconditie: er moet een huidige ecopack zijn // Dit testen we niet expliciet, je zal toch een OREF krijgen Set ..Aantal = ..Aantal + Slots Set ..HuidigeEcopack.SlotsLeeg = ..HuidigeEcopack.SlotsLeeg - Slots Do ..ResultaatLijst.Insert(PickItem) ]]> 1