[ABAP] Daten zum Material anzeigen

* siehe auch Report RMMMTREE
PARAMETERS: p_mat TYPE matnr.

START-OF-SELECTION.

* Allgemeine Materialdaten
  SELECT
    FROM mara
    FIELDS *
    WHERE matnr EQ @p_mat
    ORDER BY PRIMARY KEY
    INTO TABLE @DATA(it_mara).

* Werksdaten zum Material
  SELECT
    FROM marc
    FIELDS *
    WHERE matnr EQ @p_mat
    ORDER BY PRIMARY KEY
    INTO TABLE @DATA(it_marc).

  IF lines( it_marc ) > 0.
* Lagerortdaten zum Material
    SELECT
      FROM mard AS m
      FIELDS *
      FOR ALL ENTRIES IN @it_marc
      WHERE m~matnr EQ @p_mat
        AND m~werks EQ @it_marc-werks
      ORDER BY PRIMARY KEY
      INTO TABLE @DATA(it_mard).
  ENDIF.

* Materialkurztexte
  SELECT
    FROM makt
    FIELDS *
    WHERE matnr EQ @p_mat
    ORDER BY PRIMARY KEY
    INTO TABLE @DATA(it_makt).

* STXD SAPscript Text-Datei Header
  SELECT
    FROM stxh
    FIELDS *
    WHERE tdobject EQ 'MATERIAL'
      AND tdname EQ @( |{ p_mat WIDTH = 18 ALPHA = IN }| )
    ORDER BY PRIMARY KEY
    INTO TABLE @DATA(it_stxh).
      
* Reservierung/Sekundärbedarf
  SELECT
    FROM resb
    FIELDS *
    WHERE matnr EQ @p_mat
    ORDER BY PRIMARY KEY
    INTO TABLE @DATA(it_resb).

* Bestellanforderung
  SELECT
    FROM eban
    FIELDS *
    WHERE matnr EQ @p_mat
    ORDER BY PRIMARY KEY
    INTO TABLE @DATA(it_eban).

* Einkaufsbelegposition
  SELECT
    FROM ekpo
    FIELDS *
    WHERE matnr EQ @p_mat
    ORDER BY PRIMARY KEY
    INTO TABLE @DATA(it_ekpo).

  IF lines( it_ekpo ) > 0.
* Einkaufsbelegkopf
    SELECT
      FROM ekko AS e
      FIELDS *
      FOR ALL ENTRIES IN @it_ekpo
      WHERE e~ebeln EQ @it_ekpo-ebeln
      ORDER BY PRIMARY KEY
      INTO TABLE @DATA(it_ekko).
  ENDIF.

* Materialstamm: Standardfelder und spezielle Retail-Felder
  SELECT
    FROM maw1
    FIELDS *
    WHERE matnr EQ @p_mat
    ORDER BY PRIMARY KEY
    INTO TABLE @DATA(it_maw1).

  IF lines( it_makt ) > 0.
* Materialstamm-Texte je Mengeneinheit und Text-Id
    SELECT
      FROM mamt AS m
      FIELDS *
      FOR ALL ENTRIES IN @it_makt
      WHERE m~matnr EQ @p_mat
        AND m~spras EQ @it_makt-spras
      ORDER BY PRIMARY KEY
      INTO TABLE @DATA(it_mamt).
  ENDIF.

* Mengeneinheiten zum Material
  SELECT
    FROM marm
    FIELDS *
    WHERE matnr EQ @p_mat
    ORDER BY PRIMARY KEY
    INTO TABLE @DATA(it_marm).

  IF lines( it_marm ) > 0.
* Europäische Artikelnummern zum Material
    SELECT
      FROM mean AS m
      FIELDS *
      FOR ALL ENTRIES IN @it_marm
      WHERE m~matnr EQ @p_mat
        AND m~meinh EQ @it_marm-meinh
      ORDER BY PRIMARY KEY
      INTO TABLE @DATA(it_mean).

* Zuordnung von Layoutbausteinen zu Materialien
    SELECT
      FROM malg AS m
      FIELDS *
      FOR ALL ENTRIES IN @it_marm
      WHERE matnr EQ @p_mat
        AND m~meinh EQ @it_marm-meinh
      ORDER BY PRIMARY KEY
      INTO TABLE @DATA(it_malg).
  ENDIF.

