[ABAP] Übersicht zu wichtigen MM-BAPIs

BAPI                            Bezeichnung                                           Link

BAPI_BILLINGDOC_GETLIST         Detailinformationen zur einer Faktura                 https://codezentrale.de/abap-parallelverarbeitung-multitasking/
BAPI_CONTRACT_CREATE            BAPI zum Anlegen eines Einkaufskontraktes
BAPI_CONTRACT_CHANGE            BAPI zum Ändern eines Einkaufskontraktes
BAPI_CUSTOMER_GETDETAIL2        Detailangaben Debitor                                 https://codezentrale.de/abap-bapi-zum-lesen-der-daten-eines-debitoren-customers/
BAPI_ENTRYSHEET_GETDETAIL       Detaildaten des Erfassungsblatts anzeigen             https://codezentrale.de/abap-lerf-detaildaten-des-erfassungsblatts-anzeigen/
BAPI_GOODSMVT_CREATE            Warenbewegungen mit MB_CREATE_GOODS_MOVEMENT buchen   https://codezentrale.de/abap-warenbewegungen-buchen/
BAPI_MATERIAL_GET_ALL           BAPI zum Lesen von Materialdaten                      https://codezentrale.de/abap-mm-materialdaten-lesen/
BAPI_MATERIAL_GET_DETAIL        Detaildaten zu einem Material ermitteln               https://codezentrale.de/abap-daten-zu-einem-material-matnr-ermitteln/
BAPI_MATERIAL_SAVEDATA          Anlegen und Ändern von Materialstammdaten             https://codezentrale.de/abap-mm-bapi_material_savedata-anlegen-und-aendern-von-materialstammdaten/
BAPI_MATERIAL_STOCK_REQ_LIST    Material - Aktuelle Bedarfs-/Bestandsliste            https://codezentrale.de/abap-mm-aktuelle-bedarfs-bestandsliste-reservierte-bestaende-analog-zur-transaktion-mmbe/
BAPI_PO_CHANGE                  Bestellung ändern                                     https://codezentrale.de/abap-bapi-bestellung-aendern/
BAPI_PO_CREATE1                 Bestellung anlegen                                    https://codezentrale.de/abap-bapis-zum-bestellung-anlegen-lesen-aendern/
BAPI_PO_GETDETAIL1              Detailinformationen für eine Bestellung               https://codezentrale.de/abap-bapi-bestellung-anzeigen/
BAPI_PR_CHANGE                  Change Enjoy Purchase Requisition
BAPI_PR_CREATE                  Create Enjoy Purchase Requisistion
BAPI_PR_GETDETAIL               Get details for one MEREQ Object                      https://codezentrale.de/abap-bapi-zum-lesen-von-infos-zur-bestellanforderung-banf/
BAPI_REQUISITION_CHANGE         Bestellanforderung ändern (obsolet)
BAPI_REQUISITION_CREATE         Bestellanforderung anlegen (obsolet)
BAPI_REQUISITION_GETDETAIL      Details zur Bestellanforderung anzeigen (obsolet)
BAPI_SAG_CHANGE                 Ändern eines Lieferplanes
BAPI_SAG_CREATE                 Anlegen eines Lieferplanes
BAPI_SAG_GETDETAIL              Detail aus Lieferplan auslesen
BAPI_SERVICE_CHANGE             BAPI zum Ändern eines Leistungsstammsatzes
BAPI_SERVICE_CREATE             Anlegen eines Leistungstammsatzes
BAPI_SERVICE_GET_DETAIL         Detaildaten zu einem Leistungsstammsatz lesen
BAPI_USER_GET_DETAIL            Detaildaten eines Benutzers lesen                     https://codezentrale.de/abap-detaildaten-eines-benutzers-lesen/

[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] BAPI zum Lesen der Daten eines Debitoren / Customers

* Typen
TYPES: ty_it_bapicustomer_02 TYPE STANDARD TABLE OF bapicustomer_02 WITH DEFAULT KEY.
TYPES: ty_it_bapicustomer_03 TYPE STANDARD TABLE OF bapicustomer_03 WITH DEFAULT KEY.
TYPES: ty_it_bapicustomer_06 TYPE STANDARD TABLE OF bapicustomer_06 WITH DEFAULT KEY.

