ABAP-创建凭证

举报
Mr_blank 发表于 2025/04/08 16:10:46 2025/04/08
【摘要】 FUNCTION zfII009.*"----------------------------------------------------------------------*"*"本地接口:*" IMPORTING*" VALUE(I_VBRK) LIKE VBRK STRUCTURE VBRK*" EXPORTING*" VALUE(E_TYPE) TYPE ...
FUNCTION zfII009.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_VBRK) LIKE  VBRK STRUCTURE  VBRK
*"  EXPORTING
*"     VALUE(E_TYPE) TYPE  CHAR1
*"----------------------------------------------------------------------

  DATA:gs_doc_header TYPE bapiache09,           "抬头表
       gs_acc_gl     TYPE bapiacgl09,  "总帐科目项
       gt_acc_gl     TYPE TABLE OF bapiacgl09,  "总帐科目项
       gs_acc_cus    TYPE bapiacar09,  "客户科目项
       gt_acc_cus    TYPE TABLE OF bapiacar09,  "客户科目项
       gt_acc_ven    TYPE TABLE OF bapiacap09,  "供应商科目项
       gs_acc_cur    TYPE bapiaccr09,  "货币项目
       gt_acc_cur    TYPE TABLE OF bapiaccr09,  "货币项目
       gs_extension2 TYPE bapiparex,   "附加字段
       gt_extension2 TYPE TABLE OF bapiparex.   "附加字段
  DATA:gs_exten    TYPE zsaccit, "增强结构
       lt_return   TYPE TABLE OF bapiret2,
       ls_return   TYPE bapiret2,
       l_obj_key   LIKE bapiache09-obj_key,
       l_error_msg TYPE string.
  SELECT COUNT(*)
    FROM bkpf
   WHERE xblnr EQ i_vbrk-vbeln
     AND blart EQ 'SA'
     AND stblg EQ ''
     AND stjah EQ '0000'.
  IF sy-subrc NE 0.
    DATA(l_name) = |转款(应收账款转其他应收款)|.
    "头
    PERFORM frm_set_header USING i_vbrk CHANGING gs_doc_header.
    "行
    PERFORM frm_set_item USING i_vbrk 1 l_name CHANGING gs_acc_cus gs_acc_cur gs_extension2."gs_acc_gl
    APPEND gs_acc_cus TO gt_acc_cus.
    APPEND gs_acc_cur TO gt_acc_cur.
    APPEND gs_extension2 TO gt_extension2.
    CLEAR:gs_acc_cus,gs_acc_cur,gs_extension2.
    PERFORM frm_set_item USING i_vbrk 2 l_name CHANGING gs_acc_cus gs_acc_cur gs_extension2."gs_acc_gl
    APPEND gs_acc_cus TO gt_acc_cus.
    APPEND gs_acc_cur TO gt_acc_cur.
    APPEND gs_extension2 TO gt_extension2.
    CLEAR:gs_acc_cus,gs_acc_cur,gs_extension2.

    CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
      EXPORTING
        documentheader    = gs_doc_header
      TABLES
        accountgl         = gt_acc_gl
        accountreceivable = gt_acc_cus
        accountpayable    = gt_acc_ven
        currencyamount    = gt_acc_cur
        extension2        = gt_extension2
        return            = lt_return.
    LOOP AT lt_return INTO ls_return WHERE type CA 'EAX'.
      IF l_error_msg IS INITIAL.
        l_error_msg = ls_return-message.
      ENDIF.
    ENDLOOP.
    IF NOT l_error_msg IS INITIAL.
      e_type = 'E'.
    ELSE.
      CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
        EXPORTING
          documentheader    = gs_doc_header
        IMPORTING
          obj_key           = l_obj_key
        TABLES
          accountgl         = gt_acc_gl
          accountreceivable = gt_acc_cus
          accountpayable    = gt_acc_ven
          currencyamount    = gt_acc_cur
          extension2        = gt_extension2
          return            = lt_return.
      LOOP AT lt_return INTO ls_return WHERE type CA 'EAX'.
        IF l_error_msg IS INITIAL.
          l_error_msg = ls_return-message.
        ENDIF.
      ENDLOOP.
      IF NOT l_error_msg IS INITIAL.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        e_type = 'E'.
      ELSE.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFUNCTION.
*&---------------------------------------------------------------------*
*&      Form  FRM_SET_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_I_VBRK text
*      <--P_GS_DOC_HEADER  text
*----------------------------------------------------------------------*
FORM frm_set_header USING is_data TYPE vbrk
                     CHANGING cs_doc_header TYPE bapiache09.

  "抬头表数据
  CLEAR:cs_doc_header.
  cs_doc_header-username   = sy-uname.      "录入人
  cs_doc_header-comp_code  = is_data-bukrs. "公司代码
  cs_doc_header-doc_date   = sy-datum.  "凭证日期
  cs_doc_header-doc_type   = 'SA'.          "凭证类型
  cs_doc_header-ref_doc_no = is_data-vbeln.
  cs_doc_header-obj_key = is_data-vbeln.
  cs_doc_header-obj_key_r = is_data-vbeln.

  cs_doc_header-pstng_date = is_data-fkdat.
  cs_doc_header-fis_period = is_data-fkdat+4(2) . "记账期间
  cs_doc_header-header_txt = '转款(应收账款转其他应收款)'."抬头文本

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  FRM_SET_ITEM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_set_item  USING is_data TYPE vbrk iv_index p_name
                   CHANGING gs_acc_cus TYPE bapiacar09
                            cs_acc_cur TYPE bapiaccr09
                            cs_acc_ex TYPE bapiparex.
  DATA:ls_exten TYPE zsaccit,
       l_dmbtr  TYPE tslvt12.

  l_dmbtr = is_data-netwr + is_data-mwsbk.

  gs_acc_cus-itemno_acc = iv_index.
  gs_acc_cus-item_text = p_name.

  gs_acc_cus-customer = is_data-kunag."客户
  gs_acc_cus-profit_ctr = '0010200000'."利润中心
  gs_acc_cus-alloc_nmbr = is_data-vbeln."
  gs_acc_cus-bline_date = is_data-fkdat.

  cs_acc_cur-itemno_acc = iv_index.
  cs_acc_cur-currency   = is_data-waerk.
  cs_acc_cur-amt_doccur = abs( l_dmbtr )."金额

  ls_exten-posnr = iv_index.
  ls_exten-vbeln = is_data-vbeln.
  IF iv_index = 1.
    ls_exten-bschl = '01' ."记账码
    IF is_data-vtweg = '30'.
      gs_acc_cus-gl_account = '1122020300'."科目
    ELSEIF is_data-vtweg = '10'.
      gs_acc_cus-gl_account = '1122020301'."科目
    ENDIF.
  ELSEIF iv_index = 2.
    ls_exten-bschl = '11' ."记账码
    gs_acc_cus-gl_account = '1221200200'."科目
    cs_acc_cur-amt_doccur = cs_acc_cur-amt_doccur * -1.
  ENDIF.

  cs_acc_ex-structure  ='ZSACCIT'.
  cs_acc_ex-valuepart1 = ls_exten.
ENDFORM.
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。