Lade...
 

CX_BILL_OF_MATERIAL::ResolveNew

CX_BILL_OF_MATERIAL::ResolveNew

Beschreibung:

Diese Funktion wird von CX_SET_ALLOCATION::ResolveNew() ohne Änderungen geerbt. Sie wird hier jedoch speziell im Hinblick auf die Problemstellungen beim Auflösen von Stücklisten beschrieben (s.a. Struktur der aufgelösten Stückliste):

1. Hierarchische Verarbeitung der Mengen

Im folgenden Beispiel geht es um die Stückliste für ein Teil A, welches selbst aus dem Teil A' und dieses wiederum aus dem Teil A'' besteht. Es sollen die Mengen auf allen Ebenen der aufgelösten Stückliste betrachtet werden:

Jede aufgelöste Stücklistenposition (CX_ALLOCATION_TXN) hat ein Feld amount und ein Feld baseAmount. Die Funktion  CX_ALLOCATION_AMOUNT::Amount() addiert beide Felder zur Ermittlung der Gesamtmenge einer Stücklistenposition auf.

Das Feld CX_ALLOCATION_TXN::amount wird als CX_PRODUCT_AMOUNT angelegt: Als erstes Element dieses CX_PRODUCT_AMOUNT Vektors wird ein CX_SUM_AMOUNT Objekt eingefügt, das selber wieder als erstes Element aus dem amount Feld der vorherigen aufgelösten Stücklistenposition besteht und als zweitem Element aus dem baseAmount Feld der vorherigen aufgelösten Stücklistenposition.

Das zweite Element des CX_ALLOCATION_TXN::amount Vektors ist das amount Feld der gerade aufzulösenden Stücklistenposition.

 

2. Verarbeitung des allokierten Objektes

Eine Allokation - in diesem Fall eine Stücklistenposition - beschreibt eine Zuordnung zwischen einem Objekt - hier ein Teil - und einer Menge. 

Ist in der Stammstückliste an einer Position kein Objekt referenziert, so wird dies Position beim Auflösen weggelassen. Das gleiche gilt für den Fall, dass die Mengen in der Stammstücklistenposition Null sind und in der Stücklistenposition die Kennung "Position weglassen falls Menge Null" gesetzt worden ist.

Je nach Modus (s.unten) wird dann die Referenz auf das Objekt aus der Stamm-Stücklistenposition in die aufgelöste Stücklistenposition kopiert oder nicht. Ist der Modus so eingestellt, dass das Objekt kopiert werden soll (Bit(1) ist an), so findet folgende Gültigkeitsüberprüfung statt:

  1. Ist das Objekt zum Zeitpunkt des Auflösens der Stückliste gültig, wird diese Referenz übernommen
  2. Ist das Objekt zum Zeitpunkt des Auflösens der Stückliste nicht gültig, wird zunächst diese Referenz übernommen, es wird jedoch gleich anschließend überprüft, ob das ungültige Objekt auf ein anderes gültiges Austauschobjekt verweist: Ist dieses der Fall, wird die Referenz auf dieses nun gültige Objekt übernommen. Diese Verfahrensweise kann also dazu führen, dass ungültige Objekte ohne gültiges Austauschobjekt in die aufgelöste Stückliste übernommen werden.

 

Code-Beispiel:
Var(resolveType, allocationTxn, allocation, boolean, container) // Verarbeitung der angemeldeten und gesendeten Nachricht Msg(ORDER_ALLOCATION_INSERTED) ORDER_ALLOCATION_INSERTED: -> boolean -> container -> allocationTxn allocationTxn Get(allocation) -> allocation // Check if allocated object is only pattern allocation Get(object) -> originallyAllocatedObject originallyAllocatedObject Dup if { Call(Item) Dup -> resultingAllocatedObject originallyAllocatedObject @ ifnot { resultingAllocatedObject allocationTxn SetReference(object, allocations) } "Item().ProductAllocation(resolveType,0)" container Put(accessPath) TRUE boolean Put } DropAll FinishInput // Typ der aufzulösenden Allokation definieren "CX_BILL_OF_MATERIAL" -> resolveType // Holen Objekt vom Typ CX_SET_ALLOCATION (hier abgeleitete Klasse CX_BILL_OF_MATERIAL = Stückliste) "123456" "uniqueID = %s" FindFirst(CX_BILL_OF_MATERIAL)-> allocation // Ziel Transaktion generieren CreatePersObject(CX_ALLOCATION_TXN) -> allocationTXN // Set pre message (ORDER_ALLOCATION_INSERTED) allocation Call(SetPreMessage) // Set plug space // allocationTxn must be inserted in order to be able to call // functions Allocation, AllocationAmount, Object and ObjectAmount. // If depth is bigger than 1, then this should be not necessary // but thus it is more general [ allocationTxn /* und weitere Objekte */ ] # Revert PlugSpace // Stack belegen NULL // Faktor allocationTxn // Ziel Objekt vom Typ CX_ALLOCATION_TXN "Item().ProductAllocation(resolveType,0)" // Auflösungspfad 0 // Modus (Bitmuster) allocation // Allokationsobjekt // Funktion aufrufen Call(ResolveNew)
Stack
Stack Position Objekttyp Kurzbeschreibung
Stack(In) Top CX_ALLOCATION Aufzulösende Allokation
  Top-1 INTEGER

Modus

Bit[0]=0:
Beginne beim ersten Element in der Tabelle allocations und gehe bis ans Ende der Tabelle
Bit[0]=1:
Beginne beim letzten Element in der Tabelle allocations und gehe bis an den Anfang der Tabelle
Bit[1]=0:
Die Referenz auf das Objekt wird aus CX_SINGLE_ALLOCATION::object in CX_ALLOCATION_TXN::object nicht übernommen
Bit[1]=1:
Die Referenz auf das Objekt wird aus dem CX_SINGLE_ALLOCATION::object in CX_ALLOCATION_TXN::object übernommen
  Top-2 STRING Auflösungspfad
  Top-3 CX_ALLOCATION_TXN Ziel Transaktionsobjekt
  Top-4 CX_VALUE Faktor
Funktionsaufruf: Call(ResolveNew)