Ansicht
Dokumentation

MENGE_UMRECHNEN - Mengenumrechnung; --> ersetzt durch UNIT_CONVERSION

MENGE_UMRECHNEN - Mengenumrechnung; --> ersetzt durch UNIT_CONVERSION

CPI1466 during Backup   ABAP Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionsbaustein: Menge_Umrechnen.



Anwendung:

Gegeben seien zwei Mengeneinheiten (Maßeinheiten, ME) und eine Menge (Maßzahl), die sich auf eine von beiden Mengeneinheiten bezieht. Gesucht ist die Menge bezogen auf die andere ME (bzw. die zugehörigen Umrechnungsfaktoren).

Standardbeispiel 1: Umrechnung über T006

Gegeben sei eine Menge und eine ME (z.B. 23 KG). Gesucht ist die Menge in bezug auf eine beliebige andere ME, die jedoch zu derselben Dimension gehören muß, wie die Ausgangs-ME. (Umrechnungen zwischen verschiedenen Dimensionen können nur materialspezifisch durchgeführt werden.)

Aufruf:

CALL FUNCTION 'MENGE_UMRECHNEN'
EXPORTING MEINS = 'KG' "ME 1
MGLME = 23 "Menge in ME 1
MEINH = 'G' "ME 2
IMPORTING O_MGAME = f1 "Menge in ME 2

Man übergibt also beide Mengeneinheiten und die Menge bezogen auf eine ME (i.A. natürlich mit Hilfe von Programmvariablen ) und erhält die Menge zur anderen ME.

Standardbeispiel 2: Umrechnung über Materialstamm (MARM)

Gegeben sei ein Material mit Basis-ME 'ST' und einer Alternativ-ME 'KG', wobei die Umrechnung (z.B. 7 KG entspricht 3 ST) im Materialstamm (MARM-Segment) gepflegt wurde. Eine Menge in Bezug auf die Basis-ME (z.B. 33 ST) soll in die Menge bezogen auf die Alternativ-ME umgerechnet werden.

Aufruf:

CALL FUNCTION 'MENGE_UMRECHNEN'
EXPORTING MATNR = 4711 "Materialnummer
MEINS = 'ST' "Basis-ME
MGLME = 33 "Menge in Basis-ME
MEINH = 'KG' "Alternativ-ME
IMPORTING O_MGAME = f1. "Menge in Alternativ-ME

Allgemeine Beschreibung:

Eingabeparameter:

MATNR : Materialnummer, bei materialspezifischen
Umrechnungen anzugeben
MEINS : Basis-ME (früher Lager-ME) falls
materialspezifische Umrechnung,
sonst beliebige ME
MGLME : Menge zur ME in MEINS
IVLME : Indikator 'MGLME enthält einen Wert'
(der auch '0' sein kann)
MEINH : Alternativ-ME bzw. beliebige ME
MGAME : Menge zur ME in MEINH
IVAME : Indikator 'MGAME enthält einen Wert'
UMREZ : Zähler des Umrechnungsfaktors
(nur falls direkte Vorgabe gewünscht)
UMREN : Nenner des Umrechnungsfaktors
UMREE : 10er-Exponent des Umrechnungsfaktors
UMREA : Additive Konstante zur Umrechnung
KRUND : Kennzeichen 'Rundung durchführen'
ANDEC : Dezimalstelle, auf der gerundet werden soll

Ausgabeparameter:

O_MEINS: Basis-ME bzw. beliebige ME
O_MGLME: Menge zur ME in MEINS, wird berechnet
falls MGLME keinen Wert enthält
O_IVLME: Indikator 'O_MGLME enthält einen Wert'
O_MEINH: Alternativ-ME bzw. beliebige ME
O_MGAME: Menge zur ME in MEINH, wird berechnet
falls MGAME keinen Wert enthält
O_IVAME: Indikator 'O_MGAME enthält einen Wert'
O_UMREZ: Zähler des Umrechnungsfaktors
O_UMREN: Nenner des Umrechnungsfaktors
O_UMREA: Additive Konstante zur Umrechnung