* Verkaufsdaten zum Material
  SELECT
    FROM mvke
    FIELDS *
    WHERE matnr EQ @p_mat
    ORDER BY PRIMARY KEY
    INTO TABLE @DATA(it_mvke).

* Materialbewertung
  SELECT
    FROM mbew
    FIELDS *
    WHERE matnr EQ @p_mat
    ORDER BY PRIMARY KEY
    INTO TABLE @DATA(it_mbwe).

* Materialdaten pro Lagernummer
  SELECT
    FROM mlgn
    FIELDS *
    WHERE matnr EQ @p_mat
    ORDER BY PRIMARY KEY
    INTO TABLE @DATA(it_mlgn).

  IF lines( it_mlgn ) > 0.
* Materialdaten pro Lagertyp
    SELECT
      FROM mlgt AS m
      FIELDS *
      FOR ALL ENTRIES IN @it_mlgn
      WHERE m~matnr EQ @p_mat
        AND m~lgnum EQ @it_mlgn-lgnum
      ORDER BY PRIMARY KEY
      INTO TABLE @DATA(it_mlgt).
  ENDIF.

* Einkaufsinfosatz - allgemeine Daten
  SELECT
    FROM eina
    FIELDS *
    WHERE matnr EQ @p_mat
    ORDER BY PRIMARY KEY
    INTO TABLE @DATA(it_eina).

  IF lines( it_eina ) > 0.
* Einkaufsinfosatz - Einkaufsorganisationsdaten
    SELECT
      FROM eine AS e
      FIELDS *
      FOR ALL ENTRIES IN @it_eina
      WHERE e~infnr EQ @it_eina-infnr
      ORDER BY PRIMARY KEY
      INTO TABLE @DATA(it_eine).
  ENDIF.

* Materialstammstatus
  SELECT
    FROM msta
    FIELDS *
    WHERE matnr EQ @p_mat
    ORDER BY PRIMARY KEY
    INTO TABLE @DATA(it_msta).

* noch offene Materialstaemme
  SELECT
    FROM moff
    FIELDS *
    WHERE matnr EQ @p_mat
      ORDER BY statm
      INTO TABLE @DATA(it_moff).

* Planauftrag
  SELECT
    FROM plaf
    FIELDS *
    WHERE matnr EQ @p_mat
    ORDER BY PRIMARY KEY
    INTO TABLE @DATA(it_plaf).

* Kopfsatz für Bedarfssummensätze im MRP
  SELECT
    FROM rqhd
    FIELDS *
    WHERE matnr EQ @p_mat
    ORDER BY PRIMARY KEY
    INTO TABLE @DATA(it_rqhd).

* Positionssatz für Bedarfssummensätze im MRP
  SELECT
    FROM rqit
    FIELDS *
    WHERE matnr EQ @p_mat
    ORDER BY PRIMARY KEY
    INTO TABLE @DATA(it_rqit).

* Material (Konditionssätze)
  SELECT
    FROM a004
    FIELDS *
    WHERE matnr EQ @p_mat
    ORDER BY PRIMARY KEY
    INTO TABLE @DATA(it_a004).

  IF lines( it_a004 ) > 0.
* Konditionen (Kopf)
    SELECT
      FROM konh
      FIELDS *
      FOR ALL ENTRIES IN @it_a004
      WHERE knumh EQ @it_a004-knumh
      ORDER BY PRIMARY KEY
      INTO TABLE @DATA(it_konh).

