Funktionsbaustein BAPI PO CREATE1
Aus SAP-Wiki
Zur Navigation springenZur Suche springen
Siehe Kategorie: BAPI.
Siehe Sammlung Funktionsbausteine.
Mit dem Funktionsbaustein 'BAPI_PO_CREATE1' wird eine Bestellung, bzw. Umlagerbestellung im SAP-System angelegt und wird daher recht oft benötigt.
Hier ein Beispiel aus dem Projektalltag.
* Erstellung Umlagerbestellung
METHOD create_bapi_po_create1.
DATA: ls_poheader TYPE bapimepoheader,
ls_poheaderx TYPE bapimepoheaderx,
lt_poitem TYPE STANDARD TABLE OF bapimepoitem,
ls_poitem TYPE bapimepoitem ##NEEDED,
lv_po_item TYPE ebelp,
lt_poitemx TYPE STANDARD TABLE OF bapimepoitemx,
ls_poitemx TYPE bapimepoitemx,
* lt_popartner TYPE STANDARD TABLE OF bapiekkop,
* lt_poshipping TYPE STANDARD TABLE OF bapiitemship,
* lt_poshippingx TYPE STANDARD TABLE OF bapiitemshipx,
lt_return_ub TYPE STANDARD TABLE OF bapiret2,
lv_po_number TYPE bapimepoheader-po_number ##NEEDED,
ls_expheader TYPE bapimepoheader ##NEEDED,
ls_exppoexpimpheader TYPE bapieikp ##NEEDED,
lv_our_ref TYPE unsez,
lv_material type mara-matnr.
CONSTANTS:
lc_doc_type_ub TYPE bapimepoheader-doc_type VALUE 'UB',
lc_vendor_1010 TYPE bapimepoheader-vendor VALUE '1010',
lc_purch_org_1010 TYPE bapimepoheader-purch_org VALUE '1010',
lc_pur_group_007 TYPE bapimepoheader-pur_group VALUE '007',
lc_curr_eur TYPE bapimepoheader-currency VALUE 'EUR',
lc_werk_1010 TYPE bapimepoheader-suppl_plnt VALUE '1010',
lc_plant_1044 TYPE bapimepoitem-plant VALUE '1044',
lc_stge_loc_144a TYPE bapimepoitem-stge_loc VALUE '144A',
lc_shiptype_ds TYPE bapimepoitem-shiptype VALUE 'DS'.
* Die Fortlaufende Nummer in das Feld "Unser Zeichen" der Umlagerbestellung schreiben,
* damit man eine Referenz auf den Prozeß der Umlagerbestellung UK hat
* z. B. "UML: 16"
lv_our_ref = |UML: { mv_nummer ALPHA = OUT }|. "aus dem Feld MV_NUMMER führende Nullen entfernen
* Kopffelder Umlagerbestellung füllen
ls_poheader = VALUE #( our_ref = lv_our_ref "Unser Zeichen
comp_code = mp_bukrs "Buchungskreis
doc_type = lc_doc_type_ub "Einkaufsbelegart
creat_date = sy-datum "Erstellungsdatum
created_by = sy-uname "Ersteller
"ITEM_INTVL = "Positionsnummer-Intervall
vendor = lc_vendor_1010 "Lieferant
purch_org = lc_purch_org_1010 "Einkaufsorganisation
pur_group = lc_pur_group_007 "Einkäufergruppe
currency = lc_curr_eur "Währung
suppl_plnt = lc_werk_1010 ). "Werk
ls_poheaderx = VALUE #( our_ref = abap_true
comp_code = abap_true "X-Buchungskreis
doc_type = abap_true "X-Einkaufsbelegart
creat_date = abap_true "X-Erstellungsdatum
created_by = abap_true "X-Ersteller
vendor = abap_true "X-Lieferant
purch_org = abap_true "X-Einkaufsorganisation
pur_group = abap_true "X-Einkäufergruppe
currency = abap_true "X-Währung
suppl_plnt = abap_true ). "X-Werk
* Positionsfelder Umlagerbestellung füllen: Komponenten Zelt oder Ersatzteile
LOOP AT ct_itab ASSIGNING FIELD-SYMBOL(<fs_itab>).
* Position füllen
ADD 10 TO lv_po_item.
* Positionsdaten füllen
ls_poitem = VALUE #( po_item = lv_po_item "Positionsnummer
material = <fs_itab>-matnr "Material
plant = lc_plant_1044 "Ziel-Werk
stge_loc = lc_stge_loc_144a "Ziel-Lagerort
quantity = <fs_itab>-menge_del "Liefermenge
suppl_stloc = <fs_itab>-lgort "Quell-Lagerort
shiptype = lc_shiptype_ds "Direct Shipping
).
APPEND ls_poitem TO lt_poitem.
* Änderungsstruktur zur Position füllen
ls_poitemx = VALUE #( po_item = lv_po_item "Positionsnummer
material = abap_true "X-Material
plant = abap_true "X-Ziel-Werk
stge_loc = abap_true "X-Ziel-Lagerort
quantity = abap_true "X-Liefermenge
suppl_stloc = abap_true "X-Quell-Lagerort
shiptype = abap_true "X-Direct Shipping
).
APPEND ls_poitemx TO lt_poitemx.
ENDLOOP.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = ls_poheader
poheaderx = ls_poheaderx
IMPORTING
exppurchaseorder = lv_po_number
expheader = ls_expheader
exppoexpimpheader = ls_exppoexpimpheader
TABLES
return = lt_return_ub
poitem = lt_poitem
poitemx = lt_poitemx.
* popartner = lt_popartner
* poshipping = lt_poshipping
* poshippingx = lt_poshippingx.
IF lt_return_ub IS NOT INITIAL.
...
ENDIF.
* Commit work and wait sollte nicht nötig sein. So wird es ein wenig schneller ausgeführt
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ENDMETHOD.