* Führende Nullen beim Debitor/Customer beachten!
DATA(lv_deb) = CONV bapicustomer_id-customer( |{ |10000| WIDTH = 10 ALPHA = IN }| ).

* Rückgabestrukturen
DATA(lv_adr) = VALUE bapicustomer_04( ).
DATA(lv_kna1) = VALUE bapicustomer_kna1( ).
DATA(lv_comp) = VALUE bapicustomer_05( ).
DATA(lv_ret) = VALUE bapiret1( ).

* Rückgabetabellen
DATA(it_bank) = VALUE ty_it_bapicustomer_02( ).
DATA(it_iban) = VALUE ty_it_bapicustomer_03( ).
DATA(it_sepa) = VALUE ty_it_bapicustomer_06( ).

* Detailangaben Debitor (KUNNR (KNA1))
CALL FUNCTION 'BAPI_CUSTOMER_GETDETAIL2'
  EXPORTING
    customerno            = lv_deb
*   COMPANYCODE           =
  IMPORTING
    customeraddress       = lv_adr
    customergeneraldetail = lv_kna1
    customercompanydetail = lv_comp
    return                = lv_ret
  TABLES
    customerbankdetail    = it_bank
    customeribandetail    = it_iban
    customersepadetail    = it_sepa.

* Meldungstyp: S Success, E Error, W Warning, I Info, A Abort
CASE lv_ret-type.
  WHEN 'E' OR 'A'.
* Fehler
    cl_demo_output=>write_data( lv_ret ).
    cl_demo_output=>display( ).
  WHEN OTHERS.
* keine Fehler
    cl_demo_output=>write_data( lv_adr ).
    cl_demo_output=>write_data( lv_kna1 ).
    cl_demo_output=>write_data( lv_comp ).
    cl_demo_output=>write_data( it_bank ).
    cl_demo_output=>write_data( it_iban ).
    cl_demo_output=>write_data( it_sepa ).
    cl_demo_output=>write_data( lv_ret ).
    cl_demo_output=>display( ).
ENDCASE.

[ABAP] BAPI für die Prüfung der Existenz eines Business-Partners

DATA(lv_bp) = CONV bu_partner( '10000' ).
DATA(it_bapi_ret) = VALUE bapiret2_t( ).

* Paket BUPA
* SAP-GP, API: Geschäftspartner auf Existenz prüfen
CALL FUNCTION 'BUPA_EXISTENCE_CHECK'
  EXPORTING
    iv_partner = lv_bp
*   IV_PARTNER_GUID       =
  TABLES
    et_return  = it_bapi_ret.

* IS-H: Nachrichten aus BAPIRET2-Tabelle anzeigen
CALL FUNCTION 'ISH_BAPIRET2_DISPLAY'
  EXPORTING
    amodal_window = abap_false " Fenster modal / amodal anzeigen
  TABLES
    ss_bapiret2   = it_bapi_ret.

[ABAP] Warenbewegungen buchen

TYPES: BEGIN OF ty_s_material,
         matnr         TYPE mara-matnr,                            " Materialnummer
         erfmg         TYPE mseg-erfmg,                            " Menge in Erfassungsmengeneinheit (mseg-erfmg) / Menge (mseg-menge)
         entry_uom_iso TYPE bapi2017_gm_item_create-entry_uom_iso, " ISO-Code Maßeinheit
       END OF ty_s_material.

TYPES: ty_it_material TYPE STANDARD TABLE OF ty_s_material WITH KEY matnr.

PARAMETERS: p_test AS CHECKBOX DEFAULT 'X'.

START-OF-SELECTION.

  DATA(it_material) = VALUE ty_it_material( ( matnr = '0815' erfmg = '1' entry_uom_iso = 'PCE' )
                                            ( matnr = '0816' erfmg = '2' entry_uom_iso = 'PCE' )
                                          ).