* Konditionen (Position)
    SELECT
      FROM konp
      FIELDS *
      FOR ALL ENTRIES IN @it_a004
      WHERE knumh EQ @it_a004-knumh
      ORDER BY PRIMARY KEY
      INTO TABLE @DATA(it_konp).
  ENDIF.

  cl_demo_output=>next_section( 'Materialstamm' ).
  cl_demo_output=>write_data( value = it_mara name = 'MARA (Allgemeine Materialdaten)' ).
  cl_demo_output=>write_data( value = it_marc name = 'MARC (Werksdaten zum Material)' ).
  cl_demo_output=>write_data( value = it_mard name = 'MARD (Lagerortdaten zum Material)').
  cl_demo_output=>next_section( 'Texte' ).
  cl_demo_output=>write_data( value = it_makt name = 'MAKT (Materialkurztexte)').
  cl_demo_output=>write_data( value = it_stxh name = 'STXH (STXD SAPscript Text-Datei Header)').
  cl_demo_output=>next_section( 'Einkauf' ).
  cl_demo_output=>write_data( value = it_resb name = 'RESB (Reservierung/Sekundärbedarf)').
  cl_demo_output=>write_data( value = it_eban name = 'EBAN (Bestellanforderung)').
  cl_demo_output=>write_data( value = it_ekko name = 'EKKO (Einkaufsbelegkopf)').
  cl_demo_output=>write_data( value = it_ekpo name = 'EKPO (Einkaufsbelegposition)').
  cl_demo_output=>next_section( 'Infosatz' ).
  cl_demo_output=>write_data( value = it_eina name = 'EINA (Einkaufsinfosatz - allgemeine Daten)').
  cl_demo_output=>write_data( value = it_eine name = 'EINE (Einkaufsinfosatz - Einkaufsorganisationsdaten)').
  cl_demo_output=>next_section( 'Konditionen' ).
  cl_demo_output=>write_data( value = it_a004 name = 'A004 (Material (Konditionssätze)').
  cl_demo_output=>write_data( value = it_konh name = 'KONH (Konditionen (Kopf))').
  cl_demo_output=>write_data( value = it_konp name = 'KONP (Konditionen (Position))').
  cl_demo_output=>next_section( 'Bewertung' ).
  cl_demo_output=>write_data( value = it_mbwe name = 'MBEW (Materialbewertung)').
  cl_demo_output=>next_section( 'Verkaufsdaten' ).
  cl_demo_output=>write_data( value = it_mvke name = 'MVKE (Verkaufsdaten zum Material)').
  cl_demo_output=>next_section( 'Mengeneinheiten' ).
  cl_demo_output=>write_data( value = it_marm name = 'MARM (Mengeneinheiten zum Material)').
  cl_demo_output=>next_section( 'Materialdaten' ).
  cl_demo_output=>write_data( value = it_mlgn name = 'MLGN (Materialdaten pro Lagernummer)').
  cl_demo_output=>write_data( value = it_mlgt name = 'MLGT (Materialdaten pro Lagertyp)').
  cl_demo_output=>next_section( 'Planaufträge' ).
  cl_demo_output=>write_data( value = it_plaf name = 'PLAF (Planauftrag)').
  cl_demo_output=>next_section( 'MRP' ).
  cl_demo_output=>write_data( value = it_rqhd name = 'RQHD (Kopfsatz für Bedarfssummensätze im MRP)').
  cl_demo_output=>write_data( value = it_rqit name = 'RQIT (Positionssatz für Bedarfssummensätze im MRP)').
  cl_demo_output=>next_section( 'Materialstammstatus' ).
  cl_demo_output=>write_data( value = it_msta name = 'MSTA (Materialstammstatus)').
  cl_demo_output=>write_data( value = it_moff name = 'MOFF (noch offene Materialstaemme)').
  cl_demo_output=>next_section( 'Sonstges' ).
  cl_demo_output=>write_data( value = it_maw1 name = 'MAW1 (Materialstamm: Standardfelder und spezielle Retail-Felder)').
  cl_demo_output=>write_data( value = it_mamt name = 'MAMT (Materialstamm-Texte je Mengeneinheit und Text-Id)').
  cl_demo_output=>write_data( value = it_mean name = 'MEAN (Europäische Artikelnummern zum Material)').
  cl_demo_output=>write_data( value = it_malg name = 'MALG (Zuordnung von Layoutbausteinen zu Materialien)').

*   HTML-Code vom Demo-Output holen
  DATA(lv_html) = cl_demo_output=>get( ).

