VF01生成billing凭证:BAPI_BILLINGDOC_CREATEMULTIPLE

VF01生成billing凭证:BAPI_BILLINGDOC_CREATEMULTIPLE

  form frm_generate_billing .
*-------------------------------------------------------------------------
*            EKBE部分 生成VF01凭证
*-------------------------------------------------------------------------
  data: lt_billingdatain   type table of bapivbrk,
        ls_billingdatain   type bapivbrk,
        lt_success         type table of bapivbrksuccess,
        ls_success         type bapivbrksuccess,
        lt_return2          type table of bapiret1,
        ls_return2          type bapiret1.

  data: lv_fkart      type vbrk-fkart,
        lv_vbtyp      type vbrk-vbtyp.

* BAPI赋值
  loop at gt_alv into gs_alv where source = 'EKBE' and jspri ne 0.
    clear: lv_vbtyp,lv_vbtyp.
    ls_billingdatain-doc_number    = gs_alv-ebeln. "采购订单
    ls_billingdatain-itm_number    = gs_alv-ebelp. "采购订单行项目
    ls_billingdatain-ref_doc       = gs_alv-belnr. "交货单号
    ls_billingdatain-ref_item      = gs_alv-buzei. "交货单行项目
    select single fkaiv vbtyp into (lv_fkart,lv_vbtyp) from likp where vbeln = gs_alv-belnr.
    ls_billingdatain-ordbilltyp    = lv_fkart.
    ls_billingdatain-ref_doc_ca    = lv_vbtyp.
    select single vkorg vtweg spart kunnr
      into (ls_billingdatain-salesorg,ls_billingdatain-distr_chan,
            ls_billingdatain-division,ls_billingdatain-ship_to)
      from ekpv
      where ebeln = gs_alv-ebeln
       and  ebelp = gs_alv-ebelp.
    ls_billingdatain-sold_to       = ls_billingdatain-ship_to. "售达方
    ls_billingdatain-bill_to       = ls_billingdatain-ship_to.  "开票方
    ls_billingdatain-payer         = ls_billingdatain-ship_to.  "付款方
    select single a~zterm a~inco1 a~inco2 b~werks
      into (ls_billingdatain-payment_terms,ls_billingdatain-incoterms1,
             ls_billingdatain-incoterms2,ls_billingdatain-plant)
      from ekko as a
      inner join ekpo as b on b~ebeln = a~ebeln
      where b~ebeln = gs_alv-ebeln
       and  b~ebelp = gs_alv-ebelp.
    ls_billingdatain-material      = gs_alv-matnr.
    ls_billingdatain-req_qty       = abs( gs_alv-jsshl ).
    ls_billingdatain-sales_unit    = gs_alv-meins.
    ls_billingdatain-bill_date     = g_post_date.
    append ls_billingdatain to lt_billingdatain.

    clear: ls_billingdatain.
  endloop.

  sort lt_billingdatain by ref_doc ref_item.
  refresh: gt_ztfi014,lt_return,lt_success.
  clear:ls_return,ls_success.
  call function 'BAPI_BILLINGDOC_CREATEMULTIPLE'
    tables
      billingdatain = lt_billingdatain
      return        = lt_return
      success       = lt_success.

  if lt_success[] is initial.
    cp_eind = 'X'.
  endif.

  if cp_eind eq 'X'.
    call function 'BAPI_TRANSACTION_ROLLBACK'.
  else.
    call function 'BAPI_TRANSACTION_COMMIT'
      exporting
        wait = 'X'.

    "返回成功的发票号
    loop at lt_success into ls_success.
      clear: gs_log.
      gs_log-docno = ls_success-bill_doc.
      gs_log-message = ls_success-bill_doc_item.
      append gs_log to gt_log.

*---插入值到表ZTFI014
      clear: gs_ztfi014.
      gs_ztfi014-tcode = sy-tcode.
      gs_ztfi014-seqno = p_datum.
      gs_ztfi014-objnr = p_bukr2.
      gs_ztfi014-gjahr = p_datum(4).
      gs_ztfi014-bukrs = p_bukrs.
      gs_ztfi014-belnr = ls_success-bill_doc.
      append gs_ztfi014 to gt_ztfi014.
      clear: gs_log,gs_ztfi014.
    endloop.

    read table lt_success into ls_success index 1.

*----处理ztfi014表
    sort gt_ztfi014 by belnr.
    delete adjacent duplicates from gt_ztfi014 comparing belnr.
    insert ztfi014 from table gt_ztfi014 accepting duplicate keys.

  endif.

  loop at lt_return into ls_return.
    clear gs_log.
    gs_log-type = ls_return2-type.
    gs_log-docno = invoicedocnumber.
    call function 'MESSAGE_TEXT_BUILD'
      exporting
        msgid               = ls_return-id
        msgnr               = ls_return-number
        msgv1               = ls_return-message_v1
        msgv2               = ls_return-message_v2
        msgv3               = ls_return-message_v3
        msgv4               = ls_return-message_v4
      importing
        message_text_output = gs_log-message.

    case gs_log-type.
      when 'S'.
        gs_log-icon = '3'.
      when 'W'.
        gs_log-icon = '2'.
      when 'E' or 'A'.
        gs_log-icon = '1'.
      when others.
    endcase.

    append gs_log to gt_log.
    clear ls_return2.
  endloop.
  if cp_eind eq 'X'."billing凭证 .
    message e001(00) with 'VF01生成billing凭证失败,请点击显示消息查看详细信息!'.
  endif.
endform.                    " FRM_GENERATE_BILLING
posted @ 2017-12-01 17:27  以成Ronny  阅读(4184)  评论(0)    收藏  举报