SAP FB05 部分清账/剩余清账

  1. 业务场景
    当使用f-44供应商/f-32客户批量清账的时候,需要用户手动匹配行去清账,满足不了用户的自动清账。
    使用函数:POSTING_INTERFACE_START
    POSTING_INTERFACE_CLEARING
    POSTING_INTERFACE_END
    2. 录屏操作
    FB05填好数据后,点击选择未清项;凭证类型根据系统配置对应的清账
    在这里插入图片描述
    不同的清账,选择不同的科目类型,K代表供应商,D代表客户,S代表总账科目;如果特殊总账标识填了的话,就不用勾选标准未清项,勾选未清项也不填特殊总账标识。填好之后,输入/05填写筛选条件:
    在这里插入图片描述
    填写好筛选条件之后,点击’处理未清项目’,按会计凭证+公司代码+行项目填写;注意:如果O7F3 里面没有配置行项目,则用行项目筛选会不生效,需要去配置上:
    在这里插入图片描述
    在这里插入图片描述
    点击’剩余项目’页签,这个得通过录屏传到增强点进行处理:
    在这里插入图片描述
    然后,点击查询,按凭证编号和行项目查询,如果有剩余金额,填到对应的行,再保存就可以:
    在这里插入图片描述
    3.代码处理
FUNCTION zfmfi012.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_BKPF) TYPE  BKPF OPTIONAL
*"  EXPORTING
*"     VALUE(E_BUKRS) TYPE  BUKRS
*"     VALUE(E_BELNR) TYPE  BELNR_D
*"     VALUE(E_GJAHR) TYPE  GJAHR
*"     VALUE(E_TYPE) TYPE  BAPI_MTYPE
*"     VALUE(E_MESSAGE) TYPE  BAPI_MSG
*"  TABLES
*"      IT_BSEG STRUCTURE  BSEG OPTIONAL
*"----------------------------------------------------------------------

  DATA:lt_blntab        TYPE STANDARD TABLE OF blntab INITIAL SIZE 0,
       lt_bsid_clearing TYPE STANDARD TABLE OF bsid INITIAL SIZE 0,
       lt_ftclear       TYPE STANDARD TABLE OF ftclear INITIAL SIZE 0,
       lt_ftpost        TYPE STANDARD TABLE OF ftpost INITIAL SIZE 0,
       lt_fttax         TYPE STANDARD TABLE OF fttax INITIAL SIZE 0.
  DATA:ls_ftpost        LIKE LINE OF lt_ftpost,
       ls_bsid_clearing LIKE LINE OF lt_bsid_clearing,
       ls_ftclear       LIKE LINE OF lt_ftclear,
       ls_blntab        LIKE LINE OF lt_blntab.

  DATA: lv_psdif TYPE string,
        lv_belnr TYPE bseg-belnr,
        lv_buzei TYPE bseg-buzei.
  DATA:gv_id TYPE char20. "MEMORY ID
  DATA: lt_bdcdata TYPE TABLE OF bdcdata. "FB05录屏补充内表
  DATA: ls_bdcdata TYPE bdcdata.
  DATA p_mode TYPE rfpdo-allgazmd VALUE 'N'.
  DATA:lv_auglv TYPE t041a-auglv.

  DATA:ev_msgid TYPE sy-msgid,
       ev_msgno TYPE sy-msgno,
       ev_msgty TYPE sy-msgty,
       ev_msgv1 TYPE sy-msgv1,
       ev_msgv2 TYPE sy-msgv2,
       ev_msgv3 TYPE sy-msgv3,
       ev_msgv4 TYPE sy-msgv4,
       ev_subrc TYPE sy-subrc.

* 定义宏
  DEFINE def_ftpost.
    ls_ftpost-stype = &1.
    ls_ftpost-count = &2.
    ls_ftpost-fnam  = &3.
    ls_ftpost-fval  = &4.
    APPEND ls_ftpost TO lt_ftpost.
  END-OF-DEFINITION.

  DEFINE def_bdcdata.
    CLEAR ls_bdcdata.
    ls_bdcdata-program = &1.
    ls_bdcdata-dynpro = &2.
    ls_bdcdata-dynbegin = &3.
    ls_bdcdata-fnam = &4.
    ls_bdcdata-fval = &5.
    APPEND ls_bdcdata TO lt_bdcdata.
  END-OF-DEFINITION.