*   Daten im Inline-Browser im SAP-Fenster anzeigen
  cl_abap_browser=>show_html( EXPORTING title       = 'Material'
                                        html_string = lv_html
                                        container   = cl_gui_container=>default_screen ).

* leere Standard-Toolbar ausblenden
  cl_abap_list_layout=>suppress_toolbar( ).

* cl_gui_container=>default_screen erzwingen
  WRITE: space.

[SAP] Kalkulationsschema / Konditionen

Transaktionen

VOK0 (Konditionen: Preisfind. Customizing)
V/08 (Konditionen: Schema für A V)
M/03 (Konditionstabelle anlegen (Einkauf))
M/04 (Konditionstabelle ändern (Einkauf))
M/05 (Konditionstablle anzeigen (Einkauf))
M/13 (Konditionstab. anlegen (Leistung))
M/14 (Konditionstab. ändern (Leistungen))
M/15 (Konditionstab. anzeigen (Leistungen))

OMFO (C MM-PUR Finden Kalk.-Schema)
SSCUI_OMFZ_STO (C MM-PUR: Umlagerungsschema)
OMFR (C MM-PUR Marktpreisschema, Ekorg)

Kalkulationsschema

RM0000 (Einkaufsbeleg (groß))
RM0001(Zusatzkonditionen Kopf)
RM0002(Zusatzkonditionen Preis)
RM1000 (Einkaufsbeleg (klein))
RM1001 (Zusatzkonditionen Kopf)
RM1002 (Zusatzkonditionen Preis)
RM2000 (Umlagerungsbeleg)

MS0000 (Leistungensschema)
MS0001 (Leistungsschema Stammkond.)
MS0002 (Zusatzkonditionen Kopf)

Konditionsarten

PB00 (Preis Brutto)
PI00 (Preis interne Verrechng)
PR00 (Preis)
PRS (Gesamtpreis)

Tabellen

T165A (Konditionsschema für Dienstleistung)
T682 (Konditionen: Zugriffsfolgen)
T682T (Konditionen: Zugriffsfolgen: Texte)
T683 (Kalkulationsschemata)
T683U (Konditionen: Schema (Text))
T685 (Konditionen: Arten)
T685T (Konditionen: Arten: Texte)
T685A (Konditionen: Arten: Zusatzdaten Preiselemente)
KONH (Konditionen (Kopf))
KONP (Konditionen (Position))

Funktionsbausteine

CONDITION_RECORD_READ (Lese Konditionssatz via Zugriffsfolge)

Links

[SAP] Infosätze

Transaktionen

OMEO (C MM-PUR Nummernkreise Infosatz)
ME1L (Infosätze pro Lieferant)
ME1M (Infosätze zum Material)
ME1W (Infosätze zur Warengruppe)

ME11 (Infosatz anlegen)
ME12 (Infosatz ändern)

  • Preis ändern
  • Beachten: passt den Nettopreis in der Tabelle EINE an

ME13 (Infosatz anzeigen)

  • benötigt konkrete Angabe von Lieferant, EkOrg oder Infosatz-Nr.

ME14 (Änderungen zum Infosatz)

  • Felder “Infotyp” und “Ab Änderungsdatum” können frei gelassen werden

Tabellen

EINA (Einkaufsinfosatz – allgemeine Daten)
EINE (Einkaufsinfosatz – Einkaufsorganisationsdaten)
A017 (Materialinfosatz (werksspezifisch))
KONH (Konditionen (Kopf))
KONP (Konditionen (Position))

Views

ENT5035 (Einkaufsorganisation-Einkaufsinformation)
V_EINA (Joinview zum Lesen der EINA + EINE)
V_EINE_MKAL (Sicht für Materialversion und Infosatzkombination)

CDS-Views

CDS_M_INFORECORD (MM-PUR: CDS View for Purchasing Info Record)

Fiori-Apps

F1982 (Einkaufsinfosätze verwalten)
F2667 (Massenänderungen an Einkaufsinfosätzen)
F0351A (Purchasing Info Record (Version 2))

Links

[ABAP] MM: Materialpreis aus Konditionssatz ermitteln

