[FI] F-65 生成預制憑證 、FBV0 過賬 bapi、刪除預制憑證 、取消過賬


1、F-65 生成預制憑證

  使用的bapi : 

** Check the Document
    CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'

**Create the Document

    CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'

  在使用這個BAPI的時候需要注意原因代碼等字段需要通過擴展去傳輸,這里就需要去使用SE19增強

  參考實施是 ACC_DOCUMENT,我這里定義了一個 ZACC_DOCUMENT在他的CHANGE方法里面我們需要去寫入如下代碼:

 

    DATA:ls_exte TYPE bapiparex.
    "用於生成預制憑證bapi設定
    DATA: wa_extension   TYPE bapiparex,
          ext_value(960) TYPE c,
          wa_accit       TYPE accit,
          l_ref          TYPE REF TO data.

    FIELD-SYMBOLS: <l_struc> TYPE any,
                   <l_field> TYPE any.

    SORT c_extension2 BY structure.

    LOOP AT c_extension2 INTO wa_extension.
      AT NEW structure.
        CREATE DATA l_ref TYPE (wa_extension-structure).
        ASSIGN l_ref->* TO <l_struc>.
      ENDAT.
      CONCATENATE wa_extension-valuepart1 wa_extension-valuepart2
                  wa_extension-valuepart3 wa_extension-valuepart4
             INTO ext_value.
      MOVE ext_value TO <l_struc>.
      ASSIGN COMPONENT 'POSNR' OF STRUCTURE <l_struc> TO <l_field>.
      READ TABLE c_accit WITH KEY posnr = <l_field>
            INTO wa_accit.
      IF sy-subrc IS INITIAL.
        MOVE-CORRESPONDING <l_struc> TO wa_accit.
        MODIFY c_accit FROM wa_accit INDEX sy-tabix.
      ENDIF.
    ENDLOOP.
"如下計算稅額字段也需要在擴展里面去定義才能傳輸
    LOOP AT c_extension2 INTO wa_extension WHERE structure = 'ZSEXTEN'.
      IF wa_extension-valuepart2 = 'XMWST'.
        LOOP AT c_accit INTO wa_accit  .
          wa_accit-xmwst = 'X'.
          MODIFY c_accit FROM wa_accit INDEX sy-tabix TRANSPORTING xmwst.
        ENDLOOP.
      ENDIF.
    ENDLOOP.
”需要注意SET status為2才能生成預制憑證
    READ TABLE c_extension2 INTO ls_exte WITH KEY structure = 'ZSEXTEN'.
    IF sy-subrc = 0.
      MOVE '2' TO c_acchd-status_new.
      DELETE c_extension2 INDEX sy-tabix.
    ENDIF.

 

   遇到問題2是header_txt文本傳輸不進去,解決方法如下

   使用SE24:IF_EX_AC_DOCUMENT,去調整他的方法 CHANGE_INITIAL ,CHANGE_AFTER_CHECK

   在上面兩個方法里面添加如下代碼:

*-----------------------------------------------------------------------------------------------------
*about field "HEADER_TXT" in structure "BAPIACHE09" not transferred to field "BKTXT" in table "BKPF"
*Add by Torrance 20200330
*---------------------------------------------------------------------------------------------------
    DATA: wa_header TYPE acchd.
    IF sy-xprog NE 'SAPMSSY1'.
*---<SAPLBPFC> is for Posting with BAPI: BAPI_ACC_DOCUMENT_POST
*---<SAPCNVE > is for Posting(Tax) with BAPI: BAPI_ACC_DOCUMENT_POST
*---<SAPMSSY1> is for Test(Check) with BAPI: BAPI_ACC_DOCUMENT_CHECK
      CLEAR wa_header.
      wa_header = im_document-header.
      ex_document-header-bktxt = wa_header-bktxt.
      CLEAR wa_header.
    ENDIF.

 

2、FBV0過賬

*check document data

CALL FUNCTION 'ZPRELIMINARY_POSTING_CHECK_ALL'

*post document data

CALL FUNCTION 'ZPRELIMINARY_POSTING_POST_ALL'

原本應該使用PRELIMINARY_POSTING_CHECK_ALL和PRELIMINARY_POSTING_POST_ALL,但是這兩個方法在顯示界面的時候會去display log,如果在循環里面展現給用戶的結果就不友好,所以我復制了這兩個標准的function,然后在里面做變更,當我的程序call的時候就不display log

3、刪除預制憑證

這里使用了錄制BDC的方式

 PERFORM bdc_dynpro      USING 'SAPMF05V'
                                '0100'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '/00'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'RF05V-GJAHR'.
  PERFORM bdc_field       USING 'RF05V-BUKRS'
                                'SR00'.
  PERFORM bdc_field       USING 'RF05V-BELNR'
                                p_belnr.
  PERFORM bdc_field       USING 'RF05V-GJAHR'
                                p_gjahr.
  PERFORM bdc_dynpro      USING 'SAPLF040'
                                '0700'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'BKPF-XBLNR'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                'BL'.
  PERFORM bdc_dynpro      USING 'SAPLSPO1'
                                '0200'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'SPOP-OPTION1'.              "Button YES
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                'YES'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                'ENTER'.

  CALL TRANSACTION 'FBV0' USING  bdcdata
                          MODE   mode
                          UPDATE 'S'.


  CALL FUNCTION 'MESSAGE_TEXT_BUILD'
    EXPORTING
      msgid               = sy-msgid
      msgnr               = sy-msgno
      msgv1               = sy-msgv1
      msgv2               = sy-msgv2
      msgv3               = sy-msgv3
      msgv4               = sy-msgv4
    IMPORTING
      message_text_output = messtab
    EXCEPTIONS
      OTHERS              = 4.
  APPEND messtab.

4、取消過賬

*會計憑證沖銷前檢查

CALL FUNCTION 'BAPI_ACC_DOCUMENT_REV_CHECK'

CALL FUNCTION 'BAPI_ACC_DOCUMENT_REV_POST'

 

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM