bapi:Post with clearing (FB05) using internal posting interface

*&---------------------------------------------------------------------*
*& Report  ZBAPI_POST_CLEAR_TEST
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZBAPI_POST_CLEAR_TEST.
DATA:GT_BLNTAB TYPE STANDARD TABLE OF BLNTAB INITIAL SIZE 0,
      GT_BSID_CLEARING TYPE STANDARD TABLE OF BSID INITIAL SIZE 0 ,
      GT_FTCLEAR TYPE STANDARD TABLE OF FTCLEAR INITIAL SIZE 0,
      GT_FTPOST TYPE STANDARD TABLE OF FTPOST INITIAL SIZE 0 ,
      GT_FTTAX TYPE STANDARD TABLE OF FTTAX INITIAL SIZE 0 .
DATA:GS_FTPOST LIKE LINE OF GT_FTPOST,
      GS_BSID_CLEARING LIKE LINE OF GT_BSID_CLEARING.

START-OF-SELECTION.
GS_BSID_CLEARING-BELNR = '2000000303'.
GS_BSID_CLEARING-GJAHR = '2013'.
GS_BSID_CLEARING-BUZEI = 1.
APPEND GS_BSID_CLEARING TO GT_BSID_CLEARING.
  PERFORM: F_POSTING_INTERFACE_START.
  PERFORM: F_POSTING_INTERFACE_CLEARING.
  PERFORM: F_POSTING_INTERFACE_END.

*&---------------------------------------------------------------------*
*&      Form  f_posting_interface_start
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM F_POSTING_INTERFACE_START .
  CONSTANTS: LC_FUNCTION       LIKE  RFIPI-FUNCT VALUE 'C',
  " B= BDC, C= Call Trans
             LC_MODE LIKE RFPDO-ALLGAZMD VALUE 'E', "ERRORS only
             LC_UPDATE LIKE RFPDO-ALLGVBMD VALUE 'S' .

  CALL FUNCTION 'POSTING_INTERFACE_START'
    EXPORTING
      I_FUNCTION         = LC_FUNCTION
      I_MODE             = LC_MODE
      I_UPDATE           = LC_UPDATE
    EXCEPTIONS
      CLIENT_INCORRECT   = 1
      FUNCTION_INVALID   = 2
      GROUP_NAME_MISSING = 3
      MODE_INVALID       = 4
      UPDATE_INVALID     = 5
      OTHERS             = 6.
  IF SY-SUBRC <> 0.
    MESSAGE 'ERROR' TYPE 'S'.
  ENDIF.
ENDFORM." F_POSTING_INTERFACE_START
*&---------------------------------------------------------------------*
*&      Form  f_posting_interface_clearing
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM F_POSTING_INTERFACE_CLEARING.

  CONSTANTS: LC_AUGLV TYPE AUGLV VALUE 'EINGZAHL',
             LC_TCODE TYPE SYTCODE VALUE 'FB05',
             LC_SGFUNCT TYPE SGFUNCT_PI VALUE 'C'.

  PERFORM: F_PREPARE_FTPOST.
  PERFORM: F_PREPARE_FTCLEAR.

  CALL FUNCTION 'POSTING_INTERFACE_CLEARING'
    EXPORTING
      I_AUGLV                    = LC_AUGLV
      I_TCODE                    = LC_TCODE
      I_SGFUNCT                  = LC_SGFUNCT
    TABLES
      T_BLNTAB                   = GT_BLNTAB
      T_FTCLEAR                  = GT_FTCLEAR
      T_FTPOST                   = GT_FTPOST
      T_FTTAX                    = GT_FTTAX
    EXCEPTIONS
      CLEARING_PROCEDURE_INVALID = 1
      CLEARING_PROCEDURE_MISSING = 2
      TABLE_T041A_EMPTY          = 3
      TRANSACTION_CODE_INVALID   = 4
      AMOUNT_FORMAT_ERROR        = 5
      TOO_MANY_LINE_ITEMS        = 6
      COMPANY_CODE_INVALID       = 7
      SCREEN_NOT_FOUND           = 8
      NO_AUTHORIZATION           = 9
      OTHERS                     = 10.

  IF SY-SUBRC <> 0.
    CASE SY-SUBRC.
      WHEN '1'.
        MESSAGE 'ERROR' TYPE 'S'.
      WHEN '2'.
        MESSAGE 'ERROR' TYPE 'S'.
      WHEN '3'.
        MESSAGE 'ERROR' TYPE 'S'.
      WHEN '4'.
        MESSAGE 'ERROR' TYPE 'S'.
      WHEN '5'.
        MESSAGE 'ERROR' TYPE 'S'.
      WHEN '6'.
        MESSAGE 'ERROR' TYPE 'S'.
      WHEN '7'.
        MESSAGE 'ERROR' TYPE 'S'.
      WHEN '8'.
        MESSAGE 'ERROR' TYPE 'S'.
      WHEN '9'.
        MESSAGE 'ERROR' TYPE 'S'.
    ENDCASE.
  ELSE.
    COMMIT WORK.
    SET SCREEN 0.
  ENDIF.

