3.56 Lagerplatz-Entnahmestrategie
EntnahmeStrategie(strTyp ,scsModus, scsTLC, scsDIS, dMengeSoll, scsLagerSoll, scsLagerPlatzSoll, scsChargeSoll, scsErr, dMengeEntnahme, scsLagerIst, scsLagerPlatzIst, scsChargeIst, dMengeEntnahmeGes, scsUnter0, scsKennLp);
|
Argumente
|
|
Input:
|
|
|
scsTyp
|
|
|
|
für spezielle Behandlung, z.B. Haenel INI-Einträge abhängig von Menü, dann Menünummer „565“.
|
|
|
“PWEP“ =
|
Kennung, dass PWEP-Strategie anzuwenden ist. Zu PWEP siehe Handbuchkapitel LPCV
|
|
|
„NoStLp“ =
|
Stammlagerplatz nicht verwenden
|
|
|
“LPGR“ =
|
nur Lagerplatzgruppe (Datei 84, Feld 4) aus „scsModus“ verwenden.
|
|
scsModus
|
|
|
|
|
für spezielle Behandlungen: Bei
|
|
|
„scsTyp = LPGR“
|
hier die zu verwendende Lagerplatzgruppe angeben.
|
|
scsTLC
|
|
|
|
|
Teilestammsatz LCV
|
|
|
Feld
|
|
|
|
1
|
- Teilenummer
|
|
|
2
|
- Chargenart (für PWEP)
|
|
|
8
|
- Entnahmestrategie (s.o.)
|
|
|
16
|
- Entnahmelager (Vorranglager)
|
|
|
17
|
- Entnahmelagerkennung
|
|
|
32
|
- PWEP aktiv?
|
|
|
33
|
- PWEP ungeprüfte Mindestmenge
|
|
scsDIS
|
|
|
|
|
Disposition der Position
|
|
|
verwendet zum Ermitteln der ungeprüften zugeordneten Menge bei PWEP-Strategie
|
|
dMengeSoll
|
|
|
|
benötigte gesamte nicht entnommene/nicht zugeordnete Menge in ME-Lager.
|
|
scsLagerSoll
|
|
|
|
Lager
|
die Entnahme muss nur von diesem Lager erfolgen und übersteuert das Entnahmelager aus dem Teilestamm
|
|
|
!:Lagerliste
|
alle Lager aus Lagerliste in der angegebenen Reihenfolge. Anschließend nicht weitersuchen. Entnahmelager aus dem Teilestamm wird nicht beachtet. Bei Angabe nur eines Lagers identisch mit „Lager“-Angabe
|
|
|
*:Lagerliste
|
alle Lager aus Lagerliste in der angegebenen Reihenfolge. Anschließend weitersuchen in aufsteigender Lagerfolge. Entnahmelager aus dem Teilestamm wird nicht beachtet.
Leer oder Leerzeichen = aus beliebigem Lager nach Entnahmestrategie ermittelt. Wenn im Teilestamm konfiguriert (ggf. laut [GENERAL], EntnLagKenn = 2), wird mit Entnahmelager aus Teilestamm angefangen
|
|
scsLagerPlatzSoll
|
|
|
|
|
Lagerplatz
|
die Entnahme muss nur von diesem Lagerplatz erfolgen, auch Stammlagerplatz ohne Bedeutung
|
|
|
*:Lagerplatz
|
alle Lagerplätze, mit diesem Lagerplatz anfangen. Danach Stammlagerplatz, danach Strategie
|
|
|
leer
|
aus beliebigem Lagerplatz, aber zuerst Stammlagerplatz
|
|
scsChargeSoll
|
|
|
|
Die Entnahme muss nur für diese Charge erfolgen, wenn leer, dann beliebige Chargen
|
|
scsUnter0 (optional)
|
|
|
|
„ " bzw. leer
|
laut Konfiguration
|
|
|
1
|
verboten
|
|
|
2
|
erlaubt
|
|
scsKennLagPlz (optional)
|
|
|
|
X
|
nur Lagerplätze mit Kennung "X" (84, 33) auswerten, z.B. Versandlagerplatz „V“.
Ggf. vorhandene INI-Einstellung MatStratGrupp = Yes muss in der IPS-Steuerdatei ausgewertet (z.B. „574-AR1.IPS“) und als Parameter hier übergeben werden.
|
|
Input über interne Variable:
|
|
|
scsIFBuchungsdatum
|
|
|
|
versorgt aus rufendem Programm
|
|
|
für Prüfung des Verfalldatums
|
|
GV_IPS_CHB_Verfall
|
|
|
|
Ok
|
Verfalldatum (88,16) nicht prüfen
|
|
GV_IPS_LPZ_NoZuord
|
|
|
|
Ok
|
„nicht autozuordnen“ (84,36) prüfen
|
|
Input und Output:
|
|
dMengeEntnahmeGes
|
|
|
Gesamte Menge seit dem 1. Aufruf in ME-Lager. Beim ersten Aufruf muss 0 übergeben werden
|
|
Output:
|
|
|
|
scsErr
|
|
|
|
Fehlerkennung (z.B. nicht gefunden wenn „ohne Strategie“, ...) wenn kein Abbruchfehler vorliegt.
|
|
dMengeEntnahme
|
|
|
|
entnehmbare Menge in ME-Lager, Menge aus Lagerplatzbestand, wenn diese Menge größer als noch benötigt (Gesamtsollmenge - gesamte Entnahmemenge), dann nur noch die benötigte Restmenge
0 = keine weitere Entnahmemöglichkeit gefunden
|
|
scsLagerIst
|
|
|
|
|
Lager für die Entnahme
|
|
|
scsLagerPlatzIst
|
|
|
|
|
Lagerplatz für die Entnahme
|
|
|
scsChargeIst
|
|
|
|
|
Charge für die Entnahme
|
|
|
dMengeEntnahmeGes
|
|
|
|
Summe der Entnahmemengen ab dem 1. Aufruf
|
|
Output über interne Variable:
|
|
scsIFZustand
|
|
|
|
versorgt aus dem gelesenem Lagerplatzbestand für die Versorgung der Lagerplatzbewegung.
Es werden nur die Lagerplatzbestände mit dem Bestandsführungskennzeichen 0 = frei laut den INI-Einträgen in der Sektion [CONDITION] entnommen. Es wird nicht abgebrochen, wenn der Zustand in Sektion [CONDITION] nicht gefunden wird (Behandlung wie Bestandsführungskennzeichen ungleich 0). Dann wird der nächste Lagerplatzbestand gesucht.
|
|
|
Rückgabewert
|
|
0
|
Alles in Ordnung, auch wenn keine Entnahmemenge zurückgegeben wird.
|
|
ungleich 0
|
nur Datenbankfehler mit entsprechender Meldung.
|
|
|
Beschreibung
|
Für ein Teil wird eine Entnahmemenge mit der Chargenbezeichnung für einen Lager und einen Lagerplatz, gemäß der Einstellung «Entnahmestrategie» im Teilestamm LCV vorgeschlagen. Bei der Auswahl „Einstellung laut INI-Eintrag“ wird laut der Sektion [GENERAL], "EntnStrategie", entnommen.
Die Verwendung der vorgeschlagenen Menge wird dann in der entsprechenden IPS-Steuerdatei ausgewertet.
Es werden nur Lagerplatzbestände mit dem Bestandsführungskennzeichen 0 laut dem Zustand der Charge. Das Bestandsführungskennzeichen wird aus den INI-Einträgen in der Sektion [CONDITION], Zustandskürzel ermittelt.
Charge (scsChargeIst), Lagerplatz (scsLagerPlatzIst), Lager (scsLagerIst) und maximale mögliche Entnahme-Menge (dMengeEntnahme) mit der gesamten Entnahme-Menge (dMengeEntnahmeGes) werden nach verschiedenen Strategien gesucht und im Erfolgsfall zurückgegeben.
„normale“ Strategie
|
I)
|
Lager bestimmen
|
|
|
1)
|
|
|
|
a)
|
aus scsLagerSoll
|
|
|
|
-
-
1-ster Lager verlangt „*:Lager“
-
leer, dann wenn EntnLagKenn == 2 Entnahmelager aus TLC (87,16)
|
|
Bei scsTyp == „PWEP“ [PWEP], "LAGNO" auswerten und ggf. nächsten Lager wie oben suchen.
|
|
b)
|
kein Lager in scsLagerSoll vorgegeben
|
|
|
|
-
dann über „normale“ Strategie aus Chargenbestand (Pfad 3, ohne Lager) ermitteln.
|
|
2)
|
weitere Aufrufe
|
|
|
Aus letztem Lagerplatzbestand. Wird über lLpbISN (Globalvariable GV_ENT_LpbISN) gelesen.
|
|
Prüfungen, Lager ist gültig wenn:
|
|
|
a)
|
Lagerstatus (24, 1) leer, „E“ bzw. „L“
|
|
|
b)
|
ggf. Bestand > 0
|
|
|
II)
|
Charge nach Strategie
|
|
|
|
Charge nach „normaler“ Strategie mit Lager suchen
|
|
|
|
-
Pfad 2 mit Teil, scsLagerSoll und Strategiefeld
-
Pfad 3 mit Teil und Strategiefeld, ohne scsLagerSoll
|
|
|
Vorwärts lesen bei Entnahmestrategie: 1, 4, 5, 6 und 8
|
|
Rückwärts lesen bei Entnahmestrategie: 2, 3, 7 und 9, Start mit Strategiefeld highvalue und ggf. 1-nen Satz zurück
|
|
1)
|
1. Aufruf (lChbISN = 0, Globalvariable GV_ENT_ChbISN).
|
|
Nur wenn noch nicht mit scsLagerSoll gefunden.
|
|
Chargenbestand nach Pfad 2 mit scsLagerSoll lesen
|
|
Beim rückwärts Lesen wenn Teil und/oder scsLagerSoll größer als Vorgabe sofort einen Satz rückwärts lesen.
|
|
2)
|
weitere Aufrufe, nächste Charge
|
|
|
Nur dann, wenn Lagerplatzbestand mit Teil und Lager schon abgearbeitet ist
|
|
Aufsetzen mit lChbISN (Globalvariable GV_ENT_ChbISN).
|
|
Nächsten/vorherigen Satz laut Entnahmestrategie lesen.
|
|
Prüfungen
|
|
Keine Prüfung auf Bestand Menge frei (88,7) - Menge zugeordnet (88,10) > 0 da auch negativ möglich.
|
|
a)
|
Teilende -> Ende
|
|
|
b)
|
Lagerende -> Ende bzw. Lagerwechsel wenn ohne scsLagerSoll
|
|
Prüfungen, Chargenbestand ist gültig wenn:
|
|
|
c)
|
Status (88,1) == „ “
|
|
|
d)
|
wenn lPWEP == 1 (nicht geprüft nehmen)
|
|
|
|
-
dann Kenneun nicht geprüft (88, 39) != „1“
-
zugeordnet wie geprüft behandeln wenn [PWEP], „ZUOgepr = Yes“ und Charge in noch keine zugeordnete Menge (88, 10) == 0
|
|
|
e)
|
wenn lPWEP == 2 (geprüft nehmen) dann Kennung geprüft (88, 39) == „1“
|
|
f)
|
wenn Verfalldatum (88, 16) dann > Tagesdatum
|
|
Wenn Chargenbestand nicht passt, dann nächsten/vorherigen Chargenbestand laut Entnahmestrategie lesen und zur Prüfung Chargenbestand.
|
|
III)
|
Lagerplatzbestand zum Chargenbestand lesen/prüfen
|
|
|
-
Pfad 1 mit Teil, scsLagerSoll, Charge und Lagerplatz
-
Pfad 3 mit Teil, scsLagerSoll, Charge, Sortfeld und Lagerplatz, [LPCV], "StratSort = Yes"
|
|
Wenn der Sort nach Strategie-Sort ([LPCV], StratSort) aktiv ist, dann Laberplatzbestand mit Sortfeld (85,17) wird aus Lagerplatz 84,5 beim Einlagern abgestellt), dann nach Pfad 3 lesen.
|
|
Stammlagerplatz aus Lager wenn da, dann zuerst verwenden
|
|
1)
|
1. Aufruf (lLpbISN = 0, Globalvariable GV_ENT_LpbISN)
|
|
2)
|
weitere Aufrufe
|
|
|
Aufsetzen mit lLpbISN (Globalvariable GV_ENT_LpbISN).
|
|
Nächsten Satz lesen.
|
|
Prüfungen
|
|
a)
|
Teilende -> nächste Charge
|
|
|
b)
|
Lagerende -> nächste Charge
|
|
|
c)
|
Chargenende -> nächste Charge
|
|
|
Prüfungen, Lagerplatzbestand ist gültig wenn:
|
|
|
c)
|
Status (85,2) == „ “
|
|
|
d)
|
Bestandsführungskennzeichen == 0, aus Zustand (85,1) über INI [CONDITION] Bestandsführungskennzeichen lesen - wenn nicht gefunden, als ob != 0, wenn 0 -> scsIFZustand
|
|
e)
|
nur wenn Buchen unter 0 verboten strUnter0: Entnahmebestand da: Menge frei (85,7) - Menge zugeordnet (85,9) > 0
|
|
Wenn Lagerplatzbestand nicht passt, dann nächsten ggf. laut Lagerplatzbestand Sortfeld lesen und zur Prüfung Lagerplatzbestand.
|
|
III)
|
Lagerplatz zum Lagerplatzbestand lesen/prüfen
|
|
|
|
Lagerplatz zum Lagerplatzbestand lesen
Lesen nach Lager, Lagerplatz
Wenn nicht vorhanden -> Fehler
Lagerplatz zum Lagerplatzbestand prüfen, gültig wenn:
|
|
a)
|
Status (84,10) == „ “
|
|
|
b)
|
laut scsKennLagPlz die Kennung (84, 33) auswerten
-
keine Kennung vorgegeben „Empty“, dann nur Kennung = „ “ oder „G“
-
Kennung „ “ (Blank), dann nur Kennung = „ “
-
Kennung != „ “, dann nur die mit der gleichen Kennung
|
|
c)
|
Lagerschnittstelle (84, 34) auswerten
|
|
|
Wenn Lagerplatz nicht passt, nächsten Lagerplatzbestand lesen und Prüfen.
Entnahmebestand gefunden:
Rückgabeparameter dMengeEntnahme, scsLagerIst, scsLagerPlatzIst, scsChargeIst, dMengeEntnahmeGes versorgen.
scsIFZustand versorgen.
Wenn nichts gefunden werden die Rückgabeparameter mit 0 (dMengeEntnahme) bzw. mit Leerzeichen (scsLagerIst, scsLagerPlatzIst, scsChargeIst) versorgt.
|
|
Ohne Strategie
|
|
|
Wenn alles angegeben ist (Lager, Platz und Charge), dann wird keine Strategie durchlaufen.
Als Ergebnis - wenn unter 0 erlaubt ist - wird ggf. der negative Lagerplatzbestand zurückgegeben.
Wenn gefunden, Versorgung wie „normale“ Strategie. Auch bei Menge 0 werden die Parameter dMengeEntnahme = 0, scsLagerIst, scsLagerPlatzIst, scsChargeIst versorgt.
Wenn nicht gefunden werden die Parameter scsLagerIst, scsLagerPlatzIst, scsChargeIst nicht versorgt.
|
|
Strategie „Versandlagerplatz“
|
|
wie „normale Strategie“ mit vorgegebenen Lager und Lagerplatz.
|
|
Strategie "Produktionswareneingangsprüfung (PWEP)" in der Fertigung
|
|
Nur [PWEP], Anteil > 0 und wenn für Teile mit Markierung «PWEP-Teil» 87,32 aktiv und LPCV (nur LPV Teile nicht).
«Mindestmenge» 87,33 aus Teilestamm wird - wenn vorhanden - berücksichtigt.
|
|
Ausnahmen:
|
|
Die Entnahme erfolgt über alle Lager mit ausnahmen der Lager laut [PWEP], "LagNo" in aufsteigender Sortierfolge der Lager:
Der Entnahmelager aus Teilestamm (87, 16) wird nicht als 1. Lager verwendet.
|
|
a)
|
ungeprüfte Menge
|
|
|
|
Zuerst ungeprüfte Menge aber nicht mehr als der Anteil laut INI-Einstellung [PWEP], „Anteil“ (in %) mit „normaler“ Strategie entnehmen.
Anfangen wird mit dem Lager aus Reservierung.
Mit der Einstellung [PWEP], „ZUOgepr = Yes" auch ungeprüfte Chargen mit bereits vorhandenen Zuordnungen ((88, 10) > 0) als geprüft betrachten und nicht verwenden
Sind zuwenig ungeprüfte Chargen vorhanden, so werden stattdessen geprüfte Chargen verwendet.
|
|
b)
|
geprüfte Menge
|
|
|
|
Die Restmenge wird aus geprüften Chargenbeständen nach „normaler“ Strategie entnommen.
Die Einstellung [PWEP], „ZUOgepr = Yes" ist wirksam.
|
|
|
Beispiel
|
………….(Auszug aus 24A-ZUO.IPS)
BufQueryStringFromField("LPB",3,strLagerSoll);
BufQueryStringFromField("LPB",4,strLagPlatzSoll);
BufQueryStringFromField("LPB",6,strChargeSoll);
BufQueryStringFromPIS
("PosWert",91,15,strZuordnungsMengeSoll);
StringToDouble(strZuordnungsMengeSoll,dMengeSoll);
AssignString(strTyp,"");
IpsSetItemParams("ENT",1);
IpsSetPreparedRcPrefixMSG("ENT");
EntnahmeStrategie(strTyp,_
strMode,_
"TLC",_
"DIS",_
dMengeSoll,_
strLagerSoll,_
strLagPlatzSoll,_
strChargeSoll,_
strErr,_
dZuordnungsMengeLpl,_
strLager,_
strLagerPlatz,_
strCharge,_
dMengeIst,_
strUnter0,_
strKennLagPl);
|

|