* Header
  DATA(lv_header) = VALUE bapi2017_gm_head_01( pstng_date    = sy-datum " Buchungsdatum im Beleg
                                               doc_date      = sy-datum " Belegdatum im Beleg
                                               pr_uname      = sy-uname " Benutzername
                                               gr_gi_slip_no = '12345'  " Warenbegleitscheinnummer
                                               header_txt    = 'Text1'  " Belegkopftext
                                               ref_doc_no    = 'Refdoc' " Nummer des externen Materialscheins
                                             ).

* gm_code (siehe auch Tabelle T158G)
* 01  MB01 (Wareneingang zur Bestellung buchen)
* 02  MB31 (Wareneingang zum Fertigungsauftrag)
* 03  MB1A (Warenentnahme)
* 04  MB1B (Umbuchung)
* 05  MB1C (Wareneingang Sonstige)
* 06  MB11 (Warenbewegung)
* 07  MB04 (Nachverrechnung von Beistellmaterial)
  DATA(lv_mvt_code) = VALUE bapi2017_gm_code( gm_code = '03' ). " Zuordnung Code zu Transaktion für BAPI Warenbewegung

* Items für Bewegungsdaten füllen
  DATA(it_items_to_move) = VALUE bapi2017_gm_item_create_t( FOR <m> IN it_material
                                                            (
                                                              material  = CONV #( <m>-matnr ) " 18-stellige Materialnummer
                                                              plant     = '10'                " Werk
                                                              stge_loc  = '01'                " Lagerort
                                                              move_type = '262'               " Bewegungsart (Bestandsführung)
* KZBEW	(Bewegungskennzeichen)
* ' '  Warenbewegung ohne Referenz
*  B  Warenbewegung zur Bestellung
*  F  Warenbewegung zum Auftrag
*  L  Warenbewegung zum Lieferschein
*  K  Warenbewegung zur Kanban-Anforderung (Nur WM intern)
*  O  Nachverrechnung von Beistellmaterial
*  W  Nachverrechnung von Anteils-/Produkt ME Material
                                                              mvt_ind       = ' '                     " Bewegungskennzeichen (Warenbewegung ohne Referenz)
                                                              entry_qnt     = CONV #( <m>-erfmg )     " Menge in Erfassungsmengeneinheit
                                                              entry_uom_iso = <m>-entry_uom_iso       " ISO-Code Maßeinheit
                                                              gl_account    = ''                      " Nummer des Sachkontos
                                                              gr_rcpt       = 'ABC'                   " Warenempfänger
                                                              costcenter    = '100200'                " Kostenstelle
                                                              orderid       = ''                      " Auftragsnummer
                                                              wbs_elem      = ''                      " Projektstrukturplanelement (PSP-Element)
                                                            )
                                                          ).
  DATA(lv_headret) = VALUE bapi2017_gm_head_ret( ).
  DATA(it_return) = VALUE bapiret2_t( ).

  CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
    EXPORTING
      goodsmvt_header  = lv_header
      goodsmvt_code    = lv_mvt_code
      testrun          = p_test
    IMPORTING
      goodsmvt_headret = lv_headret
    TABLES
      goodsmvt_item    = it_items_to_move
      return           = it_return.

* Fehlerauswertung: E - Error, A - Abort
  LOOP AT it_return ASSIGNING FIELD-SYMBOL(<e>).
    WRITE: / |RETURN [{ <e>-type } { <e>-number }]: { <e>-message }|.
  ENDLOOP.

  DATA(lv_return) = VALUE bapiret2( ).

  IF lines( it_return ) > 0.
* Rollback bei Fehler
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
      IMPORTING
        return = lv_return.

    WRITE: / |ROLLBACK [{ lv_return-type } { lv_return-number }]: { lv_return-message }|.
  ELSE.
* Daten verbuchen
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait   = abap_true
      IMPORTING
        return = lv_return.

    WRITE: / |COMMIT [{ lv_return-type } { lv_return-number }]: { lv_return-message }|.
  ENDIF.

Links