ENDFORM." F_POSTING_INTERFACE_CLEARING

*&---------------------------------------------------------------------*
*&      Form  f_prepare_ftpost
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM F_PREPARE_FTPOST .
  CONSTANTS: LC_HEADER TYPE C VALUE 'K', "Header
             LC_ITEM TYPE C VALUE 'P', "Item
             LC_COUNT TYPE I VALUE '001'.

*fill_header(BKPF)
* Convert the date format from  YYYYMMDD -> DD/MM/YYYY
*  PERFORM: F_CONVERT_DATE USING PA_BLDAT
*                         CHANGING PA_BLDAT.
  GS_FTPOST-STYPE = LC_HEADER.
  GS_FTPOST-COUNT = LC_COUNT.
  GS_FTPOST-FNAM  = 'BKPF-BLDAT'.
  GS_FTPOST-FVAL  = SY-DATUM.
  APPEND GS_FTPOST TO GT_FTPOST.
  CLEAR GS_FTPOST.

* Convert the date format from  YYYYMMDD -> DD/MM/YYYY
*  PERFORM: F_CONVERT_DATE USING PA_BUDAT
*                         CHANGING PA_BUDAT.
  GS_FTPOST-STYPE = LC_HEADER.
  GS_FTPOST-COUNT = LC_COUNT.
  GS_FTPOST-FNAM  = 'BKPF-BUDAT'.
  GS_FTPOST-FVAL  = SY-DATUM.
  APPEND GS_FTPOST TO GT_FTPOST.
  CLEAR GS_FTPOST.

  GS_FTPOST-STYPE = LC_HEADER.
  GS_FTPOST-COUNT = LC_COUNT.
  GS_FTPOST-FNAM  = 'BKPF-BLART'.
  GS_FTPOST-FVAL  = 'SA'.
  APPEND GS_FTPOST TO GT_FTPOST.
  CLEAR GS_FTPOST.


  GS_FTPOST-STYPE = LC_HEADER.
  GS_FTPOST-COUNT = LC_COUNT.
  GS_FTPOST-FNAM  = 'BKPF-BUKRS'.
  GS_FTPOST-FVAL  = '1000'.
  APPEND GS_FTPOST TO GT_FTPOST.
  CLEAR GS_FTPOST.

  GS_FTPOST-STYPE = LC_HEADER.
  GS_FTPOST-COUNT = LC_COUNT.
  GS_FTPOST-FNAM  = 'BKPF-WAERS'. "Currency
  GS_FTPOST-FVAL  = 'USD'.
  APPEND GS_FTPOST TO GT_FTPOST.
  CLEAR GS_FTPOST.

*  GS_FTPOST-STYPE = LC_HEADER.
*  GS_FTPOST-COUNT = LC_COUNT.
*  GS_FTPOST-FNAM  = 'BKPF-XBLNR'.
*  GS_FTPOST-FVAL  = PA_XBLNR.
*  APPEND GS_FTPOST TO GT_FTPOST.
*  CLEAR GS_FTPOST.

*  GS_FTPOST-STYPE = LC_HEADER.
*  GS_FTPOST-COUNT = LC_COUNT.
*  GS_FTPOST-FNAM  = 'BKPF-BKTXT'. "Doc. Header Text
*  GS_FTPOST-FVAL  = PA_TEXT.
*  APPEND GS_FTPOST TO GT_FTPOST.
*  CLEAR GS_FTPOST.

*Commented temporarily
*  gs_ftpost-stype = lc_header.
*  gs_ftpost-count = lc_count.
*  gs_ftpost-fnam  = 'BKPF-KURSF'. "Exchange Rate
*  gs_ftpost-fval  = pa_erate.
*  SHIFT gs_ftpost-fval LEFT DELETING LEADING space.
*  APPEND gs_ftpost TO gt_ftpost.
*  CLEAR gs_ftpost.

*Item Data
  GS_FTPOST-STYPE = LC_ITEM.
  GS_FTPOST-COUNT = LC_COUNT.
  GS_FTPOST-FNAM  = 'RF05A-NEWKO'.
  GS_FTPOST-FVAL  = 'MA03E'.
  APPEND GS_FTPOST TO GT_FTPOST.
  CLEAR GS_FTPOST.

  GS_FTPOST-STYPE = LC_ITEM.
  GS_FTPOST-COUNT = LC_COUNT.
  GS_FTPOST-FNAM  = 'RF05A-NEWBS'.
  GS_FTPOST-FVAL  = '31'.
  APPEND GS_FTPOST TO GT_FTPOST.
  CLEAR GS_FTPOST.

  GS_FTPOST-STYPE = LC_ITEM.
  GS_FTPOST-COUNT = LC_COUNT.
  GS_FTPOST-FNAM  = 'BSEG-WRBTR'.
  GS_FTPOST-FVAL  = '1000'.
  SHIFT GS_FTPOST-FVAL LEFT DELETING LEADING SPACE.
  APPEND GS_FTPOST TO GT_FTPOST.
  CLEAR GS_FTPOST.