**     抬头
  def_ftpost: 'K' '001' 'BKPF-BUKRS' i_bkpf-bukrs, "公司代码
              'K' '001' 'BKPF-BUDAT' i_bkpf-budat, "过账日期
              'K' '001' 'BKPF-BLDAT' i_bkpf-bldat, "记账日期
              'K' '001' 'BKPF-MONAT' i_bkpf-budat+4(2), "期间
              'K' '001' 'BKPF-BLART' i_bkpf-blart, "凭证类型
              'K' '001' 'BKPF-WAERS' i_bkpf-waers, "货币
              'K' '001' 'BKPF-BKTXT' i_bkpf-bktxt, "抬头文本
              'K' '001' 'BKPF-XBLNR' i_bkpf-xblnr. "参考

  IF i_bkpf-blart = 'DZ'.
    lv_auglv = 'EINGZAHL'.
  ELSEIF i_bkpf-blart = 'KZ'.
    lv_auglv = 'AUSGZAHL'.
  ENDIF.

  CALL FUNCTION 'POSTING_INTERFACE_START'
    EXPORTING
      i_client           = sy-mandt
      i_function         = 'C'
      i_keep             = 'X'
      i_mode             = p_mode
      i_update           = 'S'
      i_user             = sy-uname
    EXCEPTIONS
      client_incorrect   = 1
      function_invalid   = 2
      group_name_missing = 3
      mode_invalid       = 4
      update_invalid     = 5
      OTHERS             = 6.
  IF sy-subrc <> 0.
    e_type = 'E'.
    e_message = 'Error Message'.
  ELSE.

*    筛选凭证号
    CLEAR lv_psdif.
    LOOP AT it_bseg INTO DATA(ls_bseg).
      CLEAR ls_ftclear.
      IF i_bkpf-blart = 'DZ'.
        ls_ftclear-agkoa = 'D'. "科目类型 客户
        ls_ftclear-agkon = ls_bseg-kunnr. "科目 客户
      ELSEIF i_bkpf-blart = 'KZ'.
        ls_ftclear-agkoa = 'K'. "科目类型 供应商
        ls_ftclear-agkon = ls_bseg-lifnr. "科目 供应商
      ENDIF.
      ls_ftclear-agbuk = ls_bseg-bukrs. "公司代码
      IF ls_bseg-umskz IS NOT INITIAL.
        ls_ftclear-xnops = ''. "标准未清项
        ls_ftclear-agums = ls_bseg-umskz. "特殊总账标识
      ELSE.
        ls_ftclear-xnops = 'X'. "标准未清项
        ls_ftclear-agums = ''. "特殊总账标识
      ENDIF.
      ls_ftclear-selfd = 'BELNR'.
      ls_ftclear-selvon = ls_bseg-belnr && ls_bseg-gjahr && ls_bseg-buzei.
*      ls_ftclear-selbis = ls_bseg-belnr.
      APPEND ls_ftclear TO lt_ftclear.

      IF ls_bseg-shkzg = 'S'.
        lv_psdif = ls_bseg-dmbtr.
        lv_belnr = ls_bseg-belnr.
        lv_buzei = ls_bseg-buzei.
      ENDIF.
    ENDLOOP.

