PPCO0007 保存生产订单时退出
PPCO0018 检查生产订单表头的更改
*&---------------------------------------------------------------------*
*& 包括 ZXCKAU08
*&---------------------------------------------------------------------*
DATA:N TYPE I.
DATA LVORM TYPE LVORM.
TABLES:A017,EINE,EINA.
DATA:BEGIN OF IT_DATA OCCURS 0,
EBELN LIKE EKPO-EBELN,
EBELP LIKE EKPO-EBELP,
NETPR LIKE EKPO-NETPR,
PEINH LIKE EKPO-PEINH,
WAERS LIKE EKKO-WAERS,
BPUMZ LIKE EKPO-BPUMZ,
BPUMN LIKE EKPO-BPUMN,
END OF IT_DATA.
DATA:BEGIN OF IT_EINE OCCURS 0,
INFNR LIKE EINE-INFNR,
NETPR LIKE EINE-NETPR,
PEINH LIKE EINE-PEINH,
WAERS LIKE EINE-WAERS,
END OF IT_EINE.
DATA:IT_A017 LIKE A017 OCCURS 0 WITH HEADER LINE.
DATA:BEGIN OF IT_KONP OCCURS 0,
KBETR LIKE KONP-KBETR,
KONWA LIKE KONP-KONWA,
KPEIN LIKE KONP-KPEIN,
DATBI LIKE A017-DATBI,
DATAB LIKE A017-DATAB,
KSTBM LIKE KONP-KSTBM,
KNUMH LIKE KONP-KNUMH,
END OF IT_KONP.
DATA:BEGIN OF IT_MBEW OCCURS 0,
MATNR LIKE MBEW-MATNR,
STPRS LIKE MBEW-STPRS,
PEINH LIKE MBEW-PEINH,
WAERS LIKE EINE-WAERS,
END OF IT_MBEW.
DATA:TOTAL_NET LIKE EKPO-NETPR,
L_COUNT TYPE I.
CLEAR LVORM.
*BREAK-POINT.
SELECT SINGLE LVORM INTO LVORM FROM MARC WHERE MATNR = F_MATBW-MATNR AND WERKS = F_MATBW-WERKS.
IF LVORM IS INITIAL.
**************** 读计划协议,开始 ***************
CLEAR:IT_DATA.
REFRESH IT_DATA.
SELECT EKPO~EBELN EKPO~EBELP EKPO~NETPR EKPO~PEINH EKKO~WAERS EKPO~BPUMZ EKPO~BPUMN
INTO CORRESPONDING FIELDS OF TABLE IT_DATA
FROM EKKO JOIN EKPO
ON EKKO~EBELN = EKPO~EBELN AND EKPO~LOEKZ <> 'L'
WHERE EKKO~KDATB <= F_MATBW-BWDAT
AND EKKO~KDATE >= F_MATBW-BWDAT
AND EKPO~WERKS = F_MATBW-WERKS
AND EKPO~MATNR = F_MATBW-MATNR
AND EKKO~BSTYP = 'L' .
N = LINES( IT_DATA ).
IF N >= 1.
CLEAR:TOTAL_NET,L_COUNT.
LOOP AT IT_DATA.
IF IT_DATA-PEINH LT 100.
IT_DATA-NETPR = IT_DATA-NETPR * 100.
ENDIF.
CALL FUNCTION 'ZUNIT_EXCHANGE'
EXPORTING
BPUMZ = IT_DATA-BPUMZ
BPUMN = IT_DATA-BPUMN
I_NETPR = IT_DATA-NETPR
IMPORTING
E_NETPR = IT_DATA-NETPR.
IF IT_DATA-WAERS NE 'CNY'.
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
CLIENT = SY-MANDT
DATE = SY-DATUM
FOREIGN_AMOUNT = IT_DATA-NETPR
FOREIGN_CURRENCY = IT_DATA-WAERS
LOCAL_CURRENCY = 'CNY'
IMPORTING
LOCAL_AMOUNT = IT_DATA-NETPR.
IT_DATA-NETPR = IT_DATA-NETPR * '1.15' .
ENDIF.
IF IT_DATA-PEINH GE 100.
IT_DATA-PEINH = IT_DATA-PEINH / 100.
ENDIF.
TOTAL_NET = TOTAL_NET + IT_DATA-NETPR / IT_DATA-PEINH.
L_COUNT = L_COUNT + 1.
ENDLOOP.
EXP_PREIS = TOTAL_NET / L_COUNT.
EXP_WAERS = 'CNY'.
EXP_PEINH = 100.
EXIT.
ENDIF.
**************** 读计划协议,结束 ***************
** 逻辑1
CLEAR:IT_DATA.
REFRESH IT_DATA.
SELECT EKPO~EBELN EKPO~EBELP EKPO~NETPR EKPO~PEINH EKKO~WAERS EKPO~BPUMZ EKPO~BPUMN
INTO CORRESPONDING FIELDS OF TABLE IT_DATA
FROM EKKO JOIN EKPO
ON EKKO~EBELN = EKPO~EBELN AND EKPO~LOEKZ <> 'L'
WHERE EKKO~KDATB <= F_MATBW-BWDAT
AND EKKO~KDATE >= F_MATBW-BWDAT
AND EKPO~WERKS = F_MATBW-WERKS
AND EKPO~MATNR = F_MATBW-MATNR
AND EKKO~BSTYP = 'K'
.
N = LINES( IT_DATA ).
IF N = 0.
DATA LT_EINA TYPE TABLE OF EINA .
** 历史
CLEAR LT_EINA.
SELECT * INTO CORRESPONDING FIELDS OF TABLE LT_EINA
FROM EINA INNER JOIN EINE ON EINE~INFNR = EINA~INFNR AND EINE~LOEKZ = ''
WHERE EINA~MATNR = F_MATBW-MATNR AND EINE~WERKS = F_MATBW-WERKS AND EINA~LOEKZ NE 'X' AND EINE~ESOKZ NE '3'.
IF LT_EINA IS NOT INITIAL.
REFRESH IT_A017.
SELECT KNUMH
INTO CORRESPONDING FIELDS OF TABLE IT_A017
FROM A017
FOR ALL ENTRIES IN LT_EINA
WHERE LIFNR = LT_EINA-LIFNR
AND MATNR = F_MATBW-MATNR
AND WERKS = F_MATBW-WERKS
AND DATAB <= F_MATBW-BWDAT
AND DATBI >= F_MATBW-BWDAT.
REFRESH IT_KONP.
IF IT_A017[] IS NOT INITIAL.
SELECT KBETR KONWA KPEIN KSTBM KNUMH
INTO CORRESPONDING FIELDS OF TABLE IT_KONP
FROM KONP
FOR ALL ENTRIES IN IT_A017
WHERE KNUMH = IT_A017-KNUMH
AND KSCHL = 'PB00'.
ENDIF.
N = LINES( IT_KONP ).
IF N = 0. "A017 & KONP
** 逻辑3
*** CLEAR it_mbew.
*** REFRESH it_mbew.
*** SELECT SINGLE matnr stprs peinh
*** INTO CORRESPONDING FIELDS OF it_mbew
*** FROM mbew
*** WHERE bwkey = f_matbw-werks
*** AND matnr = f_matbw-matnr.
*** IF sy-subrc = 0 .
*** SELECT SINGLE t001~waers
*** INTO it_mbew-waers
*** FROM t001 JOIN t001k
*** ON t001~bukrs = t001k~bukrs
*** WHERE t001k~bwkey = f_matbw-werks.
***
*** exp_preis = it_mbew-stprs.
*** exp_waers = it_mbew-waers.
*** exp_peinh = it_mbew-peinh.
*** ENDIF.
ELSE. "A017 & KONP
CLEAR:TOTAL_NET,L_COUNT.
LOOP AT IT_KONP.
IF IT_KONP-KPEIN LT 100.
IT_KONP-KBETR = IT_KONP-KBETR * 100.
ENDIF.
CLEAR:A017 ,EINA,EINE.
SELECT SINGLE * FROM A017 WHERE KNUMH = IT_KONP-KNUMH.
SELECT SINGLE * FROM EINA WHERE LIFNR = A017-LIFNR AND MATNR = A017-MATNR.
SELECT SINGLE * FROM EINE WHERE INFNR = EINA-INFNR.
CALL FUNCTION 'ZUNIT_EXCHANGE'
EXPORTING
BPUMZ = EINE-BPUMZ
BPUMN = EINE-BPUMN
I_NETPR = IT_KONP-KBETR
IMPORTING
E_NETPR = IT_KONP-KBETR.
IF IT_KONP-KONWA NE 'CNY'.
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
CLIENT = SY-MANDT
DATE = SY-DATUM
FOREIGN_AMOUNT = IT_KONP-KBETR
FOREIGN_CURRENCY = IT_KONP-KONWA
LOCAL_CURRENCY = 'CNY'
IMPORTING
LOCAL_AMOUNT = IT_KONP-KBETR.
IT_KONP-KBETR = IT_KONP-KBETR * '1.15'.
ENDIF.
IF IT_KONP-KPEIN GE 100.
IT_KONP-KPEIN = IT_KONP-KPEIN / 100.
ENDIF.
TOTAL_NET = TOTAL_NET + IT_KONP-KBETR / IT_KONP-KPEIN.
L_COUNT = L_COUNT + 1.
ENDLOOP.
EXP_PREIS = TOTAL_NET / L_COUNT.
EXP_WAERS = 'CNY'.
EXP_PEINH = 100.
ENDIF. "A017 & KONP
ENDIF.
ELSE. "EKKO & EKPO
CLEAR:TOTAL_NET,L_COUNT.
LOOP AT IT_DATA.
IF IT_DATA-PEINH LT 100.
IT_DATA-NETPR = IT_DATA-NETPR * 100.
ENDIF.
CALL FUNCTION 'ZUNIT_EXCHANGE'
EXPORTING
BPUMZ = IT_DATA-BPUMZ
BPUMN = IT_DATA-BPUMN
I_NETPR = IT_DATA-NETPR
IMPORTING
E_NETPR = IT_DATA-NETPR.
IF IT_DATA-WAERS NE 'CNY'.
CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'
EXPORTING
CLIENT = SY-MANDT
DATE = SY-DATUM
FOREIGN_AMOUNT = IT_DATA-NETPR
FOREIGN_CURRENCY = IT_DATA-WAERS
LOCAL_CURRENCY = 'CNY'
IMPORTING
LOCAL_AMOUNT = IT_DATA-NETPR.
IT_DATA-NETPR = IT_DATA-NETPR * '1.15' .
ENDIF.
IF IT_DATA-PEINH GE 100.
IT_DATA-PEINH = IT_DATA-PEINH / 100.
ENDIF.
TOTAL_NET = TOTAL_NET + IT_DATA-NETPR / IT_DATA-PEINH.
L_COUNT = L_COUNT + 1.
ENDLOOP.
EXP_PREIS = TOTAL_NET / L_COUNT.
EXP_WAERS = 'CNY'.
EXP_PEINH = 100.
ENDIF.
ENDIF.
*LEAVE SCREEN.