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
請問這篇有啥問題嗎?