[ABAP] Verwendung von Common Table Expressions (CTE)

* https://software-heroes.com/en/blog/abap-common-table-expression-en
PARAMETERS: p_mat TYPE mara-matnr.

* Definition allgemeiner Tabellenausdrücke (Common Table Expression (CTE))
WITH
  +mat AS (
    SELECT FROM mara
      FIELDS *
      WHERE matnr = @p_mat )

* Verwendung der CTE +mat
    SELECT FROM ekpo AS e
       FIELDS *
       WHERE e~matnr IN ( SELECT matnr FROM +mat )
       INTO TABLE @DATA(it_ekpo).

cl_demo_output=>display( it_ekpo ).

[ABAP] Materialbelegliste (MB51) anzeigen

Variante 1 (CALL TRANSACTION)

PARAMETERS: p_werk TYPE werks DEFAULT '10'.
PARAMETERS: p_matnr TYPE matnr.
PARAMETERS: p_lgort TYPE lgort_d.
PARAMETERS: p_bwart TYPE bwart.
PARAMETERS: p_charg TYPE charg_d.
PARAMETERS: p_lifnr TYPE lifnr.
PARAMETERS: p_kunnr TYPE kunnr.
PARAMETERS: p_kdauf TYPE kdauf.

START-OF-SELECTION.

* Werk
  SET PARAMETER ID 'WRK' FIELD p_werk.
* Material
  SET PARAMETER ID 'MAT' FIELD p_matnr.
* Lagerort
  SET PARAMETER ID 'LAG' FIELD p_lgort.
* Bewegungsart
  SET PARAMETER ID 'BWA' FIELD p_bwart.
* Charge
  SET PARAMETER ID 'CHA' FIELD p_charg.
* Lieferant
  SET PARAMETER ID 'LIF' FIELD p_lifnr.
* Kunde
  SET PARAMETER ID 'KUN' FIELD p_kunnr.
* Kundenuftrag
  SET PARAMETER ID 'AUN' FIELD p_kdauf.

  CALL TRANSACTION 'MB51' AND SKIP FIRST SCREEN.

Variante 2 (SUBMIT)

* Werk
DATA(lv_werk) = VALUE werks( ).
SELECT-OPTIONS: so_werk FOR lv_werk.
* Warenbegleitscheinnummer
DATA(lv_xabln) = VALUE xabln( ).
SELECT-OPTIONS: so_xabln FOR lv_xabln.
* Referenz-Belegnummer
DATA(lv_xblnr) = VALUE xblnr1( ).
SELECT-OPTIONS: so_xblnr FOR lv_xblnr.

INITIALIZATION.
* Vorbelegung für Werk
  so_werk[] = VALUE #( ( sign = 'I' option = 'EQ' low = '10' high = '' ) ).
  
START-OF-SELECTION.

* MB51 ist eine Reporttransaktion, also kann auch der dahinter
* liegende Report RM07DOCS direkt mit Übergabewerten aufgerufen werden
  SUBMIT rm07docs
    WITH werks IN so_werk
    WITH xabln IN so_xabln
    WITH xblnr IN so_xblnr
    WITH rhier_l = abap_true  " Radiobutton "Hierarchische Liste" aktiv setzen
    WITH rflat_l = abap_false " Radiobutton "Flache Liste" deaktivieren
    AND RETURN.

[ABAP] Strings ersetzen

* Variante 1 (REPLACE, alle Vorkommen von '!' mit '.')
DATA: s TYPE string VALUE 'Test!'.
REPLACE ALL OCCURRENCES OF '!' IN s WITH '.'.
WRITE: / s.

* Variante 2 (replace, 1 Zeichen an der Stelle 4)
DATA(res) = replace( val = 'Test!' off = 4 len = 1 with = '.' ).
WRITE: / res.

* Variante 3 (replace, das erste Vorkommen von '-')
DATA(rep) = replace( val = '1-2' sub = '-' with = '+' ).
WRITE: / rep.

* Variante 4 (replace, alle Vorkommen von '*')
DATA(rep) = replace( val = '*test*' sub = '*' with = '%' occ = 0 ).
WRITE: / rep.

[ABAP] Messages ausgeben

Messagetypen

Typ  Bezeichnung  Bedeutung

A    Abbruch      Anzeige der Nachricht in einem Dialogfenster. Die gesamte Transaktion wird nach der Bestätigung durch ENTER abgebrochen.
E    Error        Anzeige der Nachricht in der Statuszeile. Nach der Bestätigung durch ENTER wird der aktuelle Ereignisblock abgebrochen und die Anzeige der vorhergehenden Listenstufe bleibt bestehen. Während der Erstellung der Grundliste wird das gesamte Programm abgebrochen.
I    Information  Anzeige der Nachricht in einem Dialogfenster. Nach der Bestätigung durch ENTER wird die Verarbeitung hinter der MESSAGE-Anweisung wieder aufgenommen.
S    Status       Anzeige der Nachricht in der Statuszeile der momentan erstellten Liste.
W    Warnung      siehe E
X    Exit         Dieser Nachrichtentyp löst einen Laufzeitfehler aus und erzeugt einen Kurzdump.

Codebeispiele

* Beispiele
* Popup-Message des Typs 'E' (Fehler)
MESSAGE 'Nachricht.' TYPE 'I' DISPLAY LIKE 'E'.
* Popup-Message vom Typ 'I' (Information)
MESSAGE 'Text.' TYPE 'I'.

* Message in der Statuszeile vom Typ 'E' (rot)
MESSAGE 'Nachricht.' TYPE 'S' DISPLAY LIKE 'E'.
* Message in der Statuszeile vom Typ 'W' (gelb)
MESSAGE 'Nachricht.' TYPE 'S' DISPLAY LIKE 'W'.
* Message in der Statuszeile (grün)
MESSAGE 'Nachricht.' TYPE 'S'.

* Nachrichtentext Nr. 004 der Nachrichtenklasse 'mymessageclass', Typ 'I' (Information) mit Parameter v1
MESSAGE i004(mymessageclass) TYPE 'I' WITH v1.
* Nachrichtentext Nr. 004 der Nachrichtenklasse 'MYMESSAGECLASS' (Großschreibung!), Typ 'I' (Information)
MESSAGE ID 'MYMESSAGECLASS' TYPE 'I' NUMBER '004'.
* Fehlermessage komplett in der Statusleiste anzeigen
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE 'E'.
* Fehlermessage in String konvertieren
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO DATA(lv_message_str).
WRITE: / lv_message_str.

sy-msg in String

* Variante 1
DATA(lv_msg) = |{ sy-msgv1 } { sy-msgv2 } { sy-msgv3 } { sy-msgv4 }|.
WRITE: / lv_msg.

* Variante 2
DATA(lv_msg) = ||.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO lv_msg.
WRITE: / lv_msg.

Weiterführender Link: Link