SAP创建会计凭证

DATA: ls_documentheader TYPE bapiache09,
lv_key TYPE bapiache09-obj_key,

    ls_accountgl      TYPE bapiacgl09,
    lt_accountgl      TYPE TABLE OF bapiacgl09 WITH HEADER LINE,

    ls_currencyamount TYPE bapiaccr09,
    lt_currencyamount TYPE TABLE OF bapiaccr09 WITH HEADER LINE,
  •  ls_accountreceivable    TYPE  BAPIACAR09 ,
    
  •  lt_accountreceivable    TYPE TABLE OF BAPIACAR09 WITH HEADER LINE,
    
      ls_accountpayable TYPE  bapiacap09,
      lt_accountpayable TYPE TABLE OF bapiacap09 WITH HEADER LINE,
    
  •  ls_accounttax    TYPE  BAPIACTX09 ,
    
  •  lt_accounttax    TYPE TABLE OF BAPIACTX09 WITH HEADER LINE,
    
    
      lt_return         TYPE TABLE OF bapiret2 WITH HEADER LINE,
      lw_return         TYPE          bapiret2,
    
  •  LS_EXTENSION2        TYPE BAPIPAREX,
      lt_extension2     TYPE TABLE OF bapiparex WITH HEADER LINE .
    

*&—WORKAREA FOR ZEXTEN
DATA: wa_zexten LIKE zsfi6900001.

DATA:BEGIN OF ls_msg,
type TYPE bapi_mtype, "
message TYPE bapi_msg, "
END OF ls_msg.

DATA:lt_msg LIKE TABLE OF ls_msg,
ls_bseg TYPE bseg,
ls_bkpf TYPE bkpf,
lv_mitkz TYPE skb1-mitkz,
lv_mndid TYPE sepa_mndid,
lv_wrbtr TYPE zfit00090-wrbtr,
lv_lines TYPE buzei .

READ TABLE it_bseg INTO ls_bseg INDEX 1.
*验证是否已创建过会计凭证
CLEAR: ls_msg,ls_bkpf.
SELECT SINGLE bukrs belnr gjahr FROM bkpf INTO CORRESPONDING FIELDS OF ls_bkpf
WHERE xref1_hd = iw_bkpf-xref1_hd
AND xblnr = iw_bkpf-xblnr
AND stblg = ‘’.

IF sy-subrc = 0.
CLEAR ls_msg.
ls_msg-type = ‘S’.
CONCATENATE ls_bkpf-belnr ls_bkpf-bukrs ls_bkpf-gjahr INTO ls_msg-message.
APPEND ls_msg TO lt_msg.
e_json = /ui2/cl_json=>serialize( data = lt_msg ).

RETURN.

ENDIF.

*财务凭证抬头结构,存放凭证类型、日期等

  • 抬头
    ls_documentheader-header_txt = iw_bkpf-bktxt. "抬头文本
    ls_documentheader-username = sy-uname."接口账号

  •  ls_documentheader-doc_type    = IW_BKPF-BLART. "凭证类型
    

    ls_documentheader-doc_type = ‘KZ’. "凭证类型
    ls_documentheader-comp_code = iw_bkpf-bukrs."公司
    ls_documentheader-doc_date = iw_bkpf-bldat ."凭证日期
    ls_documentheader-pstng_date = iw_bkpf-budat ."过账日期

  •  ls_documentheader-fisc_year   =  IW_BKPF-GJAHR."年度
    

    ls_documentheader-fisc_year = iw_bkpf-budat+0(4)."年度

  •  ls_documentheader-fis_period  =  IW_BKPF-MONAT."期间
    

    ls_documentheader-fis_period = iw_bkpf-budat+4(2)."期间
    ls_documentheader-ref_doc_no = iw_bkpf-xblnr . "付款单号

    IF iw_bkpf-waers = ‘CNY’.
    iw_bkpf-waers = ‘RMB’.
    ENDIF.

    CLEAR ls_bseg.

  • 存放与总账相关的行项目信息。
    READ TABLE it_bseg INTO ls_bseg INDEX 1.
    ls_accountgl-itemno_acc = ls_bseg-buzei. "行项目号
    SELECT SINGLE hkont hbkid hktid
    FROM t012k
    INTO (ls_accountgl-gl_account,ls_accountgl-housebankid,ls_accountgl-housebankacctid)
    WHERE bnkn2 = ls_bseg-mndid.
    *原因代码根据款项用途
    SELECT SINGLE banka
    FROM ztrt00020 INTO ls_bseg-rstgr
    WHERE bnkn2 = ls_bseg-grant_nbr.
    *利润中心取值
    CONCATENATE ‘9’ iw_bkpf-bukrs ‘00001’ INTO ls_bseg-prctr.
    ls_accountgl-profit_ctr = ls_bseg-prctr . "利润中心
    ls_accountgl-value_date = ls_bseg-valut . "起息日 起息日=收款日期
    ls_accountgl-alloc_nmbr = ls_bseg-zuonr . "付款日期或票据号
    ls_accountgl-item_text = ls_bseg-sgtxt . "文本=
    ls_accountgl-bus_area = ‘1000’. "业务范围 改为固定值
    ls_accountgl-ref_key_3 = ls_bseg-xref3. "备用

