SAP技術者のサンプルコード置き場

ABAPの動作確認をしたコードと簡単な説明を置いておきます。

【ABAP】BAPI_PRICES_CONDITIONS SAMPLE CODE2

条件マスタの内容を登録更新を行うBAPI, BAPI_PRICES_CONDITIONSの動作検証時に作成したサンプルコードです。

条件タイプPB00、条件テーブルA018でのサンプルです。 品目コードを18バイトで設定しないとゴミデータを登録するので注意が必要です。 条件マスタ関連およびBAPI_PRICES_CONDITIONSの説明は Qiitaにて記事を作成しています。

qiita.com

サンプルコード

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( ).