關於BAPI_ACC_DOCUMENT_POST解讀

BAPI_ACC_DOCUMENT_POST是SAP ERP提供生成會計憑證的標準BAPI,這個BAPI能夠用到多種場景生成會計憑證,實際項目中通常狀況下更多的是生成應收和應付的會計憑證,分別對應客戶和供應商,本例使用該BAPI生成資產價值,對應前臺事務爲F-90.api

使用F-90,前臺作憑證通常是一行是供應商(應付),一行是資產(總賬),所以使用BAPI_ACC_DOCUMENT_POST建立資產價值的時候應該按照這樣填充值,須要注意如下參數賦值,對於資產行,因爲資產主數據上有科目定位碼這個字段,對應是在事務代碼AO90中配置了科目,對於資產價值須要使用購置和生產成本這個科目,因此在BAPI中也要使用這個科目;科目類型要給A(若是不給A,BAPI的返回消息中會提示科目1601050000不能直接記賬);業務範圍本例給的0001,這個取決於資產主數據是否填寫,若是填寫F-90作憑證的時候能夠直接帶過來,BAPI中則能夠賦值,沒填寫就能夠不使用;次級資產編號標準定義的是CHAR4,在使用BAPI時必定要給足四位,不然會報錯(報資產XX不屬於公司代碼XX)。根據公司代碼,賬目表,科目定位碼能夠在AO90中找到對應的關於資產的科目配置,以下圖所示,1601050000在FS00中是資產類型的統馭科目,


ssh

另外對於資產來講還須要業務類型字段(對應F-90中的字段是事務類型),因爲BAPI中的ACCOUNTGL中沒有該字段,所以須要手動擴充,創建在EXTENSION2中,並結合BADI使用,創建的擴充結構以下,字段名字參照BSEG。


3d

生成的憑證:

code

關於BAPI_ACC_DOCUMENT_POST,標準給了應收(客戶)和應付(供應商)的參數,ACCOUNTRECEIVABLE和ACCOUNTPAYABLE,應收和應付相關的信息應該放在這兩個表裏,其餘總帳科目行應該放在ACCOUNTGL,其實對於應收和應付來講,都會對應一個統馭科目,這個統馭科目也是總帳科目,只不過是對於應收和應付BAPI單獨會在ACCOUNTRECEIVABLE和ACCOUNTPAYABLE處理。blog

參考樣例代碼,供讀者參考,
REPORT zssh_test_create_asset_value.
*經過BAPI建立資產價值 對應事務爲F-90事務

DATA:ls_doc_header TYPE bapiache09,
lt_accountgl TYPE TABLE OF bapiacgl09,
ls_accountgl TYPE bapiacgl09,
lt_accountpayable TYPE TABLE OF bapiacap09,
ls_accountpayable TYPE bapiacap09,
lt_currencyamount TYPE TABLE OF bapiaccr09,
ls_currencyamount TYPE bapiaccr09,
lt_extension2 TYPE TABLE OF bapiparex,
ls_extension2 TYPE bapiparex,
lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2,
ls_asset_value TYPE zssh_test_asset_value_str.ip

ls_doc_header-comp_code = 'ZSSH'.
ls_doc_header-fisc_year = 2020.
ls_doc_header-fis_period = 11.
ls_doc_header-doc_type = 'KR'.ci

ls_doc_header-pstng_date = '20201116'.
ls_doc_header-doc_date = '20201116'. " 憑證中的憑證日期
ls_doc_header-header_txt = 'BAPI_ACC_DOCUMENT_POST建立資產價值'. " 憑證擡頭文本
ls_doc_header-username = sy-uname. " 用戶名
ls_doc_header-ref_doc_no = 'BAPI_ACC_DOCUMENT_POST'.it