APPEND ls_accountgl TO lt_accountgl .
CLEAR ls_accountgl .

  • 总账
    ls_currencyamount-itemno_acc = ls_bseg-buzei . "行项目号
    ls_currencyamount-currency = iw_bkpf-waers. "货币单位
    ls_currencyamount-amt_doccur = ls_bseg-wrbtr * ( -1 ). "合计金额
    APPEND ls_currencyamount TO lt_currencyamount .
    CLEAR ls_currencyamount .

  • & EXTENSION2 扩展字段增强部分

wa_zexten-posnr = ls_bseg-buzei. "凭证行项目
wa_zexten-rstgr = ls_bseg-rstgr. "凭证行项目原因代码
wa_zexten-xref1_hd = iw_bkpf-xref1_hd. "流水号

lt_extension2-structure = ‘ZSFI6900001’.
lt_extension2-valuepart1 = wa_zexten.
APPEND lt_extension2.

CLEAR ls_bseg.

  • 存放与供应商相关的行项目信息,可设定特殊总账标识。
    LOOP AT it_bseg INTO ls_bseg WHERE buzei > 1.

    CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’
    EXPORTING
    input = ls_bseg-lifnr
    IMPORTING
    output = ls_bseg-lifnr.
    *利润中心取值
    CONCATENATE ‘9’ iw_bkpf-bukrs ‘00001’ INTO ls_bseg-prctr.
    CLEAR lv_mitkz.
    SELECT SINGLE mitkz INTO lv_mitkz
    FROM skb1
    WHERE bukrs = iw_bkpf-bukrs
    AND saknr = ls_bseg-hkont.
    IF lv_mitkz IS INITIAL.
    ls_accountgl-itemno_acc = ls_bseg-buzei. "行项目号
    ls_accountgl-gl_account = ls_bseg-hkont . "总账科目
    ls_accountgl-profit_ctr = ls_bseg-prctr . "利润中心
    ls_accountgl-value_date = ls_bseg-valut . "起息日 起息日=收款日期
    ls_accountgl-alloc_nmbr = ls_bseg-zuonr . "付款日期或票据号
    ls_accountgl-item_text = ls_bseg-sgtxt . "文本=
    " ls_accountgl-bus_area = ‘1000’. "业务范围 改为固定值 20220425 WeiZB
    ls_accountgl-bus_area = lv_gsber. "业务范围 20230130 WeiZB
    ls_accountgl-ref_key_3 = ls_bseg-xref3. "备用
    APPEND ls_accountgl TO lt_accountgl .
    CLEAR ls_accountgl .
    ELSE.
    ls_accountpayable-itemno_acc = ls_bseg-buzei. "行项目号
    ls_accountpayable-vendor_no = ls_bseg-lifnr . "供应商编码
    ls_accountpayable-sp_gl_ind = ls_bseg-umskz."特殊总账标识 A标识预付款,空是应付款 5标识供应商质保金
    ls_accountpayable-gl_account = ls_bseg-hkont . "总账科目
    ls_accountpayable-bus_area = ‘1000’. "业务范围 改为固定值
    ls_accountpayable-bline_date = ls_bseg-zfbdt."付款基准日前=
    ls_accountpayable-profit_ctr = ls_bseg-prctr."利润中心
    ls_accountpayable-item_text = ls_bseg-sgtxt. "付款单文本
    ls_accountpayable-alloc_nmbr = ls_bseg-zuonr ."合同号
    ls_accountpayable-ref_key_3 = ls_bseg-xref3. "备用
    APPEND ls_accountpayable TO lt_accountpayable .
    CLEAR ls_accountpayable .
    ENDIF.

  • 供应商
    ls_currencyamount-itemno_acc = ls_bseg-buzei . "行项目号
    ls_currencyamount-currency = iw_bkpf-waers. "货币单位
    ls_currencyamount-amt_doccur = ls_bseg-wrbtr. "合计金额
    APPEND ls_currencyamount TO lt_currencyamount .
    CLEAR ls_currencyamount .