[ABAP] MM: Aktuelle Bedarfs-/Bestandsliste / reservierte Bestände analog zur Transaktion MMBE

* http://letscodeabap.blogspot.com/2015/03/get-reservations-in-abap.html
TYPES: BEGIN OF ty_xtab1,
         werks LIKE resb-werks,
         lgort LIKE resb-lgort,
         charg LIKE resb-charg,
         matnr LIKE resb-matnr,
         bdmng LIKE resb-bdmng,
         bdmns LIKE resb-bdmng,
         erfme LIKE resb-erfme,
         erfmg LIKE resb-erfmg,
       END OF ty_xtab1.

PARAMETERS: p_matnr TYPE marc-matnr DEFAULT '1234567890'.
PARAMETERS: p_werks TYPE marc-werks DEFAULT '10'.

START-OF-SELECTION.

  DATA: lv_detail TYPE bapi_mrp_stock_detail.
  DATA: lv_ret TYPE bapiret2.

* Material - Aktuelle Bedarfs-/Bestandsliste
  CALL FUNCTION 'BAPI_MATERIAL_STOCK_REQ_LIST'
    EXPORTING
      material         = p_matnr
      plant            = p_werks
    IMPORTING
      mrp_stock_detail = lv_detail
      return           = lv_ret.

  DATA: xbdart TYPE RANGE OF resb-bdart.

* Range Bedarfsarten
  DATA(rg_resb_bdart) = VALUE rseloption( ( sign   = 'I'
                                            option = 'EQ'
                                            low    = 'AR'
                                            high   = '' )
                                          ( sign   = 'I'
                                            option = 'EQ'
                                            low    = 'MR'
                                            high   = '' ) ).

* Range Werke
  DATA(rg_werks) = VALUE rseloption( ( sign   = 'I'
                                       option = 'EQ'
                                       low    = p_werks
                                       high   = '' ) ).

* Rückgabetabelle mit Beständen
  DATA: it_xtab1 type STANDARD TABLE OF ty_xtab1 WITH DEFAULT KEY.

* Lesen u. addieren v. reservierten Beständen
  CALL FUNCTION 'MB_ADD_RESERVATION_QUANTITIES'
    EXPORTING
      x_kzear = space " Endausfassung der Reservierung
      x_matnr = p_matnr
      x_xloek = space " Position ist gelöscht
    TABLES
      xbdart  = rg_resb_bdart
      xtab1   = it_xtab1
      xwerks  = rg_werks.

  cl_demo_output=>write_data( lv_ret ).
  cl_demo_output=>write_data( lv_detail ).
  cl_demo_output=>write_data( it_xtab1 ).
  cl_demo_output=>display( ).

[ABAP] BAPI: Bestellung anzeigen

* Bestellung
PARAMETERS: p_po TYPE bapimepoheader-po_number DEFAULT '0001234567'.

* Bestellung Kopfdaten
DATA: lv_bapimepoheader TYPE bapimepoheader.
* Returnparameter
DATA: it_return TYPE STANDARD TABLE OF bapiret2 WITH DEFAULT KEY.
* Bestellposition
DATA: it_poitem TYPE STANDARD TABLE OF bapimepoitem WITH DEFAULT KEY.
* Felder für Einteilungen der Bestellung
DATA: it_poschedule TYPE STANDARD TABLE OF bapimeposchedule WITH DEFAULT KEY.
* Kontierungsfelder der Bestellung
DATA: it_poaccount TYPE STANDARD TABLE OF bapimepoaccount WITH DEFAULT KEY.
* Kommunikationsstruktur Anlegen Leistungszeile
DATA: it_poservices TYPE STANDARD TABLE OF bapiesllc WITH DEFAULT KEY.
* Komm.struktur Anlege Kontierungsverteilung Leistungszeile
DATA: it_posrvaccessvalues TYPE STANDARD TABLE OF bapiesklc WITH DEFAULT KEY.

* Detailinformationen für eine Bestellung
CALL FUNCTION 'BAPI_PO_GETDETAIL1'
  EXPORTING
    purchaseorder      = p_po
    account_assignment = abap_true
    item_text          = abap_true
    header_text        = abap_true
    services           = abap_true
  IMPORTING
    poheader           = lv_bapimepoheader
