SAP 预制发票 BAPI_INCOMINGINVOICE_CREATE

FUNCTION BAPI_INCOMINGINVOICE_CREATE.
*"----------------------------------------------------------------------
"“本地接口:
*” IMPORTING
*" VALUE(I_MM1_0030) TYPE ZTPSSC_MM1_0030 OPTIONAL
*" VALUE(I_FIX) TYPE CHAR1 OPTIONAL
*" EXPORTING
*" VALUE(OUTPUT) TYPE MSG
*" VALUE(E_BELNR) TYPE RE_BELNR
*" VALUE(E_GJAHR) TYPE GJAHR
*" TABLES
*" T_MM1_0030I STRUCTURE ZTPSSC_MM1_0030I
*"----------------------------------------------------------------------

DATA: vp_eind(1),
ls_headerdata LIKE bapi_incinv_create_header,

    lt_itemdata         LIKE TABLE OF bapi_incinv_create_item,
    ls_itemdata         LIKE bapi_incinv_create_item,

    lt_materialdata     LIKE TABLE OF bapi_incinv_create_material,
    ls_materialdata     LIKE bapi_incinv_create_material,

    lt_taxdata          LIKE TABLE OF bapi_incinv_create_tax,
    ls_taxdata          LIKE bapi_incinv_create_tax,

    lt_return           LIKE TABLE OF bapiret2 WITH HEADER LINE,
    ls_return           LIKE bapiret2,

    lv_invoicedocnumber LIKE bapi_incinv_fld-inv_doc_no,
    lv_fiscalyear       LIKE bapi_incinv_fld-fisc_year.

DATA: lv_mwskz LIKE ekpo-mwskz.
DATA: lv_rblgp TYPE rblgp.

DATA: lv_ekko TYPE ekko,
lv_ebeln LIKE ekko-ebeln.
DATA: ls_essr TYPE essr,
lt_essr TYPE TABLE OF essr.

DATA: lt_mm1_0030 LIKE TABLE OF ztpssc_mm1_0030.
DATA: lt_mm1_0030i LIKE TABLE OF ztpssc_mm1_0030i.

DATA: lw_mm1_0030 LIKE LINE OF lt_mm1_0030.
DATA: lw_mm1_0030i LIKE LINE OF lt_mm1_0030i.

DATA: lw_lfm1 TYPE lfm1.

CLEAR: e_belnr,e_gjahr.

lw_mm1_0030 = i_mm1_0030.
lt_mm1_0030i[] = t_mm1_0030i[].

IF i_fix = ‘X’.
lw_mm1_0030-bldat = ‘20211008’.
lw_mm1_0030-budat = ‘20211008’.

lw_mm1_0030-bukrs = '5200'.


lw_mm1_0030-rmwwr =  '201880.00'.      "总金额
lw_mm1_0030-wmwst1 =  '22809.66'.       "税额

lw_mm1_0030-zuonr  = '52002021090115'.  "合同号

lw_mm1_0030-xblnr  = '666666'.  "发票号.

ENDIF.

  • BAPI赋值

    ls_headerdata-invoice_ind = ‘X’. "sp_head-xrech. "发票标志
    ls_headerdata-doc_type = ‘RE’. "sp_head-blart.
    ls_headerdata-pymt_meth = ‘U’. "sp_head-blart.
    ls_headerdata-bus_area = ‘1000’. "sp_head-GSBER. "业务范围
    ls_headerdata-doc_date = lw_mm1_0030-bldat. "sp_head-bldat.
    ls_headerdata-pstng_date = lw_mm1_0030-budat. "sp_head-budat.
    ls_headerdata-bline_date = lw_mm1_0030-zfbdt. "sp_head-zfbdt.
    ls_headerdata-dsct_days1 = lw_mm1_0030-netdt - lw_mm1_0030-zfbdt.

    ls_headerdata-comp_code = lw_mm1_0030-bukrs.
    ls_headerdata-del_costs_taxc = lw_mm1_0030-mwskz1. "‘J2’.

    ls_headerdata-header_txt = lw_mm1_0030-sgtxt. "文本
    ls_headerdata-item_text = lw_mm1_0030-sgtxt. "文本

    "基线日期/付款计算的起始日期 发票抬头数据:RBKP_ZFBDT付款基准日期=RBKP_BUDAT过账日期

    ls_headerdata-currency = lw_mm1_0030-waers. "货币
    ls_headerdata-gross_amount = lw_mm1_0030-rmwwr. "‘24’."sp_head-rmwwr. "总金额

    ls_headerdata-alloc_nmbr = lw_mm1_0030-zuonr. "合同号

  • ls_headerdata-diff_inv = sp_head-lifnr. "出票方/供应商
    ls_headerdata-ref_doc_no = lw_mm1_0030-xblnr. "发票号

