用BAPI_ACC_DOCUMENT_POST過帳生成憑證

 

根據前臺須要輸入參數,在bapi裏面傳值,不一樣業務所需參數不一樣。api

dome1:dom

 "bapi結構賦值
    LOOP AT lt_item INTO lw_item.
      wa_documentheader-comp_code = lw_item-bukrs"公司代碼
      wa_documentheader-doc_date   = p_date.       "憑證日期
      wa_documentheader-pstng_date = p_date.       "過帳日期
      wa_documentheader-doc_type 'Z4'.
      wa_documentheader-username = sy-uname.
      wa_documentheader-fisc_year = p_date+0(4).
      wa_documentheader-header_txt '合同稅率計算過帳'.
      wa_documentheader-fis_period = sy-datum+4(2).

      CLEAR :wa_accountgl.
      lv_i = lv_i + 1.
      wa_accountgl-itemno_acc = lv_i.              "會計憑證行項目編號
      wa_accountgl-gl_account '6051060000'.        "總分類賬賬目
      wa_accountgl-item_text '合同稅率計算過帳'.
      wa_accountgl-profit_ctr = lw_item-prctr.     "利潤中心
      APPEND wa_accountgl TO lt_accountgl.

      CLEAR wa_currency_amount.
      wa_currency_amount-itemno_acc = lv_i.     "行項目編號
      wa_currency_amount-amt_doccur = lw_item-taxamount.  "金額
      wa_currency_amount-currency   'CNY'.
      APPEND wa_currency_amount TO lt_currency_amount.

      CLEAR:wa_zbapi_acc01,wa_extension2.
      wa_zbapi_acc01-posnr = lv_i.
      wa_zbapi_acc01-xnegp 'X'.               "反記帳
      wa_zbapi_acc01-bschl '40'.
      wa_extension2-structure 'ZBAPI_ACC01'.
      wa_extension2-valuepart1 = wa_zbapi_acc01.
      APPEND wa_extension2 TO lt_extension2.

      CLEAR :wa_accountgl.
      lv_i = lv_i + 1.
      wa_accountgl-itemno_acc = lv_i.           "會計憑證行項目編號
      wa_accountgl-gl_account = lw_item-acctcode.   "總分類賬賬目
      wa_accountgl-item_text '合同稅率計算過帳'.
      wa_accountgl-profit_ctr = lw_item-prctr.    "利潤中心
      APPEND wa_accountgl TO lt_accountgl.

      CLEAR wa_currency_amount.
      wa_currency_amount-itemno_acc = lv_i.    "行項目編號
      wa_currency_amount-amt_doccur - lw_item-taxamount.  "金額
      wa_currency_amount-currency   'CNY'.
      APPEND wa_currency_amount TO lt_currency_amount.

      CLEAR:wa_zbapi_acc01,wa_extension2.
      wa_zbapi_acc01-posnr = lv_i.
      wa_zbapi_acc01-bschl '50'.
      wa_extension2-structure 'ZBAPI_ACC01'.
      wa_extension2-valuepart1 = wa_zbapi_acc01.
      APPEND wa_extension2 TO lt_extension2.

      "財務憑證爲999行,到900行時,進行財務憑證拆分;調用bapi生成憑證
      IF lv_i >= 999.
        CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
          EXPORTING
            documentheader = wa_documentheader
          IMPORTING
            obj_type       = lv_obj_type
            obj_key        = lv_obj_key
            obj_sys        = lv_obj_sys
          TABLES
            accountgl      = lt_accountgl
            currencyamount = lt_currency_amount
            return         = lt_return
            extension2     = lt_extension2.
spa

 CLEAR wa_return.
        READ TABLE lt_return INTO wa_return WITH KEY type 'E'.
        IF sy-subrc 0.
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'"失敗
          LOOP AT lt_return INTO wa_return WHERE type 'E'.
            ls_item-mesg = ls_item-mesg && '' && wa_return-message.
          ENDLOOP.
          ls_item-mesg =  '@0A@' && '過帳失敗:' && ls_item-mesg.
          ls_item-status 'E'.
        ELSE.

          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' "成功
            EXPORTING
              wait 'X'.
          CONCATENATE '@08@' '過帳成功' INTO ls_item-mesg.
          ls_item-status 'S'.
ENDIF.         

CLEAR : lv_i,wa_documentheader,lt_accountgl,wa_accountgl,lt_currency_amount,             wa_currency_amount
,lt_extension2,lt_extension2[].       
ENDIF.     
ENDLOOP.

code

demo2:it