*   POEXPIMPHEADER     =
  TABLES
    return             = it_return
    poitem             = it_poitem
    poschedule         = it_poschedule
    poaccount          = it_poaccount
    poservices         = it_poservices
    posrvaccessvalues  = it_posrvaccessvalues.

cl_demo_output=>write_data( it_return ).
cl_demo_output=>write_data( lv_bapimepoheader ).
cl_demo_output=>write_data( it_poitem ).
cl_demo_output=>write_data( it_poschedule ).
cl_demo_output=>write_data( it_poaccount ).
cl_demo_output=>write_data( it_poservices ).
cl_demo_output=>write_data( it_posrvaccessvalues ).

* HTML-Code holen
DATA(lv_html) = cl_demo_output=>get( ).
* Daten im Inline-Browser im SAP-Fenster anzeigen
cl_abap_browser=>show_html( EXPORTING
                              title        = 'Daten zur Bestellung'
                              html_string  = lv_html
                              container    = cl_gui_container=>default_screen ).
* cl_gui_container=>default_screen erzwingen
WRITE: space.

[ABAP] BAPI: Bestellung ändern

* Bestellung
PARAMETERS: p_po TYPE bapimepoheader-po_number DEFAULT '0001234567'.
* Testmodus
PARAMETERS: p_test TYPE bapiflag-bapiflag DEFAULT abap_true.
* Authority-Check
PARAMETERS: p_noauth TYPE bapiflag-bapiflag DEFAULT abap_true.

* Returnparameter
DATA: it_return TYPE STANDARD TABLE OF bapiret2 WITH DEFAULT KEY.
* Bestellung Kopfdaten
DATA: lv_bapimepoheader TYPE bapimepoheader.
* Bestellung Kopfdaten (Änderungsleiste)
DATA: lv_bapimepoheaderx TYPE bapimepoheaderx.
* Bestellposition
DATA: it_bapimepoitem TYPE STANDARD TABLE OF bapimepoitem WITH DEFAULT KEY.
* Bestellung Positionsdaten (Änderungsleiste)
DATA: it_bapimepoitemx TYPE STANDARD TABLE OF bapimepoitemx WITH DEFAULT KEY.

* Headerdaten
lv_bapimepoheader = VALUE #( po_number = p_po
                             pmnttrms = 'ZB03'
                           ).

* Flags zum Ändern der Headerdaten
lv_bapimepoheaderx = VALUE #( po_number = abap_true
                              pmnttrms = abap_true
                            ).

* Positionsdaten
it_bapimepoitem = VALUE #( ( po_item = '00001'
                             quantity = '1.0'
                           )
                         ).

* Flags zum Ändern der Positionsdaten
it_bapimepoitemx = VALUE #( ( po_item = '00001'
                              po_itemx = abap_true
                              quantity = abap_true
                            )
                          ).

* Bestellung ändern
CALL FUNCTION 'BAPI_PO_CHANGE'
  EXPORTING
    purchaseorder = p_po
    no_authority  = p_noauth
    testrun       = p_test
    poheader      = lv_bapimepoheader
    poheaderx     = lv_bapimepoheaderx
  TABLES
    return        = it_return
    poitem        = it_bapimepoitem
    poitemx       = it_bapimepoitemx.

* Wenn keine Fehler, dann COMMIT
IF NOT line_exists( it_return[ type = 'E' ] ).
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = abap_true.
ENDIF.

* Ausgabe der Meldungen
cl_demo_output=>write_data( it_return ).

* HTML-Code holen
DATA(lv_html) = cl_demo_output=>get( ).
* Daten im Inline-Browser im SAP-Fenster anzeigen
cl_abap_browser=>show_html( EXPORTING
                              title        = 'Daten zur Bestellung'
                              html_string  = lv_html
                              container    = cl_gui_container=>default_screen ).
* cl_gui_container=>default_screen erzwingen
WRITE: space.

