【ABAP】BAPI_PRICES_CONDITIONS SAMPLE CODE2
条件マスタの内容を登録更新を行うBAPI, BAPI_PRICES_CONDITIONSの動作検証時に作成したサンプルコードです。
条件タイプPB00、条件テーブルA018でのサンプルです。 品目コードを18バイトで設定しないとゴミデータを登録するので注意が必要です。 条件マスタ関連およびBAPI_PRICES_CONDITIONSの説明は Qiitaにて記事を作成しています。
サンプルコード
TYPES: tt_bapicondct TYPE TABLE OF bapicondct, tt_bapicondhd TYPE TABLE OF bapicondhd, tt_bapicondit TYPE TABLE OF bapicondit, tt_bapicondqs TYPE TABLE OF bapicondqs, tt_bapicondvs TYPE TABLE OF bapicondvs, tt_bapiret2 TYPE TABLE OF bapiret2, tt_bapiknumhs TYPE TABLE OF bapiknumhs, tt_mem_initial TYPE TABLE OF cnd_mem_initial. DATA: it_bapicondct TYPE tt_bapicondct, it_bapicondhd TYPE tt_bapicondhd, it_bapicondit TYPE tt_bapicondit, it_bapicondqs TYPE tt_bapicondqs, it_bapicondvs TYPE tt_bapicondvs, it_bapiret2 TYPE tt_bapiret2, it_bapiknumhs TYPE tt_bapiknumhs, it_men_initial TYPE tt_mem_initial. data(l_table_no) = '018'. data(l_operation) = '009'. data(l_cond_usage) ='A'. data(l_applicatio) = 'M'. data(l_cond_no) = '$000000001'. "新規登録時に使用するダミーの条件レコード番号 data(l_cond_type) = 'PB00'. data(l_valid_from) = '20250101'. data(l_valid_to) = '20251231'. * 変数キー項目定義 data(varkey_lifnr) = |{ '100015' alpha = in width = 10 }|. data(varkey_matnr) = |{ 'T-M15A01' alpha = in width = 18 }|. "NOT 40 data(varkey_EKORG) = |{ '1000' width = 4 }|. data(varkey_ESOKZ) = |{ '0' width = 1 }|. data(l_varkey) = |{ varkey_lifnr }{ varkey_matnr }{ varkey_ekorg }{ varkey_esokz }|. it_bapicondct = VALUE #( ( operation = l_operation cond_usage = l_cond_usage table_no = l_table_no applicatio = l_applicatio cond_type = l_cond_type varkey = l_varkey valid_to = l_valid_to valid_from = l_valid_from cond_no = l_cond_no ) ). it_bapicondhd = VALUE #( ( operation = l_operation cond_no = l_cond_no created_by = sy-uname creat_date = sy-datum cond_usage = l_cond_usage table_no = l_table_no applicatio = l_applicatio cond_type = l_cond_type varkey = l_varkey valid_from = l_valid_from valid_to = l_valid_to ) ). it_bapicondit = VALUE #( ( operation = l_operation cond_no = l_cond_no cond_count = '01' applicatio = l_applicatio cond_type = l_cond_type scaletype = 'A' * scalebasin = '' * scale_qty = '0' cond_p_unt = '1' cond_unit = 'ST' "NOT PC calctypcon = 'C' cond_value = '1500' condcurr = 'JPY' ) ). CALL FUNCTION 'BAPI_PRICES_CONDITIONS' * EXPORTING * pi_initialmode = 'X' **PI_BLOCKNUMBER = * PI_PHYSICAL_DELETION = abap_on TABLES ti_bapicondct = it_bapicondct ti_bapicondhd = it_bapicondhd ti_bapicondit = it_bapicondit ti_bapicondqs = it_bapicondqs ti_bapicondvs = it_bapicondvs to_bapiret2 = it_bapiret2 to_bapiknumhs = it_bapiknumhs to_mem_initial = it_men_initial EXCEPTIONS update_error = 1 OTHERS = 2. cl_demo_output=>write( sy-subrc ). cl_demo_output=>write( it_bapiret2 ). IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. * IMPORTING * RETURN = . ELSE. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. cl_demo_output=>display( ).