Es gelten folgende Regeln :

  • Es muß mindestens eine ME (MEINS, MEINH) oder eine Material-Nr. (MATNR) angegeben werden (oder die Umrechnungsfaktoren direkt: mindestens UMREZ), sonst macht der Baustein nichts.
  • Ist eine Materialnummer angegeben, so wird NICHT geprüft, ob die unter MEINS angegebene ME tatsächlich die Basis-ME im Materialstamm ist (dadurch wird ein Datenbankzugriff gespart). Nur wenn MATNR gefüllt ist und MEINS initial, so wird der Materialstamm (MARA) gelesen, um MEINS zu ermitteln. Kann das MARA-Segment nicht gefunden werden, so wird die Ausnahme 'CONVERSION_NOT_FOUND' gesetzt.
  • Ist nur eine ME bekannt, so wird als zweite ME die SI-Einheit gesetzt. Dadurch kann z.B. folgende Frage beantwortet werden: 'Wie heißt die zugehörige SI-Einheit zu einer gegebenen ME?'
  • Sind beide Mengeneinheiten bekannt und keine Material-Nr. angegeben, so wird geprüft, ob die beiden Mengeneinheiten zu derselben Dimension (T006D) gehören und gegebenenfalls die Ausnahme 'DIFFERENT_DIMENSION' gesetzt. Damit kann auch die folgende Frage beantwortet werden: 'Gehören zwei gegebene Mengeneinheiten zu derselben Dimension?'
  • Prioritätsfolge bei der Bestimmung der Umrechnungsfaktoren:

    - Umrechnungsfaktoren direkt vorgeben? (UMREZ NE 0)
    --> Umrechnungsfaktoren direkt übernehmen,
    kein Datenbankzugriff.

    - Mengeneinheiten gleich? (MEINS = MEINH),
    --> Umrechnung trivial, kein Datenbankzugriff
    (O_UMREZ = O_UMREN = 1 und O_UMREA = 0).

    - Material-Nr. angegeben? (MATNR NE SPACE)
    --> Umrechnung direkt über MARM versuchen,
    ein Datenbankzugriff (MARM).

    - MEINS und MEINH in derselben Dimension?
    --> Umrechnung über T006,
    zwei Datenbankzugriffe (T006).

    - MEINS und MEINH haben unterschiedliche Dimension
    aber Material-Nr. angegeben
    --> Umrechnung durch Kombination von MARM und T006.
    Falls kein MARM-Segment in der benötigten
    Dimension gefunden werden kann, wird die
    Ausnahme 'CONVERSION_NOT_FOUND' gesetzt.
    Mehrere Datenbankzugriffe (MARM und T006).
  • Ist eine Material-Nr. angegeben, so werden Umrechnungen zwischen dimensionslosen Einheiten aus Sicherheitsgründen nicht über T006 durchgeführt. Derartige Umrechnungen müssen also direkt in den MARM-Segmenten gepflegt sein. Andernfalls wird die Ausnahme 'CONVERSION_NOT_FOUND' gesetzt. Standardbeispiel: 1 Kiste = 12 Stück
  • Enthält nur MGLME einen Wert, so wird MGAME errechnet und umgekehrt. Enthalten beide Felder oder keines der Felder einen Wert, so werden nur die Umrechnungsfaktoren bestimmt. Es wird dann keine Menge berechnet. Sind also nur die Umrechnungsfaktoren von Interesse, so sollte keine Dummy-Menge mitgegeben werden.
  • Ist das Kennzeichen KRUND gesetzt (KRUND NE SPACE), so wird die berechnete Menge entsprechend der vereinbarten Anzahl von Dezimalstellen (Parameter ANDEC, sonst Feld T006-ANDEC zur zugehörigen ME) gerundet. Dabei kann auch auf Vorkommastellen gerundet werden (ANDEC < 0)! Es gilt:

    - KRUND = '-' --> abrunden

    - KRUND = 'X' oder anderes Zeichen --> kaufmännisch

    - KRUND = '+' --> aufrunden

