-- .Models.Demand.ReleaseOrderMth is local i,j,k, number : integer; releaseOrder : table[integer,integer,integer,integer,integer]; mu, buffer, drain : object; part : String; moved : boolean; do print " ReleaseOrderMth called at : ",EventController.simTime; k := (counterDemand \\ 10) + 1; -- Modulo Operation, so that the Table loops every 10 days. releaseOrder.create; FOR i := 1 TO demandTbl.xDim LOOP releaseOrder[i,1] := demandTbl[i,k] + remainderTbl[i,1]; -- demandTbl[i,k] enthält die Anzahl der -- Produkte i für Tag k. remainderTbl enthält die Reste vom Vortag. NEXT; print "Todays order is Part_A : ", releaseOrder[1,1], " Part_B : ", releaseOrder[2,1]; remainderTbl.delete; FOR j := 1 TO releaseOrder.xDim LOOP -- Loop through the releaseOrder Table. part := demandTbl[j,0]; -- zum Beispiel "Part_A" number := releaseOrder[j,1]; -- zum Beispiel 100 buffer := predBufferTbl[1,part]; -- der Pfad zum Puffer aus dem entnommen werden soll. Der Puffer befindet sich in einem -- anderen Netzwerk. Es handelt sich um einen Puffer mit Bearb.Zeit 0 drain := predBufferTbl[2, part]; -- der Pfad zur Senke wo die BEs versenkt werden sollen. Im gleichen Netzwerk FOR i := 1 TO number LOOP IF buffer.Mu(i) /= VOID -- Returns VOID if the Buffer is empty. THEN mu := buffer.Mu(i); -- funktioniert komischerweise nur mit "i". Wenn "1" dann kann in der nächsten Zeile nicht moved := mu.move(drain); -- umgelagert werden. "moved" bleibt auf "FALSE". ELSE remainderTable[part,1] := releaseOrder[j,1]-i+1; print buffer, " is empty! ", i-1," MUs moved. ", remainderTable[part,1]," MUs remaining"; EXITLOOP; -- of FOR i END; -- of IF NEXT; -- of FOR i NEXT; -- of FOR j counterDemand := counterDemand + 1; --Produce; end;