SAP miro 创建采购发票实例

DATA: ls_headerdata LIKE bapi_incinv_create_header,
lt_itemdata LIKE TABLE OF bapi_incinv_create_item,
ls_itemdata LIKE bapi_incinv_create_item,
lt_return LIKE TABLE OF bapiret2,
ls_return LIKE bapiret2,
lv_invoicedocnumber LIKE bapi_incinv_fld-inv_doc_no.
DATA: lv_gross TYPE bapi_rmwwr.

TYPES: BEGIN OF ty_ekpo,
ebeln TYPE ekko-ebeln,
bukrs TYPE ekko-bukrs,
waers TYPE ekko-waers,

       ebelp  TYPE ekpo-ebelp,
       netpr  TYPE ekpo-netpr,
       menge  TYPE ekpo-menge,
       meins  TYPE ekpo-meins,

       mblnr  TYPE mseg-mblnr,
       zeile  TYPE mseg-zeile,
       mjahr  TYPE mseg-mjahr,
       bwart  TYPE mseg-bwart,

       belnr  TYPE re_belnr,
       msg    TYPE string,            "销售发票
       status TYPE c LENGTH 4,


     END OF ty_ekpo.

DATA: lt_ekpo TYPE TABLE OF ty_ekpo,
ls_ekpo TYPE ty_ekpo,
ls_ekpotmp TYPE ty_ekpo.

DATA:lt_vbeln TYPE TABLE OF ty_out WITH HEADER LINE.
DATA: lv_index TYPE i,
lv_mseg TYPE string.

lt_vbeln[] = lt_out[] .

DELETE lt_vbeln WHERE check <> ‘X’.
SORT lt_vbeln BY ebeln.
DELETE ADJACENT DUPLICATES FROM lt_vbeln COMPARING ebeln.

IF lt_vbeln[] IS NOT INITIAL.
SELECT
a~ebeln
a~bukrs
a~waers
b~ebelp
b~netpr
c~menge
b~meins
c~mblnr
c~zeile
c~mjahr
c~bwart

INTO CORRESPONDING FIELDS OF TABLE lt_ekpo
FROM ekko AS a
INNER JOIN ekpo AS b ON a~ebeln = b~ebeln
INNER JOIN mseg AS c ON c~ebeln = b~ebeln AND c~ebelp = b~ebelp AND bwart = ‘101’
FOR ALL ENTRIES IN lt_vbeln
WHERE a~ebeln = lt_vbeln-ebeln .
ENDIF.

SORT lt_ekpo BY ebeln mblnr.
LOOP AT lt_ekpo ASSIGNING FIELD-SYMBOL() .
lv_index = lv_index + 1.
ls_itemdata-invoice_doc_item = lv_index.
ls_itemdata-po_number = -ebeln.
ls_itemdata-po_item = -ebelp.
ls_itemdata-item_amount = -menge * -netpr.
ls_itemdata-quantity = -menge.
ls_itemdata-po_unit = -meins…
ls_itemdata-tax_code = ‘J2’.
ls_itemdata-ref_doc = -mblnr.“参考凭证项目
ls_itemdata-ref_doc_year = -mjahr.
ls_itemdata-ref_doc_it = -zeile.” 参考凭证项目
APPEND ls_itemdata TO lt_itemdata.

lv_gross = lv_gross + ls_itemdata-item_amount + ls_itemdata-item_amount  * 13 / 100.
  • ls_ekpotmp = .
    AT END OF ebeln.
    *&header
    CLEAR: ls_headerdata.
    ls_headerdata-invoice_ind = ‘X’.
    ls_headerdata-doc_date = sy-datum.
    ls_headerdata-pstng_date = sy-datum.
    ls_headerdata-comp_code = -bukrs…
    ls_headerdata-currency = -waers.

    ls_headerdata-bline_date = sy-datum. "基准日期
    ls_headerdata-calc_tax_ind = ‘X’.
    ls_headerdata-deliv_posting = ‘S’.
    ls_headerdata-pmnttrms = ‘0001’.
    *ls_headerdata-item_text = ‘text’.
    ls_headerdata-gross_amount = lv_gross.
    ls_headerdata-ref_doc_no = ‘123’."参考要啥

    CALL FUNCTION ‘BAPI_INCOMINGINVOICE_CREATE’
    EXPORTING
    headerdata = ls_headerdata
    IMPORTING
    invoicedocnumber = lv_invoicedocnumber
    TABLES
    itemdata = lt_itemdata
    return = lt_return.

    IF lv_invoicedocnumber IS NOT INITIAL .
    CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT’
    EXPORTING
    wait = ‘X’.

    -msg = ‘采购开票完成’.
    -status = icon_green_light.
    -belnr = lv_invoicedocnumber.
    ELSE.

    CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK’

  •     IMPORTING
    
  •       RETURN        =
        .
      <fs>-msg    = '采购开票失败'.
      <fs>-status = icon_red_light.
      LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A' OR type = 'X'.
        <fs>-msg = <fs>-msg && ',' && ls_return-message.
      ENDLOOP.
    
    ENDIF.
    
    
    LOOP AT lt_out  ASSIGNING FIELD-SYMBOL(<fs_o2>) .
      READ TABLE lt_ekpo INTO ls_ekpo WITH KEY mblnr = <fs_o2>-mblnr BINARY SEARCH.
      IF sy-subrc = 0.
        <fs_o2>-belnr    = ls_ekpo-belnr.
        <fs_o2>-msg2     = ls_ekpo-msg.
        <fs_o2>-status2  = ls_ekpo-status.
    
        "更新sto01
        UPDATE ztsto_01 SET belnr = ls_ekpo-belnr WHERE ebeln = ls_ekpo-ebeln AND ebelp = ls_ekpo-ebelp AND vbeln_d = lt_vbeln-vbeln_d AND mblnr = ls_ekpo-mblnr.
        IF  sy-subrc = 0.
          COMMIT WORK.
        ENDIF.
    
      ENDIF.
      CLEAR:ls_ekpo.
    ENDLOOP.
    
    CLEAR:lv_gross,lt_itemdata,lv_index.
    

    ENDAT.
    CLEAR:ls_ekpo,ls_itemdata,ls_ekpotmp.
    ENDLOOP.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值