*應付科目行
ls_accountpayable-itemno_acc = 1. "會計憑證行項目 1
ls_accountpayable-comp_code = 'ZSSH'. "公司代碼
ls_accountpayable-profit_ctr = 'LZSSH00001'. "利潤中心
ls_accountpayable-item_text = 'BAPI_ACC_DOCUMENT_POST建立資產價值'. "行項目文本
ls_accountpayable-gl_account = '2202010000'. "總帳科目
ls_accountpayable-vendor_no = '0401000015'. "客戶代碼
ls_accountpayable-pmnttrms = 'ZZ99'.
ls_accountpayable-bline_date = '20201116'. "付款基準日期
APPEND ls_accountpayable TO lt_accountpayable.
ls_currencyamount-itemno_acc = 1. "會計憑證行項目編號
ls_currencyamount-amt_doccur = 120 * '-1'.
ls_currencyamount-curr_type = '00'.
ls_currencyamount-currency = 'RMB' .
APPEND ls_currencyamount TO lt_currencyamount.pip

*資產科目行
ls_accountgl-itemno_acc = 2. " 會計憑證行項目 2
ls_accountgl-comp_code = 'ZSSH'. " 公司代碼
ls_accountgl-item_text = 'BAPI_ACC_DOCUMENT_POST建立資產價值'. " 行項目文本
ls_accountgl-gl_account = '1601050000'. " 總分類賬賬目
ls_accountgl-asset_no = '180207000015'.
ls_accountgl-sub_number = '0000'.
*ls_accountgl-cs_trans_t = '100'."事務類型
*ls_accountgl-acct_key = '100'.
ls_accountgl-acct_type = 'A'. "資產
ls_accountgl-bus_area = '0001'. "業務部門 業務類別
APPEND ls_accountgl TO lt_accountgl.
ls_currencyamount-itemno_acc = 2. "會計憑證行項目編號
ls_currencyamount-amt_doccur = 120.
ls_currencyamount-curr_type = '00'.
ls_currencyamount-currency = 'RMB' .
APPEND ls_currencyamount TO lt_currencyamount.
ls_asset_value-posnr = 2.
ls_asset_value-anbwa = '100'.
ls_extension2-structure = 'ZSSH_TEST_ASSET_VALUE_STR'.
ls_extension2+30(960) = ls_asset_value.
APPEND ls_extension2 TO lt_extension2.

CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = ls_doc_header

  • CUSTOMERCPD =
  • CONTRACTHEADER =
  • IMPORTING
  • OBJ_TYPE =
  • OBJ_KEY =
  • OBJ_SYS =
    TABLES
    accountgl = lt_accountgl
  • ACCOUNTRECEIVABLE =
    accountpayable = lt_accountpayable
  • ACCOUNTTAX =
    currencyamount = lt_currencyamount
  • CRITERIA =
  • VALUEFIELD =
  • EXTENSION1 =
    return = lt_return
  • PAYMENTCARD =
  • CONTRACTITEM =
    extension2 = lt_extension2
  • REALESTATE =
  • ACCOUNTWT =
    .

LOOP AT lt_return INTO ls_return WHERE type CA 'AE'.
WRITE:/ ls_return-id,ls_return-number,ls_return-message.
CLEAR ls_return.
ENDLOOP.
IF sy-subrc NE 0.
LOOP AT lt_return INTO ls_return WHERE type EQ 'S'.
WRITE:/ ls_return-id,ls_return-number,ls_return-message.
CLEAR ls_return.
ENDLOOP.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.

BADI:ACC_DOCUMENT
METHOD if_ex_acc_document~change.

DATA:ls_asset_value TYPE zssh_test_asset_value_str,
ls_extension2 TYPE bapiparex,
ls_accit TYPE accit.

CHECK sy-uname EQ 'SHISH'.
LOOP AT c_extension2 INTO ls_extension2.
ls_asset_value = ls_extension2+30(960).

CLEAR ls_accit.
READ TABLE c_accit INTO ls_accit WITH KEY posnr = ls_asset_value-posnr.
IF sy-subrc EQ 0.
  MOVE-CORRESPONDING ls_asset_value TO ls_accit.
  MODIFY c_accit FROM ls_accit INDEX sy-tabix. "lv_tabix.
ENDIF.

ENDLOOP.

ENDMETHOD.

相關文章
相關標籤/搜索