[ABAP] BAPI: Bestellung anlegen

PARAMETERS: p_bukrs TYPE bukrs DEFAULT '0001'.
PARAMETERS: p_bsart TYPE bsart DEFAULT 'NB'.
PARAMETERS: p_ekorg TYPE ekorg DEFAULT '0001'.
PARAMETERS: p_ekgrp TYPE ekgrp DEFAULT '123'.
PARAMETERS: p_werks TYPE werks DEFAULT '01'.
PARAMETERS: p_lgort TYPE lgort_d DEFAULT '10'.
PARAMETERS: p_matnr TYPE matnr DEFAULT '1234567890'.
PARAMETERS: p_vendor TYPE lifnr DEFAULT '0000012345'.

* Testmodus
PARAMETERS: p_test TYPE bapiflag-bapiflag DEFAULT abap_true.
* Authority-Check
PARAMETERS: p_noauth TYPE bapiflag-bapiflag DEFAULT abap_true.

* Returnparameter
DATA: it_return TYPE STANDARD TABLE OF bapiret2 WITH DEFAULT KEY.
DATA: it_poitem TYPE STANDARD TABLE OF bapimepoitem WITH DEFAULT KEY.
DATA: it_poitemx TYPE STANDARD TABLE OF bapimepoitemx WITH DEFAULT KEY.

DATA(ls_poheader) = VALUE bapimepoheader( comp_code  = p_bukrs
                                          doc_type   = p_bsart
                                          purch_org  = p_ekorg
                                          pur_group  = p_ekgrp
                                          doc_date   = sy-datum
                                          suppl_plnt = p_werks
                                          vendor     = p_vendor
                                        ).

DATA(ls_poheaderx) = VALUE bapimepoheaderx( comp_code  = abap_true
                                            doc_type   = abap_true
                                            purch_org  = abap_true
                                            pur_group  = abap_true
                                            doc_date   = abap_true
                                            suppl_plnt = abap_true
                                            vendor     = abap_true
                                          ).


it_poitem = VALUE #( ( po_item  = '00001'
                       material = p_matnr
                       plant    = p_werks
                       stge_loc = p_lgort
                       quantity = '1.0'
                     )
                   ).

it_poitemx = VALUE #( ( po_item  = '00001'
                        material = abap_true
                        plant    = abap_true
                        stge_loc = abap_true
                        quantity = abap_true
                      )
                    ).

DATA: lv_new_po TYPE bapimepoheader-po_number.
DATA: lv_expheader TYPE bapimepoheader.
DATA: lv_exppoexpimpheader TYPE bapieikp.

* Bestellung anlegen
CALL FUNCTION 'BAPI_PO_CREATE1'
  EXPORTING
    no_authority      = p_noauth
    testrun           = p_test
    poheader          = ls_poheader
    poheaderx         = ls_poheaderx
  IMPORTING
    exppurchaseorder  = lv_new_po
    expheader         = lv_expheader
    exppoexpimpheader = lv_exppoexpimpheader
  TABLES
    return            = it_return
    poitem            = it_poitem
    poitemx           = it_poitemx.

IF NOT lv_new_po IS INITIAL.
* Wenn Bestellung angelegt wurde, COMMIT durchführen
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = abap_true.
ELSE.
  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ENDIF.

* Ausgabe der Meldungen
cl_demo_output=>write_data( it_return ).
cl_demo_output=>write_data( it_poitem ).
cl_demo_output=>write_data( it_poitemx ).
cl_demo_output=>write_data( lv_new_po ).
cl_demo_output=>write_data( lv_expheader ).
cl_demo_output=>write_data( lv_exppoexpimpheader ).

* HTML-Code holen
DATA(lv_html) = cl_demo_output=>get( ).
* Daten im Inline-Browser im SAP-Fenster anzeigen
cl_abap_browser=>show_html( EXPORTING
                              title        = 'Daten zur Bestellung'
                              html_string  = lv_html
                              container    = cl_gui_container=>default_screen ).
* cl_gui_container=>default_screen erzwingen
WRITE: space.