[SAP] Obligo

Transaktionen

KO01 (Innenauftrag anlegen)
KO03 (Innenauftrag anzeigen)
KOB2 (Aufträge Einzelposten Obligo)
S_ALR_87012999 (Auftrag: Ist/Plan/Obligo)
S_ALR_87013558 (Budget/Ist/Obligo/Restplan/Verf.)
S_ALR_87013611 (Kostenstellen: Ist/Plan/Abweichung)
RKACSHOW (CO-Kostensegmente anzeigen)

Reports

RKACOR04 (Abgleich zwischen Einzelposten und Summensätzen (Istkosten+Obligo))
RKANBU01 (Übernahme Bestellanforderungs- und Bestellobligo)
RKAGJOBL (Geschäftsjahresabschluß: Obligovortrag)

Tabellen

COOI (Obligoverwaltung: Einzelposten)
COEP (CO-Objekt: Einzelposten periodenbezogen)
AUFK (Auftragsstammdaten)
ACDOCA (Buchungsbelegpositionen)

CDS-Views

COSP (CO Object: Cost Totals for External Postings (“COSP”))
COSS (CO Object: Cost Totals for Internal Postings (“COSS”))

BAdIs

ME_REQ_OI_EXT (BAdI: Obligofortschreibung von Banfen aus anderen Applikationen aktivieren)
ME_COMMTMNT_PO_REL_C (BAdI: Prüfung zur Obligorelevanz von Bestellungen)
ME_COMMTMNT_REQ_RE_C (BAdI: Prüfung zur Obligorelevanz von Bestellanforderungen)
ME_COMMITMENT_RETURN (BAdI: Obligo für Retourenpositionen)
ME_COMMITMENT_STO_CH (BAdI: Obligo für Umlagerungsbestellungen)

Hinweise

Links

[ABAP] Prüfen, ob string eine Zahl (numerisch) ist

* erlaubte Zeichen für numerischen String
CONSTANTS: c_numeric TYPE string VALUE '-., 0123456789'.

DATA: val_in TYPE string VALUE '    -123.2'.

* funktioniert nicht mit strings wie '0.0.1' usw.
* CO -> contains only
IF val_in CO c_numeric.
  WRITE: / |String "{ val_in }" ist numerisch.|.
ELSE.
  WRITE: / |String "{ val_in }" ist nicht numerisch.|.
ENDIF.

[ABAP] Daten aus einer internen Tabelle löschen

Typen & Daten

* Typen
TYPES : BEGIN OF ty_s_sflight,
          carrid   TYPE sflight-carrid,
          connid   TYPE sflight-connid,
          seatsmax TYPE sflight-seatsmax,
          flag     TYPE abap_bool,
        END OF ty_s_sflight.

TYPES: ty_it_sflight TYPE STANDARD TABLE OF ty_s_sflight WITH DEFAULT KEY.

* Daten
DATA(it_sflight) = VALUE ty_it_sflight( ).

* Select
SELECT carrid,
       connid,
       seatsmax,
       CASE WHEN seatsmax > 200 THEN @abap_true " CASE-Anweisung zum Setzen der Spalte "flag"
       END AS flag
  INTO TABLE @it_sflight
  FROM sflight.

Variante 1 (INDEX)

* Eintrag mit Index 1
DELETE it_sflight INDEX 1.

cl_demo_output=>display( it_sflight ).

Variante 2 (Struktur)

* Genau einen Eintrag entsprechend der Struktur
DELETE TABLE it_sflight FROM VALUE #( carrid = 'LH' connid = '400' seatsmax = 280 flag = abap_true ).

cl_demo_output=>display( it_sflight ).

Variante 3 (TABLE KEY)

* Einträge mit Primärschlüssel aus Tabelle löschen
DELETE TABLE it_sflight WITH TABLE KEY carrid = 'LH' connid = '400' flag = abap_true.

cl_demo_output=>display( it_sflight ).

Variante 4 (WHERE)

* Alle Einträge mit leerem flag löschen
DELETE it_sflight WHERE flag IS INITIAL.
* Alle Einträge innerhalb eines Bereiches löschen
DELETE it_sflight WHERE seatsmax > 200 AND seatsmax < 350.
* Alle Einträge die nicht der Bedingung entsprechen
DELETE it_sflight WHERE NOT carrid = 'AA'.

cl_demo_output=>display( it_sflight ).

Variante 5 (RANGE)

* alle Carrier, die nicht 'AA' sind aus der iTab löschen
DELETE it_sflight WHERE NOT carrid IN VALUE rseloption( ( sign   = 'I'
                                                          option = 'EQ'
                                                          low    = 'AA'
                                                          high   = '' ) ).

cl_demo_output=>display( it_sflight ).

Variante 6 (RANGE mit Pattern)

* Alle Einträge beginnend mit 'A' und 'L' löschen
DELETE it_sflight WHERE carrid IN VALUE rseloption( ( sign   = 'I'
                                                      option = 'CP'
                                                      low    = 'A*'
                                                      high   = '' )
                                                    ( sign   = 'I'
                                                      option = 'CP'
                                                      low    = 'L*'
                                                      high   = '' ) ).

cl_demo_output=>display( it_sflight ).

Variante 7 (RANGE leer)

* Achtung: löscht alle Einträge in it_sflight!
DELETE it_sflight WHERE carrid IN VALUE rseloption( ).

cl_demo_output=>display( it_sflight ).

Variante 8 (Pattern CP)

* alle Einträge, deren carrid mit 'L' beginnen
DELETE it_sflight WHERE carrid CP 'L*'.

cl_demo_output=>display( it_sflight ).

Variante 9 (dynamische WHERE-Condition)

* Stringtab mit WHERE-Conditions -> Leerzeichen beachten!
DATA(it_where) = VALUE stringtab(
                                  ( |testfehler = 'AA'| )
                                  ( |carrid EQ 'AA' AND connid CP '001*' | )
                                  ( |seatsmax > 300| )
                                ).

LOOP AT it_where ASSIGNING FIELD-SYMBOL(<w>).

  WRITE: / <w>.

  TRY.
* dynamische WHERE-Condition ausführen
* fehlerhafte WHERE-Conditions werfen eine Exception
      DELETE it_sflight WHERE (<w>).
    CATCH cx_root INTO DATA(e_txt).
      WRITE: / e_txt->get_text( ).
  ENDTRY.

ENDLOOP.

cl_demo_output=>display( it_sflight ).

Variante 10 (Pseudokomponente TABLE_LINE)

* Die Tabellenzeile mit der Struktur ty_s_sflight wird gelöscht
DELETE it_sflight WHERE table_line = VALUE ty_s_sflight( carrid = 'LH' connid = '400' seatsmax = 280 flag = abap_true ).

cl_demo_output=>display( it_sflight ).

Variante 11 (CO [Contains Only])

* Carrier darf nur Zeichen 'A' und/oder 'Z' und/oder ' ' enthalten
* -> löscht Einträge für 'AA ', 'AZ '
DELETE it_sflight WHERE carrid CO 'AZ '.

cl_demo_output=>display( it_sflight ).