"填弃税表值 lt_taxdata
FREE: lt_taxdata.
CLEAR: ls_taxdata.

ls_taxdata-tax_code = lw_mm1_0030-mwskz1. "‘J2’. "lw_mm1_0030i-mwskz. "税码
IF i_fix = ‘X’.
ls_taxdata-tax_amount = ‘11809.29’. "税额
ELSE.
ls_taxdata-tax_amount = lw_mm1_0030-wmwst1. "‘11809.29’. "税额
ENDIF.
ls_taxdata-itemno_tax = ‘000001’.
APPEND ls_taxdata TO lt_taxdata.

IF i_fix = ‘X’.
lw_mm1_0030i-buzei = ‘000001’.
lw_mm1_0030i-ebeln = ‘4500022557’.
lw_mm1_0030i-ebelp = ‘10’.

lw_mm1_0030i-wrbtr = '90840.71'.
lw_mm1_0030i-menge = '41.060'.
lw_mm1_0030i-bstme = 'TO'.
lw_mm1_0030i-mwskz = 'J2'.

ELSE.

CLEAR lv_ebeln.
CLEAR ls_essr.
CLEAR lt_essr.

LOOP AT lt_mm1_0030i INTO lw_mm1_0030i.
  lv_ebeln = lw_mm1_0030i-ebeln.

  SELECT * INTO TABLE lt_essr
    FROM essr
   WHERE ebeln = lv_ebeln.

  EXIT.
ENDLOOP.

CLEAR: ls_itemdata.



LOOP AT lt_mm1_0030i INTO lw_mm1_0030i.

  CLEAR: ls_itemdata.


  ls_itemdata-invoice_doc_item = lw_mm1_0030i-buzei.    "发票行项目号
  ls_itemdata-po_number        = lw_mm1_0030i-ebeln.    "PO号码
  ls_itemdata-po_item          = lw_mm1_0030i-ebelp.    "PO行项目号

  CLEAR ls_essr.
  READ TABLE lt_essr INTO ls_essr WITH KEY ebeln = lw_mm1_0030i-ebeln
                                           ebelp = lw_mm1_0030i-ebelp
                                           loekz = ''.
  IF sy-subrc EQ 0.
    ls_itemdata-sheet_no = ls_essr-lblni.
    ls_itemdata-GRIR_CLEAR_SRV = 'X'.  "服务:采购订单行项目已清算

  ELSE.
    ls_itemdata-quantity         = lw_mm1_0030i-menge.    "发票数量
    ls_itemdata-po_unit          = lw_mm1_0030i-bstme.    "单位

    DATA: lv_po_pr_uom LIKE ekpo-bprme.

    SELECT SINGLE bprme INTO lv_po_pr_uom
      FROM ekpo WHERE ebeln = lw_mm1_0030i-ebeln
                  AND ebelp = lw_mm1_0030i-ebelp.

    ls_itemdata-po_pr_uom      = lv_po_pr_uom. "'TO'. "lw_mm1_0030i-bstme.

  ENDIF.

  ls_itemdata-item_amount      = lw_mm1_0030i-wrbtr.    "不含税金额

  ls_itemdata-tax_code         = lw_mm1_0030i-mwskz.    "税码 mwskz = 'J1'.


  IF lw_mm1_0030i-lfbnr IS NOT INITIAL.

    ls_itemdata-ref_doc          = lw_mm1_0030i-lfbnr.
    ls_itemdata-ref_doc_year     = lw_mm1_0030i-lfgja.
    ls_itemdata-ref_doc_it       = lw_mm1_0030i-lfpos.

  ENDIF.

  APPEND ls_itemdata TO lt_itemdata.