Technische Hinweise:

  • Den Mengenfeldern (MGLME, MGAME, O_MGLME, O_MGAME) können im aufrufenden Programm sowohl Gleitkommafelder als auch gepackte Felder zugewiesen werden. Im Falle von gepackten Feldern werden die Dezimalstellen feldweise berücksichtigt und bei Feldüberlauf die Ausnahme 'OVERFLOW' gesetzt.
  • Da z.Zt. weder Gleitkommafelder noch gepackte Felder die '0' als Wert abbilden können (0 = initial), stehen entsprechende Indikatoren zur Verfügung (IVLME, IVAME, O_IVLME, O_IVAME). Damit kann auch folgende Umrechnung durchgeführt werden:

    0 Grad Celsius = 32 Grad Fahrenheit
  • Feldformate bei direkter Vorgabe der Umrechnungsfaktoren:

    Der Umrechnungsfaktor kann (in Zähler UMREZ, Nenner UMREN und 10er-Exponent UMREE aufgelöst) in Integer-Zahlen oder auch direkt als Gleitkommazahl (nur UMREZ oder UMREZ und UMREN) eingegeben werden (bei gepackten Feldern müssen Zähler und Nenner dieselbe Anzahl von Dezimalstellen haben). Die additive Konstante UMREA kann als Gleitkommazahl oder als gepackte Zahl eingegeben werden (hier automatische Berücksichtigung der Dezimalstellen).
  • Feldformate zur Übernahme der verwendeten Umrechnungsfaktoren:

    Sollen die vom Funktionsbaustein ermittelten Umrechnungsfaktoren (O_UMREZ, O_UMREN und O_UMREA) vom aufrufenden Programm übernommen werden, so sollten hierzu möglichst Gleitkommafelder verwendet werden.

    Im Falle von gepackten Feldern muß bei O_UMREZ und O_UMREN die Anzahl der Dezimalstellen gleich sein; bei O_UMREA werden die Dezimalstellen automatisch berücksichtigt. Außerdem wird versucht, O_UMREZ und O_UMREN durch einfache Kürzungen klein zu halten. Bei Feldüberlauf in den Feldern O_UMREZ, O_UMREN oder O_UMREA wird die Ausnahme 'OVERFLOW' gesetzt.
  • Zur Ausnahme 'OVERFLOW':

    Vor dem Füllen von gepackten oder Integer-Feldern wird immer ein Überlauftest durchgeführt, der Typ, Länge und Dezimalen des Feldes berücksichtigt. Da auf ABAP-Ebene jedoch die im DDIC vereinbarte Ausgabelänge nicht zur Verfügung steht, wird i.d.R. davon ausgegangen, daß die ABAP-Länge voll genutzt wird. Damit wird folgende Anzahl von Stellen zur Ausgabe von Ziffern unterstellt:

    - gepackt (DEC oder QUAN): ABAP-Länge * 2 - 1

    - Integer (INT4): 9




Parameter

ANDEC
IVAME
IVLME
KRUND
MATNR
MEINH
MEINS
MGAME
MGLME
O_IVAME
O_IVLME
O_MEINH
O_MEINS
O_MGAME
O_MGLME
O_UMREA
O_UMREN
O_UMREZ
UMREA
UMREE
UMREN
UMREZ

Ausnahmen

CONVERSION_NOT_FOUND
DIFFERENT_DIMENSION
DIVISIONN_BY_ZERO
OVERFLOW
T006D_ENTRY_MISSING
T006_ENTRY_MISSING

Funktionsgruppe

MGUM

PERFORM Short Reference   Fill RESBD Structure from EBP Component Structure  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 10611 Date: 20240523 Time: 133132     sap01-206 ( 189 ms )