*    --录屏,跳转到剩余清账界面
    CLEAR:lt_bdcdata,gv_id.
    CONCATENATE sy-uname 'ADD_SCR' INTO gv_id.
    CONDENSE lv_psdif NO-GAPS.

    def_bdcdata: 'SAPDF05X' '3100' 'X' '' '',
                 '' '' '' 'BDC_OKCODE' '=REST',
                 '' '' '' 'BDC_SUBSCR' 'SAPDF05X   6102PAGE',
                 '' '' '' 'BDC_CURSOR' 'RFOPS_DK-BELNR(01)',
                 '' '' '' 'RF05A-ABPOS' '1'.

    "筛选会计凭证
    def_bdcdata: 'SAPDF05X' '3100' 'X' '' '',
                 '' '' '' 'BDC_OKCODE' '=OSU',
                 '' '' '' 'BDC_SUBSCR' 'SAPDF05X                                6106PAGE',
                 '' '' '' 'BDC_SUBSCR' 'DF05B-PSDIF(01)',
                 '' '' '' 'RF05A-ABPOS' '1'.
    def_bdcdata: 'SAPDF05X' '2000' 'X' '' '',
                 '' '' '' 'BDC_OKCODE' '=REST',
                 '' '' '' 'BDC_CURSOR' 'RF05A-XPOS1(03)',       "不同系统这个配置顺序可能是不一样的,需要调整
                 '' '' '' 'BDC_CURSOR' '=GO',
                 '' '' '' 'RF05A-XPOS1(01)' '',
                 '' '' '' 'RF05A-XPOS1(03)' 'X'.
    def_bdcdata: 'SAPDF05X' '0731' 'X' '' '',
                 '' '' '' 'BDC_OKCODE' '=REST',
                 '' '' '' 'BDC_CURSOR' 'RF05A-SEL01(01)',
                 '' '' '' 'BDC_CURSOR' '=GO',
                 '' '' '' 'RF05A-SEL01(01)' lv_belnr.

    "筛选行项目
    def_bdcdata: 'SAPDF05X' '3100' 'X' '' '',
                 '' '' '' 'BDC_OKCODE' '=OSU',
                 '' '' '' 'BDC_SUBSCR' 'SAPDF05X                                6106PAGE',
                 '' '' '' 'BDC_SUBSCR' 'DF05B-PSDIF(01)',
                 '' '' '' 'RF05A-ABPOS' '1'.
    def_bdcdata: 'SAPDF05X' '2000' 'X' '' '',
                 '' '' '' 'BDC_OKCODE' '=REST',
                 '' '' '' 'BDC_CURSOR' 'RF05A-XPOS1(04)',       "不同系统这个配置顺序可能是不一样的,需要调整
                 '' '' '' 'BDC_CURSOR' '=GO',
                 '' '' '' 'RF05A-XPOS1(01)' '',
                 '' '' '' 'RF05A-XPOS1(04)' 'X'.
    def_bdcdata: 'SAPDF05X' '0731' 'X' '' '',
                 '' '' '' 'BDC_OKCODE' '=REST',
                 '' '' '' 'BDC_CURSOR' 'RF05A-SEL01(01)',
                 '' '' '' 'BDC_CURSOR' '=GO',
                 '' '' '' 'RF05A-SEL01(01)' lv_buzei.

    "填入清账剩余金额
    def_bdcdata: 'SAPDF05X' '3100' 'X' '' '',
                 '' '' '' 'BDC_OKCODE' '/00',
                 '' '' '' 'BDC_SUBSCR' 'SAPDF05X                                6106PAGE',
                 '' '' '' 'BDC_SUBSCR' 'DF05B-PSDIF(01)',
                 '' '' '' 'RF05A-ABPOS' '1',
                 '' '' '' 'DF05B-PSDIF(01)' lv_psdif.

    "保存
    def_bdcdata: 'SAPDF05X' '3100' 'X' '' '',
                 '' '' '' 'BDC_OKCODE' '=BU',
                 '' '' '' 'BDC_SUBSCR' 'SAPDF05X   6106PAGE',
                 '' '' '' 'BDC_CURSOR' 'DF05B-PSDIF(01)',
                 '' '' '' 'RF05A-ABPOS' '1'.

    "
    def_bdcdata: 'SAPMF05A' '0700' 'X' '' '',
                 '' '' '' 'BDC_OKCODE' '=PI',
                 '' '' '' 'BDC_CURSOR' 'RF05A-AZEI1(01)',
                 'SAPMF05A' 'SAPMF05A' 'X' '' '',
                 '' '' '' 'SAPMF05A' '=BU'.

    EXPORT lt_bdcdata FROM lt_bdcdata TO MEMORY ID gv_id.  "补充屏幕数据 to LFIPIF00->1916行

    CALL FUNCTION 'POSTING_INTERFACE_CLEARING'
      EXPORTING
        i_auglv                    = lv_auglv
        i_tcode                    = 'FB05'
        i_sgfunct                  = 'C'
      IMPORTING
        e_msgid                    = ev_msgid
        e_msgno                    = ev_msgno
        e_msgty                    = ev_msgty
        e_msgv1                    = ev_msgv1
        e_msgv2                    = ev_msgv2
        e_msgv3                    = ev_msgv3
        e_msgv4                    = ev_msgv4
        e_subrc                    = ev_subrc
      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.
      e_type  = 'E'.
      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          INTO e_message
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ELSE.
      CLEAR ls_blntab.
      READ TABLE lt_blntab INTO ls_blntab INDEX 1.
      IF sy-subrc = 0.
        e_belnr = ls_blntab-belnr.
        e_bukrs = ls_blntab-bukrs.
        e_gjahr = ls_blntab-gjahr.
        e_type  = 'S'.
        e_message = '清账成功'.
      ENDIF.

      CALL FUNCTION 'POSTING_INTERFACE_END'
        EXPORTING
          i_bdcimmed              = 'X'
        EXCEPTIONS
          session_not_processable = 1
          OTHERS                  = 2.
      IF sy-subrc <> 0.
