二维码

[BAPI] 会计凭证FB05清账POSTING_INTERFACE_CLEARING

Twilight发表于 2018-08-21 13:14Twilight 最后回复于 2018-08-21 13:14 [复制链接] 9791 0

Message SAP咨询了清账相关的BAPI,SAP回复,还未向客户release清账相关的BAPI,清账函数POSTING_INTERFACE_CLEARING只是SAP内部使用,本质上还是BDC录屏清账。
1、可以实现F-32、F-44,清客户、供应商账
2、只能按照凭证编号+会计年度+凭证行项目清账,不能部分清账,部分清账参考:https://www.591sap.com/thread-985-1-1.html
3、支持收款并清账,一步到位,即做凭证并清账

POSTING_INTERFACE_CLEARING中I_AUGLV = T041A-AUGLV
  • AUSGZAHL        付款
  • EINGZAHL        收款
  • GUTSCHRI        贷方凭证
  • UMBUCHNG        转帐并清帐

程序代码
  1. *&---------------------------------------------------------------------*
  2. *& 程序名: ZFIFM016                                                    *
  3. *&                                                                     *
  4. *&---------------------------------------------------------------------*
  5. *& 抬头     : 过账并清账FB05                                            *
  6. *& 模块     : FI                                                       *
  7. *& 作者     : Twilight                                                 *
  8. *& 创建日期 : 2018/12/04                                               *
  9. *& 接口类型 : RFC 、BDC                                                *
  10. *& 消息类   : 00                                                       *
  11. *&                                                                     *
  12. *& 修改记录 :                                                          *
  13. *& 日期        修改人           修改内容                                *
  14. *& YYYY/MM/DD  修改人员名       说明                                    *
  15. *&---------------------------------------------------------------------*
  16. FUNCTION ZFIFM016.
  17. *"----------------------------------------------------------------------
  18. *"*"本地接口:
  19. *"  IMPORTING
  20. *"     VALUE(I_HEADER) TYPE  ZFIS018
  21. *"     VALUE(I_MODE) TYPE  RFPDO-ALLGAZMD DEFAULT 'N'
  22. *"  EXPORTING
  23. *"     VALUE(E_MESSAGE) TYPE  ZOTS001
  24. *"     VALUE(E_BUKRS) TYPE  BUKRS
  25. *"     VALUE(E_BELNR) TYPE  BELNR_D
  26. *"     VALUE(E_GJAHR) TYPE  GJAHR
  27. *"  TABLES
  28. *"      T_FPITEM STRUCTURE  ZFIS019 OPTIONAL
  29. *"      T_FCITEM STRUCTURE  ZFIS021
  30. *"----------------------------------------------------------------------
  31.   DATA: lt_blntab  TYPE TABLE OF blntab  WITH HEADER LINE,
  32.         lt_ftclear TYPE TABLE OF ftclear WITH HEADER LINE,
  33.         lt_ftpost  TYPE TABLE OF ftpost  WITH HEADER LINE,
  34.         lt_fttax   TYPE TABLE OF fttax   WITH HEADER LINE.
  35.   DATA:ls_syst TYPE syst.
  36.   DATA:lv_monat    TYPE bkpf-monat.
  37.   DATA:lv_gjahr    TYPE bkpf-gjahr.
  38.   DATA:lv_posnr    TYPE i.
  39.   DATA:lv_wrbtr    TYPE char20.
  40.   DATA:lv_datum    TYPE string.
  41.   DATA:lv_belnr    TYPE string.

  42.   DEFINE populate_ftpost.
  43.     lt_ftpost-stype = &1.
  44.     lt_ftpost-count = &2.
  45.     lt_ftpost-fnam  = &3.
  46.     lt_ftpost-fval  = &4.
  47.     APPEND lt_ftpost.
  48.   END-OF-DEFINITION.
  49.   DEFINE populate_ftclear.
  50.     lt_ftclear-agkoa  = i_header-koart. "K for vender,D for custmor, S for GL
  51.     lt_ftclear-agbuk  = i_header-bukrs. "公司代码
  52.     lt_ftclear-xnops  = 'X'.            "标准未清项目
  53.     lt_ftclear-agkon  = &1.             "科目
  54.     lt_ftclear-selfd  = &2.             "BELNR 字段固定
  55.     lt_ftclear-selvon = &3.             "会计凭证搜索--开始上限值
  56. *    lt_ftclear-selbis = '2'.           "会计凭证搜索--开始下限值
  57.     APPEND lt_ftclear.
  58.   END-OF-DEFINITION.
  59. **********************************************************************
  60. *过账创建凭证
  61. **********************************************************************
  62. *---初始化
  63.   lv_monat = sy-datum+4(2).
  64.   lv_gjahr = sy-datum+0(4).
  65.   IF i_header-waers IS INITIAL.
  66.     i_header-waers = 'CNY'.
  67.   ENDIF.

  68.   CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
  69.     EXPORTING
  70.       date_internal            = sy-datum
  71.     IMPORTING
  72.       date_external            = lv_datum
  73.     EXCEPTIONS
  74.       date_internal_is_invalid = 1
  75.       OTHERS                   = 2.
  76. *K-->Header,P-->Item
  77.   populate_ftpost: 'K' 1 'BKPF-BUKRS' i_header-bukrs, "公司代码
  78.                    'K' 1 'BKPF-BLART' i_header-blart, "凭证类型
  79.                    'K' 1 'BKPF-BLDAT' lv_datum,       "凭证日期
  80.                    'K' 1 'BKPF-BUDAT' lv_datum,       "过帐日期
  81.                    'K' 1 'BKPF-MONAT' lv_monat,       "过帐期间
  82.                    'K' 1 'BKPF-WAERS' i_header-waers,
  83.                    'K' 1 'BKPF-XBLNR' i_header-xblnr,
  84.                    'K' 1 'BKPF-BKTXT' i_header-bktxt.

  85.   LOOP AT t_fpitem.
  86.     lv_posnr = sy-tabix.
  87.     lv_wrbtr = abs( t_fpitem-wrbtr ). "必须都是正值
  88.     CONDENSE lv_wrbtr.
  89.     populate_ftpost:'P' lv_posnr 'RF05A-NEWBS' t_fpitem-bschl,  "记账码
  90.                     'P' lv_posnr 'RF05A-NEWKO' t_fpitem-hkont,  "记账科目
  91.                     'P' lv_posnr 'COBL-GSBER'  t_fpitem-gsber, "业务范围3100上海
  92.                     'P' lv_posnr 'BSEG-WRBTR'  lv_wrbtr,        "金额
  93.                     'P' lv_posnr 'BSEG-RSTGR'  t_fpitem-rstgr.  "原因代码
  94.   ENDLOOP.
  95. **********************************************************************
  96. *清账凭证
  97. **********************************************************************
  98.   LOOP AT t_fcitem.
  99.     CLEAR:lv_belnr.
  100.     lv_belnr = t_fcitem-belnr && t_fcitem-gjahr && t_fcitem-buzei.
  101.     CASE i_header-koart.
  102.       WHEN 'D'. "客户
  103.         populate_ftclear: t_fcitem-kunnr 'BELNR' lv_belnr.
  104.       WHEN 'K'. "供应商
  105.         populate_ftclear: t_fcitem-lifnr 'BELNR' lv_belnr.
  106.       WHEN OTHERS.
  107.     ENDCASE.
  108.   ENDLOOP.
  109. **********************************************************************
  110. *清账开始----采用剩余清帐
  111. **********************************************************************
  112.   CALL FUNCTION 'POSTING_INTERFACE_START'
  113.     EXPORTING
  114.       i_client           = sy-mandt
  115.       i_function         = 'C' "B (batch input processing) ,C (processing with Call Transaction .. Using..)
  116.       i_keep             = 'X' "用于已处理会话的队列删除标志.
  117.       i_mode             = i_mode "A for step by step,N default,for background
  118.       i_update           = 'S' "同步
  119.       i_user             = sy-uname
  120.     EXCEPTIONS
  121.       client_incorrect   = 1
  122.       function_invalid   = 2
  123.       group_name_missing = 3
  124.       mode_invalid       = 4
  125.       update_invalid     = 5
  126.       OTHERS             = 6.

  127.   CALL FUNCTION 'POSTING_INTERFACE_CLEARING'
  128.     EXPORTING
  129.       i_auglv                    = 'UMBUCHNG'
  130.       i_tcode                    = 'FB05'   "只支持FB05
  131.       i_sgfunct                  = 'C'
  132.     IMPORTING
  133.       e_msgid                    = ls_syst-msgid
  134.       e_msgno                    = ls_syst-msgno
  135.       e_msgty                    = ls_syst-msgty
  136.       e_msgv1                    = ls_syst-msgv1
  137.       e_msgv2                    = ls_syst-msgv2
  138.       e_msgv3                    = ls_syst-msgv3
  139.       e_msgv4                    = ls_syst-msgv4
  140.     TABLES
  141.       t_blntab                   = lt_blntab
  142.       t_ftclear                  = lt_ftclear
  143.       t_ftpost                   = lt_ftpost
  144.       t_fttax                    = lt_fttax
  145.     EXCEPTIONS
  146.       clearing_procedure_invalid = 1
  147.       clearing_procedure_missing = 2
  148.       table_t041a_empty          = 3
  149.       transaction_code_invalid   = 4
  150.       amount_format_error        = 5
  151.       too_many_line_items        = 6
  152.       company_code_invalid       = 7
  153.       screen_not_found           = 8
  154.       no_authorization           = 9
  155.       OTHERS                     = 10.
  156. *  IF sy-subrc = 0. "判断不准
  157.   IF ls_syst-msgty CA 'AEX'.
  158.     e_message-type    = 'E'.
  159.     MESSAGE ID ls_syst-msgid TYPE ls_syst-msgty NUMBER ls_syst-msgno  WITH ls_syst-msgv1 ls_syst-msgv2 ls_syst-msgv3 ls_syst-msgv4 INTO e_message-message.
  160.   ELSE .
  161.     e_message-type    = 'S'.
  162.     e_message-message = '过账并清账成功!'.

  163.     READ TABLE lt_blntab INDEX 1.
  164.     IF sy-subrc = 0.
  165.       e_belnr = lt_blntab-belnr.
  166.       e_bukrs = lt_blntab-bukrs.
  167.       e_gjahr = lt_blntab-gjahr.
  168.     ENDIF.
  169.   ENDIF.

  170.   "清账结束
  171.   CALL FUNCTION 'POSTING_INTERFACE_END'
  172.     EXCEPTIONS
  173.       session_not_processable = 1
  174.       OTHERS                  = 2.

  175. ENDFUNCTION.
复制代码
清账函数汇总:
  • POSTING_INTERFACE_CLEARING
  • POSTING_INTERFACE_DOCUMENT
  • POSTING_INTERFACE_END
  • POSTING_INTERFACE_RESET_CLEAR
  • POSTING_INTERFACE_REVERSE_DOC
  • POSTING_INTERFACE_START
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表