【总账清账】

测试凭证

 

 总账清账,账户类型选S,输入对应的会计科目,输入/05

 输入对应凭证的行项次,凭证号&年度&项次

 保存即可

 

 

TYPES: BEGIN OF ty_head,
         bukrs TYPE bkpf-bukrs,           ""公司代码
         blart TYPE bkpf-blart,           ""凭证类型
         bldat TYPE bkpf-bldat,           ""凭证中的凭证日期
         budat TYPE bkpf-budat,           ""凭证中的过账日期
         monat TYPE bkpf-monat,           ""会计期间
         waers TYPE bkpf-waers,           ""货币码
         bktxt TYPE bkpf-bktxt,           ""凭证抬头文本
         hkont TYPE bseg-hkont,           ""总账科目
         agkon TYPE rf05a-agkon,          ""工作清单的帐户号码关键字
         agkoa TYPE rf05a-agkoa,          ""帐户类型"
       END OF ty_head.

TYPES: BEGIN OF ty_item,
         bukrs TYPE bseg-bukrs,          ""公司代码
         belnr TYPE bseg-belnr,          ""会计凭证号码
         gjahr TYPE bseg-gjahr,          ""会计年度
         buzei TYPE bseg-buzei,          ""会计凭证中的行项目数
         umskz TYPE bseg-umskz,          ""特别总账标识"
       END OF ty_item.

*&---------------------------------------------------------------------*
*& Form frm_Clearing_GL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> GT_ITEM
*&      --> GS_HEAD
*&---------------------------------------------------------------------*
*参考:https://www.cnblogs.com/caizjian/p/8067071.html
*      https://blog.youkuaiyun.com/qq_41387691/article/details/142063857
FORM frm_clearing_gl TABLES p_lt_item USING p_ls_head.

  DATA:ls_head TYPE ty_head,
       lt_item TYPE TABLE OF ty_item,
       ls_item TYPE ty_item.

  DATA:lv_stype   TYPE ftpost-stype VALUE 'K',
       lt_ftpost  TYPE STANDARD TABLE OF  ftpost WITH HEADER LINE,
       lt_blntab  TYPE STANDARD TABLE OF blntab,
       ls_blntab  TYPE blntab,
       lt_ftclear TYPE STANDARD TABLE OF ftclear,
       ls_ftclear TYPE ftclear,
       lt_fttax   TYPE TABLE OF  fttax.

  DATA:
        lv_message TYPE string. " 错误消息

  CHECK p_lt_item[] IS NOT INITIAL.
  CHECK p_ls_head IS NOT INITIAL.
  lt_item[] = p_lt_item[].
  ls_head = p_ls_head.

  DEFINE populate_ftpost.
    lt_ftpost-stype = &1. " 账户类型 D K S,这里是供应商的清账,故选 K
    lt_ftpost-count = &2. " 行项次
    lt_ftpost-fnam = &3. " 字段名
    lt_ftpost-fval = &4. " 数据值
    APPEND lt_ftpost.
  END-OF-DEFINITION.

  "清帐凭证抬头
  populate_ftpost:
    lv_stype 1 'BKPF-BUKRS' ls_head-bukrs,    "公司代码
    lv_stype 1 'BKPF-BLART' ls_head-blart,    "凭证类型
    lv_stype 1 'BKPF-BLDAT' ls_head-bldat,    "凭证日期
    lv_stype 1 'BKPF-BUDAT' ls_head-budat,    "凭证中的过账日期
    lv_stype 1 'BKPF-MONAT' ls_head-monat,   ""会计期间
    lv_stype 1 'BKPF-WAERS' ls_head-waers,    "货币码
    lv_stype 1 'BKPF-BKTXT' ls_head-bktxt.    "凭证抬头文本

  "遍历传入的未清项
  LOOP AT lt_item INTO ls_item.

    ls_ftclear-agkoa = ls_head-agkoa. " 账户类型
    ls_ftclear-agkon = ls_head-agkon.""工作清单的帐户号码关键字

    ls_ftclear-agbuk = ls_head-bukrs. " 公司代码
    IF ls_item-umskz IS INITIAL.
      ls_ftclear-xnops = 'X'. " 未清项
    ELSE.
      ls_ftclear-agums = ls_item-umskz. " 特别总账标志
    ENDIF.
    ls_ftclear-selfd = 'BELNR'. " 清账依据:凭证号
    CONCATENATE ls_item-belnr ls_item-gjahr ls_item-buzei INTO ls_ftclear-selvon. " 凭证编号,会计年度,项次
    APPEND ls_ftclear TO lt_ftclear.
  ENDLOOP.
  CLEAR:ls_item,ls_ftclear.


*"----------------------------------------------------------------------
* 调用清账接口
*"----------------------------------------------------------------------
  " 初始化清账接口
  CALL FUNCTION 'POSTING_INTERFACE_START'
    EXPORTING
      i_function         = 'C'
      i_keep             = 'X'
      i_mode             = 'N' "N:不显示调用屏幕,A:显示
      i_update           = 'S' "同步
      i_user             = sy-uname
    EXCEPTIONS
      client_incorrect   = 1
      function_invalid   = 2
      group_name_missing = 3
      mode_invalid       = 4
      update_invalid     = 5
      user_invalid       = 6
      OTHERS             = 7.
  IF sy-subrc <> 0.
    lv_message = 'Error in POSTING_INTERFACE_START'.
    RETURN.
  ENDIF.

  CALL FUNCTION 'POSTING_INTERFACE_CLEARING'
    EXPORTING
      i_auglv                    = 'UMBUCHNG' " 清账类型:转账并清账
      i_tcode                    = 'FB05' " 事务代码:供应商清账
      i_sgfunct                  = 'C'
    IMPORTING
      e_msgid                    = sy-msgid
      e_msgno                    = sy-msgno
      e_msgty                    = sy-msgty
      e_msgv1                    = sy-msgv1
      e_msgv2                    = sy-msgv2
      e_msgv3                    = sy-msgv3
      e_msgv4                    = sy-msgv4
    TABLES
      t_blntab                   = lt_blntab
      t_ftclear                  = lt_ftclear
      t_ftpost                   = lt_ftpost
      t_fttax                    = lt_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 OR lt_blntab IS INITIAL.
    " 清账失败,获取错误信息
    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 = lv_message.

  ELSE.
    " 清账成功,更新凭证号
    READ TABLE lt_blntab INTO ls_blntab INDEX 1.

  ENDIF.

  " 结束清账接口
  CALL FUNCTION 'POSTING_INTERFACE_END'
    EXPORTING
      i_bdcimmed              = 'X'
    EXCEPTIONS
      session_not_processable = 1
      OTHERS                  = 2.

ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值