ENDLOOP.

CALL FUNCTION ‘BAPI_ACC_DOCUMENT_POST’
EXPORTING
documentheader = ls_documentheader
IMPORTING

  • OBJ_TYPE       =
    obj_key        = lv_key
    
  • OBJ_SYS        =
    

    TABLES
    accountgl = lt_accountgl

  • ACCOUNTRECEIVABLE = lt_accountreceivable
    accountpayable = lt_accountpayable
    currencyamount = lt_currencyamount
    return         = lt_return
    extension2     = lt_extension2.
    
  • S 成功,E 错误,W 警告,I 信息,A 中断
    LOOP AT lt_return INTO lw_return WHERE type = ‘E’
    OR type = ‘A’.
    EXIT.
    ENDLOOP.

  • 创建成功
    IF sy-subrc <> 0.
    CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
    EXPORTING
    wait = ‘X’.

    CLEAR ls_msg.
    ls_msg-type = ‘S’.
    ls_msg-message = lv_key.
    APPEND ls_msg TO lt_msg.

ELSE.
CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.

LOOP AT lt_return INTO lw_return WHERE type = 'E'.
  CLEAR ls_msg.
  ls_msg-type = 'E'.
  ls_msg-message = lw_return-message.
  APPEND ls_msg TO lt_msg.
ENDLOOP.

ENDIF.

****测试数据
*IW_BKPF-FRATH = ‘30.00’.
*IW_BKPF-BKTXT = ‘人工测试G6数据’.
*IW_BKPF-BLART = ‘KZ’.
*IW_BKPF-BUKRS = ‘5100’.
*IW_BKPF-BLDAT = ‘20200820’.
*IW_BKPF-BUDAT = ‘20200820’.
*IW_BKPF-GJAHR = ‘2020’.
*IW_BKPF-MONAT = ‘08’.
*IW_BKPF-XBLNR = ‘SQ5100200820003’."G6付款申请单号
*IW_BKPF-XREF1_HD = ‘2020082008’."G6付款流水号
*IW_BKPF-WAERS = ‘RMB’.
*
*
*LS_BSEG-BUZEI = ‘001’.
*LS_BSEG-PRZNR = ‘P1’.
*LS_BSEG-MNDID = ‘AP’.
*LS_BSEG-GRANT_NBR = ‘001001002’.
*LS_BSEG-VALUT = ‘20200820’.
*LS_BSEG-ZUONR = ‘748399207372782829’.
*LS_BSEG-SGTXT = ‘测试项目文本’ .
*LS_BSEG-GSBER = ‘1000’ .
*LS_BSEG-XREF3 = ‘总备用’.
*
*LS_BSEG-WRBTR = ‘10.00’.
**LS_BSEG-RSTGR = ‘1A1’.
*APPEND LS_BSEG TO IT_BSEG.
*
*LS_BSEG-BUZEI = ‘002’.
*LS_BSEG-GRANT_NBR = ‘001001002’.
*LS_BSEG-LIFNR = ‘0040007214’.
*LS_BSEG-GSBER = ‘1000’.
*LS_BSEG-ZUONR = ‘’ .
*LS_BSEG-ZFBDT = ‘20200820’ .
**LS_BSEG-PRCTR = ‘9520000005’ .
*LS_BSEG-SGTXT = ‘测试项目文本’ .
*LS_BSEG-XREF3 = ‘备用’ .
*
*LS_BSEG-WRBTR = ‘10.00’.
*APPEND LS_BSEG TO IT_BSEG.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值