* Convert the date format from  YYYYMMDD -> DD/MM/YYYY
*  PERFORM: F_CONVERT_DATE USING PA_VALUT
*                         CHANGING PA_VALUT.

*  GS_FTPOST-STYPE = LC_ITEM.
*  GS_FTPOST-COUNT = LC_COUNT.
*  GS_FTPOST-FNAM  = 'BSEG-VALUT'.
*  GS_FTPOST-FVAL  = SY-DATUM.
*  APPEND GS_FTPOST TO GT_FTPOST.
*  CLEAR GS_FTPOST.
*
** Convert the date format from  YYYYMMDD -> DD/MM/YYYY
*  PERFORM: F_CONVERT_DATE USING PA_ZFBDT
*                         CHANGING PA_ZFBDT.
*  GS_FTPOST-STYPE = LC_ITEM.
*  GS_FTPOST-COUNT = LC_COUNT.
*  GS_FTPOST-FNAM  = 'BSEG-ZFBDT'.
*  GS_FTPOST-FVAL  = PA_ZFBDT.
*  APPEND GS_FTPOST TO GT_FTPOST.
*  CLEAR GS_FTPOST.


ENDFORM." F_PREPARE_FTPOST
*&---------------------------------------------------------------------*
*&      Form  f_prepare_ftclear
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM F_PREPARE_FTCLEAR .
  DATA: LS_FTCLEAR TYPE FTCLEAR.
  CONSTANTS: LC_AGKOA TYPE KOART VALUE 'S', "Customers
             LC_SELFD TYPE FLD30_F05A VALUE 'BELNR'.
  LOOP AT GT_BSID_CLEARING INTO GS_BSID_CLEARING. "Clearing Table
    LS_FTCLEAR-AGKOA = LC_AGKOA.
*    LS_FTCLEAR-AGKON = '200120'. "Customer
    LS_FTCLEAR-AGBUK = '1000'. "Company code
    LS_FTCLEAR-XNOPS = 'X'. "G/L Indicator
    LS_FTCLEAR-SELFD = LC_SELFD.
*    LS_FTCLEAR-AVSID = '2000000302'.
    LS_FTCLEAR-SELVON = '2000000303'.
    LS_FTCLEAR-SELBIS = '2000000303'.

    APPEND LS_FTCLEAR TO GT_FTCLEAR.
  ENDLOOP.
ENDFORM." F_PREPARE_FTCLEAR
*&---------------------------------------------------------------------*
*&      Form  f_posting_interface_end
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM F_POSTING_INTERFACE_END .
  CALL FUNCTION 'POSTING_INTERFACE_END'
    EXPORTING
      I_BDCIMMED              = 'X'
    EXCEPTIONS
      SESSION_NOT_PROCESSABLE = 1
      OTHERS                  = 2.
  IF SY-SUBRC <> 0.
    MESSAGE 'ERROR' TYPE 'S'.
  ENDIF.
ENDFORM.                    " F_POSTING_INTERFACE_END

BAPI:POSTING_INTERFACE_CLEARING


Post with clearing (FB05) 这个接口的使用,在网上看到别人的例子,自己使用总是清帐不成功,仔细查找

是这两个字段要设置一样的值 都填写belnr的值,虽然不知道原因,但是可以清帐了,附测试代码:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
POSTING_INTERFACE_CLEARING是一个函数,用于进行标准清账操作。它封装了BDC录屏的功能。\[3\]在使用该函数时,如果传入参数ITEM,则必须传入公司代码、记账码和科目。根据你提供的引用内容,你的问题是关于批量创建清账凭证时参照码3的问题。你希望每个参照码3对应一张凭证,但实际上清账凭证创建成功后,参照码3一直沿用了模板中的第一个值。你进行了排查并确认了传参数据的正确性,并清空了相应的内表。然后你尝试使用了free memory来清空ABAP内存变量,并成功解决了问题。然而,你想知道使用free memory会有什么影响。 #### 引用[.reference_title] - *1* [SAP-ABAP-清账函数BAPI使用POSTING_INTERFACE_CLEARING,应付暂估外币清账程序](https://blog.csdn.net/Qunending/article/details/124666847)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [清账函数POSTING_INTERFACE_CLEARING的应用](https://blog.csdn.net/wangshaoqiang022/article/details/90234375)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值