*               Implement suitable error handling here
      ENDIF.
    ENDIF.

  ENDIF.

ENDFUNCTION.

增强点:LFIPIF00->1916行,录屏操作内存传值传到这里,然后下面标准代码会走这些录屏操作调整到对应的页签,内存传值ID记得用账号拼接,防止造成数据错乱:

  DATA:lt_bdcdata TYPE TABLE OF bdcdata,
       gv_id TYPE char20.
  CLEAR:lt_bdcdata,gv_id.

  "点击剩余、部分清账
  CONCATENATE sy-uname 'ADD_SCR' INTO gv_id.
  IMPORT lt_bdcdata = lt_bdcdata FROM MEMORY ID gv_id.
  IF sy-subrc = 0.
    APPEND LINES OF lt_bdcdata TO ft.
    LOOP AT ft WHERE fval = '/11'. "识别不了/11,换成=PA 跳转到未清项
      ft-fval = '=PA'.
      MODIFY ft.
    ENDLOOP.
  ENDIF.
  FREE MEMORY ID gv_id.

在这里插入图片描述

SAP供应商批量清账是指使用SAP软件来对供应商账务进行集中清理和处理的过程。在企业运营中,与供应商之间会建立一份供应关系,并且会形成一系列的供应商账务,包括采购订单、发票、付款等。这些账务需要被及时处理和管理,以保证供应链的顺畅运作。 SAP供应商批量清账通过SAP软件的账款管理模块来实现,主要包括以下步骤: 首先,需要对供应商账务进行分类和整理。根据供应商的账务信息,将其分别归类整理,例如根据付款状态将其分为未付款、已付款等,以便更好地掌握账务的情况。 其次,通过SAP系统进行批量处理。在清账的过程中,可以使用SAP软件的批处理功能,对一批供应商的账务进行集中处理。通过一系列的自动化操作,可以快速、准确地对账务进行清理。 然后,进行账务的调整和核对。在批量清账之后,需要对账务进行核对,确保清理后的账务准确无误。如果有错误或异常,需要及时进行调整。 最后,生成账务报告和结算单。清账完成后,可以根据需要生成供应商的账务报告和结算单。这些报告可以提供给相关部门参考,从而更好地了解供应商的账务情况,并做出相应的决策。 总之,SAP供应商批量清账是利用SAP软件对供应商账务进行集中清理和处理的过程。通过这一过程,能够提高供应链管理的效率和准确性,进而优化企业的运营效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值