ENDLOOP.

ENDIF.

  • CLEAR: ls_taxdata.

  • ENDLOOP.

  • ENDLOOP.

CALL FUNCTION ‘BAPI_INCOMINGINVOICE_CREATE’
EXPORTING
headerdata = ls_headerdata

  • ADDRESSDATA      =
    

    IMPORTING
    invoicedocnumber = lv_invoicedocnumber
    fiscalyear = lv_fiscalyear
    TABLES
    itemdata = lt_itemdata

  • ACCOUNTINGDATA   =
    
  • GLACCOUNTDATA    =
    
  • materialdata     = lt_materialdata
    taxdata          = lt_taxdata
    
  • WITHTAXDATA      =
    
  • VENDORITEMSPLITDATA =
    return           = lt_return.
    

    IF lv_invoicedocnumber IS INITIAL OR lv_fiscalyear IS INITIAL.
    vp_eind = ‘X’.
    ENDIF.

    IF vp_eind = ‘X’.
    CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’.

    LOOP AT lt_return WHERE type = ‘E’ OR type = ‘A’.

    CONCATENATE output lt_return-message ';'INTO output.
    

    ENDLOOP.

    ELSE.
    CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
    EXPORTING
    wait = ‘X’.

    e_belnr = lv_invoicedocnumber.
    e_gjahr = lv_fiscalyear.

    CONCATENATE ‘发票校验成功!:’ lv_invoicedocnumber ‘发票年度:’ lv_fiscalyear INTO output.
    ENDIF.

ENDFUNCTION.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BAPI_INCOMINGINVOICE_CREATE是一个SAP标准的BAPI,用于创建应付账款发票。以下是使用BAPI_INCOMINGINVOICE_CREATE的步骤: 1. 准备输入参数数据:需要创建发票的供应商、发票行项目数据、发票头信息等。 2. 调用BAPI_INCOMINGINVOICE_CREATE:将输入参数传递给BAPI_INCOMINGINVOICE_CREATE,调用该BAPI创建发票。 3. 检查返回值:BAPI返回一个结构体,其中包含了创建发票的结果信息。需要检查返回值,以确定发票是否成功创建。 以下是一个简单的ABAP代码示例,演示如何使用BAPI_INCOMINGINVOICE_CREATE来创建发票: ``` DATA: wa_head LIKE bapi_incinv_create_header, wa_item LIKE bapi_incinv_create_item, it_item TYPE STANDARD TABLE OF bapi_incinv_create_item WITH HEADER LINE. * 准备输入参数数据 wa_head-companycode = '1000'. wa_head-documentdate = sy-datum. wa_head-pstngdate = sy-datum. wa_head-duedate = sy-datum + 30. wa_head-vendor = '10000001'. wa_head-purch_org = '1000'. wa_head-purch_group = '001'. wa_head-currency = 'USD'. wa_item-po_item = '00010'. wa_item-gross_amount = '100.00'. wa_item-currency = 'USD'. wa_item-quantity = 1. wa_item-orderid = '1000'. wa_item-material = 'M-0001'. wa_item-short_text = 'Test item'. APPEND wa_item TO it_item. * 调用BAPI_INCOMINGINVOICE_CREATE CALL FUNCTION 'BAPI_INCOMINGINVOICE_CREATE' EXPORTING headerdata = wa_head TABLES invoicedata = it_item. * 检查返回值 IF sy-subrc <> 0. MESSAGE 'Failed to create invoice.' TYPE 'E'. ELSE. MESSAGE 'Invoice created successfully.' TYPE 'S'. ENDIF. ``` 在实际使用中,需要根据具体业务需求,调整输入参数数据的内容。同时,还需要注意,BAPI_INCOMINGINVOICE_CREATE可能会抛出多种异常情况,需要对这些异常情况进行处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值