*&---------------------------------------------------------------------*
*& 包括 ZXV50QU01
*&---------------------------------------------------------------------*
TABLES: lipov,lips,vbkd,konv,vbap,vbak,tvgrt,likp.
DATA: cs_postab TYPE lipov.
DATA : l_tabix LIKE sy-tabix,
gt_lips TYPE TABLE OF lips,
gs_lips TYPE lips,
gt_vbkd TYPE TABLE OF vbkd,
gs_vbkd TYPE vbkd,
gt_konv TYPE TABLE OF konv,
gs_konv TYPE konv,
gt_vbap TYPE TABLE OF vbap ,
gs_vbap TYPE vbap ,
gt_vbak TYPE TABLE OF vbak ,
gs_vbak TYPE vbak ,
gt_likp TYPE TABLE OF likp,
gs_likp TYPE likp,
id LIKE sy-repid,
gt_tvgrt TYPE TABLE OF tvgrt,
gs_tvgrt TYPE tvgrt.
******
*DATA z(3) TYPE c.
*LOOP AT ct_postab.
* AT LAST.
* z = sy-tabix.
* MESSAGE z TYPE 'I'.
* MESSAGE IF_FLAG_INBOUND TYPE 'I'.
* MESSAGE IF_PROCTYPE TYPE 'I'.
* ENDAT.
*ENDLOOP.
*data z(5) type c.
*AUTHORITY-CHECK OBJECT 'ZSDOBJ01' ID 'ZVL06F' FIELD 'a'.
*z = sy-subrc.
*MESSAGE z TYPE 'I'.
CHECK sy-subrc = 0.
SELECT * FROM lips
INTO CORRESPONDING FIELDS OF TABLE gt_lips
FOR ALL ENTRIES IN ct_postab
WHERE vbeln = ct_postab-vbeln
and POSNR = ct_postab-POSNR.
SELECT * FROM liKP
INTO CORRESPONDING FIELDS OF TABLE gt_liKP
FOR ALL ENTRIES IN GT_lips
WHERE vbeln = gt_lips-vbeln.
SELECT * FROM tvgrt
INTO CORRESPONDING FIELDS OF TABLE gt_tvgrt
FOR ALL ENTRIES IN gt_lips
WHERE vkgrp = gt_lips-vkgrp.
SELECT * FROM vbkd
INTO CORRESPONDING FIELDS OF TABLE gt_vbkd
FOR ALL ENTRIES IN gt_lips
WHERE vbeln = gt_lips-vgbel .
SELECT * FROM vbap
INTO CORRESPONDING FIELDS OF TABLE gt_vbap
FOR ALL ENTRIES IN gt_lips
WHERE vbeln = gt_lips-vgbel
AND posnr = gt_lips-VGPOS.
LOOP AT ct_postab INTO cs_postab where s_vgpos NE '0000'.
l_tabix = sy-tabix.
* CHECK cs_postab-s_vgpos NE '0000'.
READ TABLE gt_lips INTO gs_lips WITH KEY vbeln = cs_postab-vbeln POSNR = cs_postab-POSNR.
cs_postab-kdmat = gs_lips-kdmat.
READ TABLE gt_likp INTO gs_likp WITH KEY vbeln = gs_lips-vbeln .
cs_postab-ZWADAT = gs_likp-WADAT_IST.
READ TABLE gt_tvgrt INTO gs_tvgrt WITH KEY vkgrp = gs_lips-vkgrp.
cs_postab-zbezei = gs_tvgrt-bezei.
READ TABLE gt_vbkd INTO gs_vbkd WITH KEY vbeln = gs_lips-vgbel .
cs_postab-zbstkd = gs_vbkd-bstkd.
READ TABLE gt_vbap INTO gs_vbap WITH KEY vbeln = gs_lips-vgbel posnr = gs_lips-VGPOS.
cs_postab-zkwmeng = gs_vbap-kwmeng.
AUTHORITY-CHECK OBJECT 'ZSDOBJ01' ID 'ZVL06F' FIELD 'a'.
IF sy-subrc = 0.
SELECT SINGLE * FROM vbak
INTO gs_vbak
WHERE vbeln = gs_vbap-vbeln.
SELECT * INTO TABLE gt_konv
FROM konv
WHERE knumv = gs_vbak-knumv
AND kposn = gs_vbap-posnr.
IF sy-subrc = 0.
READ TABLE gt_konv INTO gs_konv WITH KEY kschl = 'PR00'.
IF sy-subrc = 0.
cs_postab-zpr00 = gs_konv-kbetr .
ENDIF.
* CLEAR gs_konv.
READ TABLE gt_konv INTO gs_konv WITH KEY kschl = 'PR01'.
IF sy-subrc = 0.
cs_postab-zpr01 = gs_konv-kbetr .
ENDIF.
ENDIF.
ENDIF.
cs_postab-zkzwi6 = gs_vbap-kzwi6.
IF gs_lips-gewei = 'G'.
cs_postab-ntgew = cs_postab-ntgew / 1000.
cs_postab-gewei = 'KG'.
ENDIF.
cs_postab-zkmein = gs_vbap-kmein.
cs_postab-zKURSK = gs_vbkd-kursk.
* cs_postab-vrkme = gs_lips-vrkme.
*
* IF cs_postab-zkmein = gs_lips-vrkme AND gs_lips-vgpos = gs_vbap-posnr .
** if gs_vbap-waerk = 'CNY'.
*
* cs_postab-zamount = ( cs_postab-zpr01 + cs_postab-zpr00 * 117 / 100 ) * cs_postab-lfimg / gs_vbap-KPEIN .
** ELSE.
** cs_postab-zamount = ( cs_postab-zpr01 + cs_postab-zpr00 * 117 / 100 ) * cs_postab-lfimg .
* ENDIF.
* ENDIF.
*
* if cs_postab-zkmein <> gs_lips-vrkme .
* cs_postab-zamount = ( cs_postab-zpr01 + cs_postab-zpr00 * 117 / 100 ) * cs_postab-ntgew / gs_vbap-KPEIN.
* endif.
IF cs_postab-zkmein = gs_lips-vrkme AND gs_lips-vgpos = gs_vbap-posnr .
* if gs_vbap-waerk = 'CNY'.
cs_postab-ZDMBTR = ( cs_postab-zpr00 + cs_postab-zpr01 * 100 / 117 ) * cs_postab-lfimg * cs_postab-zKURSK / gs_vbap-KPEIN + cs_postab-zkzwi6 .
* ELSE.
* cs_postab-zamount = ( cs_postab-zpr01 + cs_postab-zpr00 * 117 / 100 ) * cs_postab-lfimg .
* ENDIF.
ENDIF.
if cs_postab-zkmein <> gs_lips-vrkme .
cs_postab-ZDMBTR = ( cs_postab-zpr01 + cs_postab-zpr00 * 117 / 100 ) * cs_postab-ntgew / gs_vbap-KPEIN * cs_postab-zKURSK + cs_postab-zkzwi6 .
endif.
* if gs_vbap-waerk <> 'CNY'.
* clear cs_postab-zamount .
* cs_postab-zweishui = cs_postab-zpr00 * cs_postab-lfimg / gs_vbap-KPEIN + cs_postab-zkzwi6.
*endif.
cs_postab-zwaerk = gs_vbap-waerk.
* cs_postab-zkwmeng = gs_vbap-kwmeng.
* cs_postab-vrkme = gs_lips-vrkme.
MODIFY ct_postab INDEX l_tabix FROM cs_postab TRANSPORTING kdmat zbezei zbstkd zpr00 zpr01 zamount zwaerk zkmein zkwmeng ntgew gewei zkzwi6 ZWEISHUI zKURSK ZDMBTR ZWADAT.
CLEAR: gs_lips, gs_vbkd , gs_konv,gs_vbap,gs_vbak, cs_postab.
* ENDIF.
ENDLOOP.
*& 包括 ZXV50QU01
*&---------------------------------------------------------------------*
TABLES: lipov,lips,vbkd,konv,vbap,vbak,tvgrt,likp.
DATA: cs_postab TYPE lipov.
DATA : l_tabix LIKE sy-tabix,
gt_lips TYPE TABLE OF lips,
gs_lips TYPE lips,
gt_vbkd TYPE TABLE OF vbkd,
gs_vbkd TYPE vbkd,
gt_konv TYPE TABLE OF konv,
gs_konv TYPE konv,
gt_vbap TYPE TABLE OF vbap ,
gs_vbap TYPE vbap ,
gt_vbak TYPE TABLE OF vbak ,
gs_vbak TYPE vbak ,
gt_likp TYPE TABLE OF likp,
gs_likp TYPE likp,
id LIKE sy-repid,
gt_tvgrt TYPE TABLE OF tvgrt,
gs_tvgrt TYPE tvgrt.
******
*DATA z(3) TYPE c.
*LOOP AT ct_postab.
* AT LAST.
* z = sy-tabix.
* MESSAGE z TYPE 'I'.
* MESSAGE IF_FLAG_INBOUND TYPE 'I'.
* MESSAGE IF_PROCTYPE TYPE 'I'.
* ENDAT.
*ENDLOOP.
*data z(5) type c.
*AUTHORITY-CHECK OBJECT 'ZSDOBJ01' ID 'ZVL06F' FIELD 'a'.
*z = sy-subrc.
*MESSAGE z TYPE 'I'.
CHECK sy-subrc = 0.
SELECT * FROM lips
INTO CORRESPONDING FIELDS OF TABLE gt_lips
FOR ALL ENTRIES IN ct_postab
WHERE vbeln = ct_postab-vbeln
and POSNR = ct_postab-POSNR.
SELECT * FROM liKP
INTO CORRESPONDING FIELDS OF TABLE gt_liKP
FOR ALL ENTRIES IN GT_lips
WHERE vbeln = gt_lips-vbeln.
SELECT * FROM tvgrt
INTO CORRESPONDING FIELDS OF TABLE gt_tvgrt
FOR ALL ENTRIES IN gt_lips
WHERE vkgrp = gt_lips-vkgrp.
SELECT * FROM vbkd
INTO CORRESPONDING FIELDS OF TABLE gt_vbkd
FOR ALL ENTRIES IN gt_lips
WHERE vbeln = gt_lips-vgbel .
SELECT * FROM vbap
INTO CORRESPONDING FIELDS OF TABLE gt_vbap
FOR ALL ENTRIES IN gt_lips
WHERE vbeln = gt_lips-vgbel
AND posnr = gt_lips-VGPOS.
LOOP AT ct_postab INTO cs_postab where s_vgpos NE '0000'.
l_tabix = sy-tabix.
* CHECK cs_postab-s_vgpos NE '0000'.
READ TABLE gt_lips INTO gs_lips WITH KEY vbeln = cs_postab-vbeln POSNR = cs_postab-POSNR.
cs_postab-kdmat = gs_lips-kdmat.
READ TABLE gt_likp INTO gs_likp WITH KEY vbeln = gs_lips-vbeln .
cs_postab-ZWADAT = gs_likp-WADAT_IST.
READ TABLE gt_tvgrt INTO gs_tvgrt WITH KEY vkgrp = gs_lips-vkgrp.
cs_postab-zbezei = gs_tvgrt-bezei.
READ TABLE gt_vbkd INTO gs_vbkd WITH KEY vbeln = gs_lips-vgbel .
cs_postab-zbstkd = gs_vbkd-bstkd.
READ TABLE gt_vbap INTO gs_vbap WITH KEY vbeln = gs_lips-vgbel posnr = gs_lips-VGPOS.
cs_postab-zkwmeng = gs_vbap-kwmeng.
AUTHORITY-CHECK OBJECT 'ZSDOBJ01' ID 'ZVL06F' FIELD 'a'.
IF sy-subrc = 0.
SELECT SINGLE * FROM vbak
INTO gs_vbak
WHERE vbeln = gs_vbap-vbeln.
SELECT * INTO TABLE gt_konv
FROM konv
WHERE knumv = gs_vbak-knumv
AND kposn = gs_vbap-posnr.
IF sy-subrc = 0.
READ TABLE gt_konv INTO gs_konv WITH KEY kschl = 'PR00'.
IF sy-subrc = 0.
cs_postab-zpr00 = gs_konv-kbetr .
ENDIF.
* CLEAR gs_konv.
READ TABLE gt_konv INTO gs_konv WITH KEY kschl = 'PR01'.
IF sy-subrc = 0.
cs_postab-zpr01 = gs_konv-kbetr .
ENDIF.
ENDIF.
ENDIF.
cs_postab-zkzwi6 = gs_vbap-kzwi6.
IF gs_lips-gewei = 'G'.
cs_postab-ntgew = cs_postab-ntgew / 1000.
cs_postab-gewei = 'KG'.
ENDIF.
cs_postab-zkmein = gs_vbap-kmein.
cs_postab-zKURSK = gs_vbkd-kursk.
* cs_postab-vrkme = gs_lips-vrkme.
*
* IF cs_postab-zkmein = gs_lips-vrkme AND gs_lips-vgpos = gs_vbap-posnr .
** if gs_vbap-waerk = 'CNY'.
*
* cs_postab-zamount = ( cs_postab-zpr01 + cs_postab-zpr00 * 117 / 100 ) * cs_postab-lfimg / gs_vbap-KPEIN .
** ELSE.
** cs_postab-zamount = ( cs_postab-zpr01 + cs_postab-zpr00 * 117 / 100 ) * cs_postab-lfimg .
* ENDIF.
* ENDIF.
*
* if cs_postab-zkmein <> gs_lips-vrkme .
* cs_postab-zamount = ( cs_postab-zpr01 + cs_postab-zpr00 * 117 / 100 ) * cs_postab-ntgew / gs_vbap-KPEIN.
* endif.
IF cs_postab-zkmein = gs_lips-vrkme AND gs_lips-vgpos = gs_vbap-posnr .
* if gs_vbap-waerk = 'CNY'.
cs_postab-ZDMBTR = ( cs_postab-zpr00 + cs_postab-zpr01 * 100 / 117 ) * cs_postab-lfimg * cs_postab-zKURSK / gs_vbap-KPEIN + cs_postab-zkzwi6 .
* ELSE.
* cs_postab-zamount = ( cs_postab-zpr01 + cs_postab-zpr00 * 117 / 100 ) * cs_postab-lfimg .
* ENDIF.
ENDIF.
if cs_postab-zkmein <> gs_lips-vrkme .
cs_postab-ZDMBTR = ( cs_postab-zpr01 + cs_postab-zpr00 * 117 / 100 ) * cs_postab-ntgew / gs_vbap-KPEIN * cs_postab-zKURSK + cs_postab-zkzwi6 .
endif.
* if gs_vbap-waerk <> 'CNY'.
* clear cs_postab-zamount .
* cs_postab-zweishui = cs_postab-zpr00 * cs_postab-lfimg / gs_vbap-KPEIN + cs_postab-zkzwi6.
*endif.
cs_postab-zwaerk = gs_vbap-waerk.
* cs_postab-zkwmeng = gs_vbap-kwmeng.
* cs_postab-vrkme = gs_lips-vrkme.
MODIFY ct_postab INDEX l_tabix FROM cs_postab TRANSPORTING kdmat zbezei zbstkd zpr00 zpr01 zamount zwaerk zkmein zkwmeng ntgew gewei zkzwi6 ZWEISHUI zKURSK ZDMBTR ZWADAT.
CLEAR: gs_lips, gs_vbkd , gs_konv,gs_vbap,gs_vbak, cs_postab.
* ENDIF.
ENDLOOP.