LOOP AT  gt_item INTO gs_item.     

AT NEW bukrs.       
CLEAR:lv_i,wa_documentheader,lt_accountgl,wa_accountgl,lt_currency_amount,       wa_currency_amount
,lt_extension2,lt_extension2[].       wa_documentheader
-comp_code = gs_item-bukrs.       
READ TABLE gt_item INTO gs_item INDEX sy-tabix.       wa_documentheader
-doc_date   = p_budat.     "憑證日期       wa_documentheader
-pstng_date = p_budat.     "過帳日期       wa_documentheader
-doc_type 'SA'.       wa_documentheader
-username = sy-uname.       wa_documentheader
-header_txt '調整折舊費用分攤'.     
ENDAT.     

IF gs_item-mes IS INITIAL.       
CLEAR :wa_accountgl.       lv_i 
= lv_i + 1.       wa_accountgl
-itemno_acc = lv_i.                "會計憑證行項目編號       wa_accountgl
-gl_account = gs_item-ktnafg.      "總分類賬賬目       wa_accountgl
-costcenter = gs_item-kostl.       "成本中心       wa_accountgl
-item_text '調整折舊費用分攤'.       wa_accountgl
-profit_ctr = gs_item-bukrs.       "利潤中心       
APPEND wa_accountgl TO lt_accountgl.       

CLEAR wa_currency_amount.       wa_currency_amount
-itemno_acc = lv_i.             "行項目編號       wa_currency_amount
-amt_doccur - gs_item-nafaz.  "金額       wa_currency_amount
-currency   'CNY'.       
APPEND wa_currency_amount TO lt_currency_amount.       

CLEAR :wa_accountgl.       lv_i 
= lv_i + 1.       wa_accountgl
-itemno_acc = lv_i.                "會計憑證行項目編號       wa_accountgl
-gl_account = gs_item-hkont.       "總分類賬賬目       wa_accountgl
-costcenter = gs_item-kostl1.      "成本中心       wa_accountgl
-profit_ctr = gs_item-bukrs.       "利潤中心       wa_accountgl
-item_text '調整折舊費用分攤'.       
APPEND wa_accountgl TO lt_accountgl.       

CLEAR wa_currency_amount.       wa_currency_amount
-itemno_acc = lv_i.           "行項目編號       wa_currency_amount
-amt_doccur = gs_item-nafaz.  "金額       wa_currency_amount
-currency   'CNY'.       
APPEND wa_currency_amount TO lt_currency_amount.       

CLEAR:wa_zbapi_acc01,wa_extension2.       wa_zbapi_acc01
-posnr = lv_i.       
IF gs_item-nafaz LT 0.         wa_zbapi_acc01
-xnegp 'X'.                   "反記帳       
ENDIF.       wa_extension2
-structure 'ZBAPI_ACC01'.       wa_extension2
-valuepart1 = wa_zbapi_acc01.       
APPEND wa_extension2 TO lt_extension2.     
ENDIF.     

AT END OF bukrs.       
"調用bapi生成憑證       
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'         
EXPORTING           documentheader 
= wa_documentheader         
IMPORTING           obj_type       
= lv_obj_type           obj_key        
= lv_obj_key           obj_sys        
= lv_obj_sys         
TABLES           accountgl      
= lt_accountgl           currencyamount 
= lt_currency_amount           
return         = lt_return           extension2     
= lt_extension2.       

LOOP AT gt_anlp1 ASSIGNING   <f1> WHERE box EQ 'X' AND mes EQ space.         
CLEAR wa_return.         
READ TABLE lt_return INTO wa_return WITH KEY type 'E'.         
IF sy-subrc 0.           
CONCATENATE '@0A@' '調整失敗:' wa_return-message INTO <f1>-mes.           
CONCATENATE 'E' gs_anlp-sta INTO <f1>-sta.         
ELSE.           
CONCATENATE '@08@' '科目調整成功' lv_obj_key+0(10INTO <f1>-mes.           
CONCATENATE 'S' '' INTO <f1>-sta.         
ENDIF.         <f1>
-pname = sy-uname.         <f1>
-pdate = sy-datum.         <f1>
-ptime = sy-uzeit.         <f1>
-belnr_t = lv_obj_key+0(10).         <f1>
-peraf = p_peraf.       
ENDLOOP.       

PERFORM frm_save_data.       

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'         
EXPORTING           
wait 'X'.     
ENDAT.   
ENDLOOP.
io

注意:bapi結束須要class

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT''.
date

CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
im

每生成一個憑證就保存。demo

相關文章
相關標籤/搜索