【ABAP】汇票凭证生成的函数POSTING_INTERFACE_DOCUMENT

21 篇文章 2 订阅

其实这个函数就是一个BDC录屏,由三段组成
POSTING_INTERFACE_START
POSTING_INTERFACE_DOCUMENT
POSTING_INTERFACE_END

我写了一个函数来对应这三个函数完成凭证的自动生成

function zctest_03.
*"----------------------------------------------------------------------
*"*"局部接口:
*"  IMPORTING
*"     VALUE(ZBAPI_F_02_HEADER) LIKE  ZBAPI_F_02_HEADER STRUCTURE
*"        ZBAPI_F_02_HEADER OPTIONAL
*"  EXPORTING
*"     VALUE(MESSAGE) TYPE  CHAR300
*"  TABLES
*"      ZBAPI_F_02_POSNR STRUCTURE  ZBAPI_F_02_POSNR OPTIONAL
*"      IT_RETURN STRUCTURE  BAPIRET2 OPTIONAL
*"----------------------------------------------------------------------

  data: ls_ftpost type ftpost,
    lt_ftpost type table of ftpost,
    lt_fttax  type table of fttax,
    lt_blntab type table of blntab,
    lv_subrc  type sy-subrc,
    lv_msg    type bapiret2.

  data:lv_count(3) type c.
  data:lv_wrbtr(16) type c.

  data:me1(30),me2(30),me3(30).

  data:git_dfies type standard table of dfies with header line.

  call function 'POSTING_INTERFACE_START'
    exporting
      i_function = 'C'         "For Batch Input.
      i_group    = 'F-02'  "Name of the session for creation
      i_keep     = 'X'          "Retain the session
      i_user     = sy-uname.    "User name

  define macro.
    ls_ftpost-fnam = &1.
    ls_ftpost-fval = &2.
    append ls_ftpost to lt_ftpost.
  end-of-definition.


  "header:
  ls_ftpost-stype = 'K'.        "Header indicator
  ls_ftpost-count = '001'.      "First item
  macro: 'BKPF-BLDAT' zbapi_f_02_header-bldat,
         'BKPF-BLART' zbapi_f_02_header-blart,
         'BKPF-BUKRS' zbapi_f_02_header-bukrs,
         'BKPF-BUDAT' zbapi_f_02_header-budat,
         'BKPF-BKTXT' zbapi_f_02_header-bktxt.

  "items:
  lv_count = '001'.
  loop at zbapi_f_02_posnr.
    ls_ftpost-stype = 'P'.
    ls_ftpost-count = lv_count.
    lv_wrbtr = zbapi_f_02_posnr-wrbtr.
    macro: 'RF05A-NEWBS' zbapi_f_02_posnr-newbs,
           'RF05A-NEWKO' zbapi_f_02_posnr-newko,
           'BSEG-WRBTR'  lv_wrbtr,
           'BSEG-SGTXT'  zbapi_f_02_posnr-sgtxt.

    if zbapi_f_02_posnr-kostl ne ''.
      macro:'COBL-KOSTL' zbapi_f_02_posnr-kostl.
    endif.

    if zbapi_f_02_posnr-prctr ne ''.
      macro:'COBL-PRCTR' zbapi_f_02_posnr-prctr.
    endif.

    if zbapi_f_02_posnr-projk ne ''.
      macro:'COBL-PS_POSID' zbapi_f_02_posnr-projk.
    endif.

    if zbapi_f_02_posnr-kdauf ne ''.
      macro:'COBL-KDAUF' zbapi_f_02_posnr-kdauf.
    endif.

    if zbapi_f_02_posnr-kdpos ne ''.
      macro:'COBL-KDPOS' zbapi_f_02_posnr-kdpos.
    endif.

    if zbapi_f_02_posnr-fkber ne ''.
      macro:'COBL-FKBER' zbapi_f_02_posnr-fkber.
    endif.

    if zbapi_f_02_posnr-zuonr ne ''.
      macro:'BSEG-ZUONR' zbapi_f_02_posnr-zuonr.
    endif.

    if zbapi_f_02_posnr-newbs+1(1) = '9'.
      macro: 'RF05A-NEWUM' zbapi_f_02_posnr-newum.
      if zbapi_f_02_posnr-newum = 'X'.
        macro: 'BSEG-ZFBDT'  zbapi_f_02_posnr-zfbdt. "建议模板增加基准日期字段
      endif.
    endif.
    if zbapi_f_02_posnr-newbs = '70' .
      macro: 'RF05A-NEWBW' '100'.
    elseif zbapi_f_02_posnr-newbs = '75' .
      macro: 'RF05A-NEWBW' '101'.
    endif.
    if zbapi_f_02_posnr-newko between '0010010000' and '00100299999'.
      macro: 'BSEG-RSTGR'  zbapi_f_02_posnr-rstgr.
    endif.
    lv_count = lv_count + 1.
  endloop.

  call function 'POSTING_INTERFACE_DOCUMENT'
    exporting
      i_tcode   = 'FB01'          "Name of t-code for Posting
      i_sgfunct = 'C'            "Batch input session
    importing
      e_subrc   = lv_subrc
      e_msgid   = lv_msg-id        "Error handling
      e_msgty   = lv_msg-type      "Error handling
      e_msgno   = lv_msg-number    "Error handling
      e_msgv1   = lv_msg-message_v1 "Error handling
      e_msgv2   = lv_msg-message_v2 "Error handling
      e_msgv3   = lv_msg-message_v3 "Error handling
      e_msgv4   = lv_msg-message_v4 "Error handling
    tables
      t_ftpost  = lt_ftpost        "Internal table populated in Step 2
      t_fttax   = lt_fttax        "Relevant for Tax calculation manually
      t_blntab  = lt_blntab       "Relevant only for Call Trans…
    exceptions
      others    = 1.


  call function 'POSTING_INTERFACE_END'.

  if sy-subrc = 0 .
    if lv_msg-type = 'S'.
      concatenate '' lv_msg-message_v1  into message.
    elseif lv_msg-type = 'E'.
      split lv_msg-message_v1 at '-' into me1 me2.
      condense me1 no-gaps.
      condense me2 no-gaps.

      call function 'DDIF_FIELDINFO_GET'
        exporting
          tabname        = me1
          fieldname      = me2
          langu          = sy-langu
        tables
          dfies_tab      = git_dfies[]  
        exceptions
          not_found      = 1
          internal_error = 2
          others         = 3.

      if git_dfies[] is not initial.

        loop at git_dfies from 1.
          message = git_dfies-fieldtext.
          exit.
        endloop.
        concatenate message '字段错误!' into message.

      else.
        message id lv_msg-id type lv_msg-type number lv_msg-number into message.
      endif.
      endif.

    endif.

  endfunction.

其中DDIF_FIELDINFO_GET可以获取数据库表的字段描述,方便回传错误信息。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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 ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值