*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(IM_BUKRS) TYPE ZTS_BILLING_INPUT-IM_BUKRS
*" VALUE(IM_KUNRG_L) TYPE ZTS_BILLING_INPUT-IM_KUNRG_L OPTIONAL
*" VALUE(IM_KUNRG_H) TYPE ZTS_BILLING_INPUT-IM_KUNRG_H OPTIONAL
*" VALUE(IM_FKDAT_L) TYPE ZTS_BILLING_INPUT-IM_FKDAT_L OPTIONAL
*" VALUE(IM_FKDAT_H) TYPE ZTS_BILLING_INPUT-IM_FKDAT_H OPTIONAL
*" VALUE(IM_VBELN_L) TYPE ZTS_BILLING_INPUT-IM_VBELN_L OPTIONAL
*" VALUE(IM_VBELN_H) TYPE ZTS_BILLING_INPUT-IM_VBELN_H OPTIONAL
*" EXPORTING
*" VALUE(SUBRC) LIKE SYST-SUBRC
*" VALUE(MESSAGE) TYPE BAPI_MSG
*" TABLES
*" OUT_BILL STRUCTURE ZTS_BILLING_OUTPUT OPTIONAL
*"----------------------------------------------------------------------
DATA: ITAB_001K TYPE TABLE OF T001K WITH HEADER LINE.
DATA: ITAB_001W TYPE TABLE OF T001W WITH HEADER LINE.
DATA: GT_MATDOC TYPE TABLE OF MATDOC WITH HEADER LINE.
DATA: GT_LIPS TYPE TABLE OF LIPS WITH HEADER LINE.
DATA: GT_LIPS1 TYPE TABLE OF LIPS WITH HEADER LINE.
DATA: GT_VBAP TYPE TABLE OF VBAP WITH HEADER LINE.
DATA: GT_KNA1 TYPE TABLE OF KNA1 WITH HEADER LINE.
DATA: GT_ZBILL TYPE TABLE OF ZBILL WITH HEADER LINE.
DATA: GT_VBPA TYPE TABLE OF VBPA WITH HEADER LINE.
DATA: GT_ADRC TYPE TABLE OF ADRC WITH HEADER LINE.
DATA: GT_OUT_BILL TYPE TABLE OF ZTS_BILLING_OUTPUT WITH HEADER LINE.
DATA: GR_KUNRG TYPE RANGE OF KUNNR,
GW_KUNRG LIKE LINE OF GR_KUNRG.
DATA: GR_DATS TYPE RANGE OF DATS,
GW_DATS LIKE LINE OF GR_DATS.
DATA: GR_VBELN TYPE RANGE OF VBELN_VL,
GW_VBELN LIKE LINE OF GR_VBELN.
DATA: LV_KUNRG TYPE KUNNR.
DATA: LV_VBELN TYPE VBELN_VL.
*1.根据公司找出该公司对应的工厂清单
CLEAR ITAB_001K[].
CLEAR ITAB_001W[].
CALL FUNCTION 'K_WERKS_OF_BUKRS_FIND'
EXPORTING
BUKRS = IM_BUKRS
TABLES
ITAB_001K = ITAB_001K[]
ITAB_001W = ITAB_001W[]
EXCEPTIONS
NO_ENTRY_IN_T001K = 1
NO_ENTRY_IN_T001W = 2
OTHERS = 3.
IF ITAB_001K[] IS NOT INITIAL.
CLEAR GW_KUNRG.
CLEAR GR_KUNRG[].
IF IM_KUNRG_L IS NOT INITIAL.
LV_KUNRG = IM_KUNRG_L.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_KUNRG
IMPORTING
OUTPUT = LV_KUNRG.
IM_KUNRG_L = LV_KUNRG.
LV_KUNRG = IM_KUNRG_H.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_KUNRG
IMPORTING
OUTPUT = LV_KUNRG.
IM_KUNRG_H = LV_KUNRG.
IF IM_KUNRG_H IS NOT INITIAL.
GW_KUNRG-SIGN = 'I'.
GW_KUNRG-OPTION = 'BT'.
GW_KUNRG-LOW = IM_KUNRG_L.
GW_KUNRG-HIGH = IM_KUNRG_H.
APPEND GW_KUNRG TO GR_KUNRG.
ELSE.
GW_KUNRG-SIGN = 'I'.
GW_KUNRG-OPTION = 'EQ'.
GW_KUNRG-LOW = IM_KUNRG_L.
APPEND GW_KUNRG TO GR_KUNRG.
ENDIF.
ENDIF.
CLEAR GW_DATS.
CLEAR GR_DATS[].
IF IM_FKDAT_L IS NOT INITIAL.
IF IM_FKDAT_H IS NOT INITIAL.
GW_DATS-SIGN = 'I'.
GW_DATS-OPTION = 'BT'.
GW_DATS-LOW = IM_FKDAT_L.
GW_DATS-HIGH = IM_FKDAT_H.
APPEND GW_DATS TO GR_DATS.
ELSE.
GW_DATS-SIGN = 'I'.
GW_DATS-OPTION = 'EQ'.
GW_DATS-LOW = IM_FKDAT_L.
APPEND GW_DATS TO GR_DATS.
ENDIF.
ENDIF.
CLEAR GW_VBELN.
CLEAR GR_VBELN[].
IF IM_VBELN_L IS NOT INITIAL.
LV_VBELN = IM_VBELN_L.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_VBELN
IMPORTING
OUTPUT = LV_VBELN.
IM_VBELN_L = LV_VBELN.
LV_VBELN = IM_VBELN_H.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LV_VBELN
IMPORTING
OUTPUT = LV_VBELN.
IM_VBELN_H = LV_VBELN.
IF IM_VBELN_H IS NOT INITIAL.
GW_VBELN-SIGN = 'I'.
GW_VBELN-OPTION = 'BT'.
GW_VBELN-LOW = IM_VBELN_L.
GW_VBELN-HIGH = IM_VBELN_H.
APPEND GW_VBELN TO GR_VBELN.
ELSE.
GW_VBELN-SIGN = 'I'.
GW_VBELN-OPTION = 'EQ'.
GW_VBELN-LOW = IM_VBELN_L.
APPEND GW_VBELN TO GR_VBELN.
ENDIF.
ENDIF.
*2.MATDOC表KUNNR=客户编码清单、WERKS=第一步的工厂清单、过账日期BUDAT IN 选择条件的时间段 、
*VBELN_IM不为空,取出交货单号VBELN_IM。
CLEAR GT_MATDOC[].
SELECT VBELN_IM INTO CORRESPONDING FIELDS OF TABLE GT_MATDOC[] FROM MATDOC
FOR ALL ENTRIES IN ITAB_001W[]
WHERE WERKS = ITAB_001W-WERKS
AND KUNNR IN GR_KUNRG
AND BUDAT IN GR_DATS
AND VBELN_IM <> ''
.
IF GT_MATDOC[] IS NOT INITIAL.
SORT GT_MATDOC[] BY VBELN_IM.
DELETE ADJACENT DUPLICATES FROM GT_MATDOC[] COMPARING VBELN_IM.
*3.判断交货单项目是否已经完成交货,未完成的从清单剔除
CLEAR GT_LIPS[].
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_LIPS[] FROM LIPS
FOR ALL ENTRIES IN GT_MATDOC[]
WHERE VBELN = GT_MATDOC-VBELN_IM
AND WBSTA = 'C'
AND VBELN IN GR_VBELN
.
*因有批次拆分,只取出项目LIPS-POSNR 和上层项目UECHA不同的项目号
GT_LIPS1[] = GT_LIPS[] .
DELETE GT_LIPS[] WHERE UECHA IS NOT INITIAL .
CLEAR GT_OUT_BILL.
LOOP AT GT_LIPS .
*4.LIPS取出交货单项目行的VGBEL参考凭证号,先前凭证类别VGTYP='C',
*表示是销售订单,根据销售订单号和项目号到表VBAP取出净值NETWR,如果净值为0,则对应的交货单项目剔除。
IF GT_LIPS-VGTYP = 'C'.
CLEAR GT_VBAP.
SELECT SINGLE NETWR NETPR KPEIN VBELN POSNR INTO CORRESPONDING FIELDS OF GT_VBAP FROM VBAP
WHERE VBELN = GT_LIPS-VGBEL
AND POSNR = GT_LIPS-VGPOS
.
IF GT_VBAP-NETWR = 0 .
DELETE GT_LIPS.
CONTINUE.
ENDIF.
*LIPS取出交货单第一行的VGBEL参考凭证号,如果先前凭证类别VGTYP='C',
*表示是销售订单,则根据参考凭证号关联VBPA-VBELN取出合作伙伴PARVW=‘RG’
*付款方对应的客户编码KUNNR,地址号ADRNR 到ADRC取NAME1+NAME2作为购方名称;
SELECT SINGLE KUNNR ADRNR INTO CORRESPONDING FIELDS OF GT_VBPA FROM VBPA
WHERE VBPA~VBELN = GT_VBAP-VBELN
AND VBPA~PARVW = 'AG'
.
GT_OUT_BILL-KUNRG = GT_VBPA-KUNNR.
LOOP AT GT_LIPS1 WHERE VBELN = GT_LIPS-VBELN AND UECHA = GT_LIPS-POSNR.
GT_LIPS-LFIMG = GT_LIPS-LFIMG + GT_LIPS1-LFIMG .
CLEAR GT_LIPS1 .
ENDLOOP.
GT_OUT_BILL-VBELN = GT_LIPS-VBELN.
GT_OUT_BILL-POSNR = GT_LIPS-POSNR.
GT_OUT_BILL-MATNR = GT_LIPS-MATNR.
GT_OUT_BILL-BUKRS = IM_BUKRS.
GT_OUT_BILL-FKIMG = GT_LIPS-LFIMG.
CLEAR GT_ZBILL.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF GT_ZBILL FROM ZBILL
WHERE KUNRG = GT_OUT_BILL-KUNRG
AND MATNR = GT_OUT_BILL-MATNR
AND BUKRS = GT_OUT_BILL-BUKRS
.
IF GT_ZBILL-MAME_EN IS NOT INITIAL.
CLEAR GT_ADRC .
SELECT SINGLE * INTO CORRESPONDING FIELDS OF GT_ADRC FROM ADRC
WHERE ADDRNUMBER = GT_VBPA-ADRNR
.
GT_OUT_BILL-NAME1 = GT_ADRC-NAME3 && GT_ADRC-NAME4 .
ELSE.
SELECT SINGLE NAME1 NAME2 INTO CORRESPONDING FIELDS OF GT_KNA1 FROM KNA1
WHERE KUNNR = GT_OUT_BILL-KUNRG
.
GT_OUT_BILL-NAME1 = GT_KNA1-NAME1 && GT_KNA1-NAME2 .
ENDIF.
GT_OUT_BILL-KZWI1 = GT_OUT_BILL-FKIMG * GT_VBAP-NETPR / GT_VBAP-KPEIN.
GT_OUT_BILL-MWSBP = GT_OUT_BILL-KZWI1 * GT_ZBILL-SHUILV * '0.01'.
GT_OUT_BILL-KZWI1 = GT_OUT_BILL-KZWI1 + GT_OUT_BILL-MWSBP.
GT_OUT_BILL-FKTYP = GT_ZBILL-FKTYP.
GT_OUT_BILL-FKKTX = GT_ZBILL-FKKTX.
GT_OUT_BILL-FKRMT = GT_ZBILL-FKRMT.
GT_OUT_BILL-FKINS = GT_ZBILL-FKINS.
GT_OUT_BILL-SSFLBM = GT_ZBILL-SSFLBM.
GT_OUT_BILL-SHUILV = GT_ZBILL-SHUILV.
APPEND GT_OUT_BILL TO OUT_BILL.
ENDIF.
CLEAR GT_OUT_BILL .
CLEAR GT_LIPS .
ENDLOOP.
ENDIF.
ELSE.
SUBRC = '1'.
MESSAGE = '该公司下无工厂记录!'.
ENDIF.
金税RFC接口(开发笔记)
最新推荐文章于 2023-05-16 17:21:34 发布