* MATNR
PARAMETERS: p_matnr TYPE mara-matnr.
* Bewertungskreis
PARAMETERS: p_bwkey TYPE t001k-bwkey.
* Preis
PARAMETERS: p_price TYPE bapi_matval_prices-price DEFAULT '1.00'.
* Währung
PARAMETERS: p_waers TYPE tcurc-waers DEFAULT 'EUR'.
START-OF-SELECTION.
* Bewertungskreis (MBEW-BWKEY) == WERKS
DATA(lv_valuationarea) = CONV bapi_matval_key-val_area( p_bwkey ).
* Bewertungsart (MBEW-BWTAR), siehe Tabelle T149D
DATA(lv_valuationtype) = CONV bapi_matval_key-val_type( ' ' ).
* Struktur Preisänderungs-Datum
DATA(lv_pricedate) = VALUE bapi_matval_pricedate( price_date = sy-datum
fisc_period = sy-datum+4(2)
fisc_year = sy-datum+0(4)
).
* Belegkopftext
DATA(lv_doc_header_text) = CONV bktxt( 'Materialbeleg Text' ).
* Material-Ledger-Typ zum Bewertungskreis
SELECT SINGLE FROM tckm2
FIELDS matled
WHERE bwkey = @p_bwkey
INTO @DATA(lv_matled).
IF sy-subrc = 0.
* Währungs-, Bewertungstypen zum Material-Ledger-Typ
* CURTP (Währungstyp)
SELECT FROM tckmit
INNER JOIN tcval ON tckmit~cvtyp = tcval~cvtyp
FIELDS tckmit~cvtyp, " Währungs- und Bewertungstyp
tcval~currtyp, " Währungstyp
tcval~valutyp " Bewertungssicht
WHERE matled = @lv_matled
INTO TABLE @DATA(it_cvtyp).
IF sy-subrc = 0.
* Währungscodes
SELECT SINGLE FROM tcurc
FIELDS altwr
WHERE waers = @p_waers
INTO @DATA(lv_iso).
IF sy-subrc = 0.
* Preise für alle Währungstypen (CVTYP) setzen
DATA: it_prices TYPE STANDARD TABLE OF bapi_matval_prices WITH DEFAULT KEY.
LOOP AT it_cvtyp ASSIGNING FIELD-SYMBOL(<cv>).
* Beispiel:
* Preise + Währungen für alle Währungstypen des Ledgers zum Bewertungskreis gleich setzen
* Beachte: es gibt andere Anwendungsfälle, insbesondere bei abweichenden Währungstypen (anderen Konzernwährungen (USD usw.)),
* bei denen die Preise unterschiedlich sein können
* siehe auch MM03 (Reiter "Buchhaltung 1")
APPEND VALUE #( valuation_view = <cv>-valutyp " DOMÄNE VALUTYP: 0 - Legale Bewertung, 1 - Konzernbewertung, 2 - Profit-Center-Bewertung
curr_type = <cv>-cvtyp " 10 - Buchungskreiswährung, 30 - Konzernwährung, 31 - Konzernwährung, Konzernbewertung
currency = p_waers " EUR
currency_iso = lv_iso " EUR -> 978
price_unit = 1 " Preiseinheit aus MBEW-BWPEI
price = p_price ) TO it_prices. " Preis ggf. aus MBEW-VERPR
ENDLOOP.
* Materialpreis-Änderungsbeleg
DATA: lv_pricechangedocument TYPE bapi_pricechange_document.
* Fehlermeldungen des BAPIs
DATA(it_bapiret2) = VALUE bapiret2_t( ).
* Materialpreis-Änderung
* Voraussetzung ist Pflege der Materialbewertung zum Materialstamm
CALL FUNCTION 'BAPI_MATVAL_PRICE_CHANGE'
EXPORTING
material = CONV bapi_matval_key-material( p_matnr ) " MARA-MATNR
valuationarea = lv_valuationarea " MBEW-BWKEY
valuationtype = lv_valuationtype " MBEW-BWTAR
pricedate = lv_pricedate
doc_header_text = lv_doc_header_text
IMPORTING
pricechangedocument = lv_pricechangedocument
TABLES
prices = it_prices
return = it_bapiret2.
IF lines( it_bapiret2 ) > 0.
IF it_bapiret2[ 1 ]-type CA 'EAX'.
* bei Fehler: Rollback
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
DATA(lv_return) = VALUE bapiret2( ).
* alles ok: COMMIT
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true
IMPORTING
return = lv_return.
ENDIF.
ENDIF.
cl_demo_output=>write_data( p_matnr ).
cl_demo_output=>write_data( p_bwkey ).
cl_demo_output=>write_data( lv_pricedate ).
cl_demo_output=>write_data( lv_doc_header_text ).
cl_demo_output=>write_data( it_prices ).
cl_demo_output=>write_data( lv_pricechangedocument ).
cl_demo_output=>write_data( it_bapiret2 ).
cl_demo_output=>write_data( lv_return ).
* 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 = 'Daten'
html_string = lv_html
container = cl_gui_container=>default_screen ).
* cl_gui_container=>default_screen erzwingen
WRITE: space.
ENDIF.
ENDIF.
ENDIF.