DATA: it_t685 TYPE STANDARD TABLE OF t685 WITH DEFAULT KEY.
DATA: it_t682i TYPE STANDARD TABLE OF t682i WITH DEFAULT KEY.
DATA: it_a004 TYPE STANDARD TABLE OF a004 WITH DEFAULT KEY.
DATA: it_konp TYPE STANDARD TABLE OF konp WITH DEFAULT KEY.
DATA: it_konh TYPE STANDARD TABLE OF konh WITH DEFAULT KEY.

PARAMETERS: pkvewe TYPE t685-kvewe DEFAULT 'A'.
PARAMETERS: pkappl TYPE t685-kappl DEFAULT 'V'.
PARAMETERS: pkschl TYPE t685-kschl DEFAULT 'PR00'.
PARAMETERS: pkolnr TYPE t682i-kolnr DEFAULT '40'.
PARAMETERS: pvkorg TYPE a004-vkorg DEFAULT '0030'.
PARAMETERS: pvtweg TYPE a004-vtweg DEFAULT '01'.
PARAMETERS: pmatnr TYPE mara-matnr DEFAULT '000000001234567890'.
PARAMETERS: pdatab TYPE a004-datab DEFAULT '20170101'.
PARAMETERS: pdatbi TYPE a004-datbi DEFAULT '99991231'.

START-OF-SELECTION.

*T685 (Konditionen: Arten)
*-> KVEWE A (Verwendung der Konditionstabelle -> Preisfindung)
*-> KAPPL V (Applikation -> Vertrieb)
*-> KSCHL PR00 (Konditionsart)
*
*<- KOZGF (Zugriffsfolge -> Preis)
*<- VTEXT (Listenpreis)
  SELECT * FROM t685
    INTO TABLE @it_t685
    WHERE kvewe = @pkvewe
      AND kappl = @pkappl
      AND kschl = @pkschl.

  IF sy-subrc = 0.

    LOOP AT it_t685 ASSIGNING FIELD-SYMBOL(<a>).
      WRITE: / |        KOZGF (Zugriffsfolge): { <a>-kozgf }|.
    ENDLOOP.

*T682I (Konditionen: Zugriffsfolgen (generierte Form))
*-> KVEWE A (Verwendung der Konditionstabelle -> Preisfindung)
*-> KAPPL V (Applikation -> Vertrieb)
*-> KOZGF PR00 (Zugriffsfolge -> Preis)
*-> KOLNR 40 (Zugriffsfolge -> Zugriff)
*
*<- KOTABNR 4 (Konditionstabelle -> Material (004))

    DATA(lv_kozgf) = it_t685[ 1 ]-kozgf.

    SELECT * FROM t682i
      INTO TABLE @it_t682i
      WHERE kvewe = @pkvewe
        AND kappl = @pkappl
        AND kozgf = @lv_kozgf
        AND kolnr = @pkolnr.

    IF sy-subrc = 0.

      LOOP AT it_t682i ASSIGNING FIELD-SYMBOL(<z>).
        WRITE: / |  KOTABNR (Konditionstabelle): { <z>-kotabnr } (A{ <z>-kotabnr })|.
      ENDLOOP.

*A004 (Material)
*-> KAPPL V (Applikation -> Vertrieb)
*-> KSCHL PR00 (Konditionsart)
*-> VKORG 0030 (Verkaufsorganisation)
*-> VTWEG 01 (Vertriebsweg - Stammdaten)
*-> MATNR 000000001234567890 (Materialnummer)
*-> DATAB (Gültigkeitsbeginn des Konditionssatzes)
*-> DATBI (Gültigkeitsende des Konditionssatzes)
*
*<- KNUMH (Nummer Konditionssatz)

* Tabellenname zusammenbauen -> A004 (Material)
      DATA(lv_tabname) = |A{ it_t682i[ 1 ]-kotabnr }|.

      SELECT * FROM (lv_tabname)
        INTO TABLE @it_a004
        WHERE kappl = @pkappl
          AND kschl = @pkschl
          AND vkorg = @pvkorg
          AND vtweg = @pvtweg
          AND matnr = @pmatnr
          AND datab <= @pdatab
          AND datbi >= @pdatbi.

      IF sy-subrc = 0.

        LOOP AT it_a004 ASSIGNING FIELD-SYMBOL(<m>).
          WRITE: / |KNUMH (Nummer Konditionssatz): { <m>-knumh } [von: { <m>-datab DATE = ENVIRONMENT } bis: { <m>-datbi DATE = ENVIRONMENT }]|.
        ENDLOOP.

