SAP ABAP BAPI 创建会计凭证

 

DATA:gs_docheader  TYPE bapiache09,
     gt_curramount TYPE TABLE OF bapiaccr09, "金额
     gs_curramount TYPE bapiaccr09,

     gt_acgl       TYPE TABLE OF bapiacgl09, "总账
     gs_acgl       TYPE bapiacgl09,

     gt_rec        TYPE STANDARD TABLE OF bapiacar09,      " 客户
     gs_rec        TYPE bapiacar09,

     gt_ex         TYPE STANDARD TABLE OF  bapiparex,
     gs_ex         TYPE bapiparex,

     gt_return     TYPE TABLE OF bapiret2,
     gs_return     TYPE bapiret2.


DATA:gv_err_msg TYPE string,
     gv_msg     TYPE string.

DATA:gv_ytpz TYPE bkpf-belnr,  "存储用于更新日志的凭证号
     gv_hcpz TYPE bkpf-belnr,
     gv_key  TYPE bapiache09-obj_key.  "bapi返回的会计凭证号

DATA:gv_excute TYPE char1.    

      gs_docheader-username = sy-uname.
      gs_docheader-header_txt = '返利预提' && gs_alv-zkh."凭证抬头文本
      gs_docheader-comp_code = gs_alv-zxszz.  "公司代码
      gs_docheader-doc_date = s_date-low.   "凭证日期
      gs_docheader-pstng_date = s_date-low. "过账日期
      gs_docheader-doc_type = 'Y7'.           "凭证类型

      gs_acgl-itemno_acc = '1'.          "会计凭证行项目编号
      gs_acgl-gl_account = '6001010100'. "总账科目
      CASE gs_alv-zxszz.
        WHEN 'H101'.
          gs_acgl-profit_ctr = 'H10100000'. "利润中心
        WHEN 'H205'.
          gs_acgl-profit_ctr = 'H20500000'. "利润中心
      ENDCASE.

      APPEND gs_acgl TO gt_acgl.
      CLEAR:gs_acgl.

      gs_curramount-itemno_acc = '1'.      "会计凭证行项目编号
      gs_curramount-currency = 'CNY'.         "货币码
      gs_curramount-amt_doccur = gv_bcyt_sum. "以凭证货币计的金额
      APPEND gs_curramount TO gt_curramount.


      gs_acgl-itemno_acc = '2'.          "会计凭证行项目编号
      gs_acgl-gl_account = '2281030300'.      "'2801010000'. "总账科目  2022.11.23调整
      APPEND gs_acgl TO gt_acgl.

      gs_curramount-itemno_acc = '2'.      "会计凭证行项目编号
      gs_curramount-currency = 'CNY'.         "货币码
      gs_curramount-amt_doccur = -1 * gv_bcyt_sum. "以凭证货币计的金额
      APPEND gs_curramount TO gt_curramount.


      " 创建会计凭证
      CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
        EXPORTING
          documentheader = gs_docheader
        IMPORTING
          obj_key        = gv_key
        TABLES
          accountgl      = gt_acgl
          currencyamount = gt_curramount
          return         = gt_return.

      LOOP AT gt_return INTO gs_return.
        IF gs_return-type = 'E' OR gs_return-type = 'A'.
          "calling message buld FM to get the error message
          CALL FUNCTION 'MESSAGE_TEXT_BUILD'
            EXPORTING
              msgid               = gs_return-id
              msgnr               = gs_return-number
              msgv1               = gs_return-message_v1
              msgv2               = gs_return-message_v2
              msgv3               = gs_return-message_v3
              msgv4               = gs_return-message_v4
            IMPORTING
              message_text_output = gv_msg.

          gv_err_msg = ';' && gv_err_msg && gv_msg.
          CLEAR:gv_msg.
        ENDIF.
      ENDLOOP.

      IF gv_err_msg IS NOT INITIAL.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        MESSAGE '预提凭证创建失败!' && gv_err_msg TYPE 'S' DISPLAY LIKE 'E'.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        gv_ytpz  = gv_key+0(10).
        lv_correct_msg = lv_correct_msg && '预提凭证:' && gv_ytpz.
        PERFORM frm_update_log TABLES gt_ytlog_yt
                                USING 'ZHSD036_Z1'.

      ENDIF.
      CLEAR:gs_docheader,gs_acgl,gt_acgl,gs_curramount,gt_curramount,gt_return,gs_return.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ABAP 成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值