【修正】銷售開票BAPI實例: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

銷售開票BAPI實例:BAPI_BILLINGDOC_CREATEMULTIPLE

請問這篇有啥問題嗎?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章