*KONP (Konditionen (Position))
*-> KNUMH (Nummer Konditionssatz)
*-> LOEVM_KO space (Löschkennzeichen für die Konditionsposition)
*
*<- KBETR (Konditionsbetrag/-prozentsatz im Nicht-Staffelfall)
*<- KPEIN (Konditions-Preiseinheit)
*<- KONWA (Konditionseinheit (Währung oder Prozentsatz)
*<- KMEIN (Konditionsmengeneinheit)

        DATA(lv_knumh) = it_a004[ 1 ]-knumh.

        SELECT * FROM konp
          INTO TABLE @it_konp
          WHERE knumh = @lv_knumh
            AND loevm_ko = @space.

        IF sy-subrc = 0.

          LOOP AT it_konp ASSIGNING FIELD-SYMBOL(<p>).
            WRITE: / |                         KONP: Preis: { <p>-kbetr } { <p>-konwa } pro { <p>-kpein } { <p>-kmein }|.
          ENDLOOP.

*
*KONH (Konditionen (Kopf))
*-> KNUMH (Nummer Konditionssatz)

          SELECT * FROM konh
            INTO TABLE @it_konh
            WHERE knumh = @lv_knumh.

          IF sy-subrc = 0.

            LOOP AT it_konh ASSIGNING FIELD-SYMBOL(<h>).
              WRITE: / |                         KONH: KVEWE: { <h>-kvewe } / KOTABNR: { <h>-kotabnr } / KAPPL: { <h>-kappl } / KSCHL: { <h>-kschl }|.
            ENDLOOP.

          ELSE.
            WRITE: / |Keine Konditionen (Kopf) in Tabelle KONH vorhanden.|.
          ENDIF.
        ELSE.
          WRITE: / |Keine Konditionen (Position) in Tabelle KONP vorhanden.|.
        ENDIF.
      ELSE.
        WRITE: / |Keine KNUMH (Nummer Konditionssatz) in Tabelle { lv_tabname } vorhanden.|.
      ENDIF.
    ELSE.
      WRITE: / |Keine KOTABNR (Konditionstabelle) für { lv_kozgf } vorhanden.|.
    ENDIF.
  ELSE.
    WRITE: / |Keine KOZGF (Zugriffsfolge) für { pkschl } vorhanden.|.
  ENDIF.

Weiterführende Infos: Link

[SAP] Lieferantenkonditionen / Leistungskonditionen

Transaktionen

ML40 (Lieferantenkonditionen ändern)
ML41 (Anzeigen Lieferantenkonditionen)
ML43 (Lieferantenkonditionen ändern)

ML42 (Anlegen Leistungskonditionen)
ML45 (Anzeigen Leistungskonditionen)
ML46 (Ändern Leistungskonditionen)
ML47 (Anzeigen Leistungskonditionen)

ML50 (Anzeigen Konditionen)
ML51 (Anlegen Konditionen)
ML52 (Ändern Konditionen)

  • zunächst “Abbrechen”
  • Button “Konditionsinfo”
  • ggf. Leistungsnummer eingeben
  • Haken bei “KONP-Werte anzeigen”
  • Gültigkeitsbereich vorgeben
  • Button “Ausführen”
  • Button “Sätze im ALV anzeigen”
  • im Baum Doppelklick auf “Leistungskonditionen”
  • Doppelklick im ALV-Gitter auf eine Leistungsnummer
  • Abschnitt “Zusatzkonditionen”: Eine Zeile mit Konditionsart “PRS” selektieren
  • Button “Detail”
  • Wert oder Löschkennzeichen ändern und Button “Speichern” (blaue Diskette)

ML53 (Anlegen Konditionen)

Tabellen

A104 (Leistungskonditionen (Eigenansatz))
KONH (Konditionen (Kopf))
KONP (Konditionen (Position))

Links