版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wtxhai/article/details/88719269
*&---------------------------------------------------------------------*
*& Report ZMM0050
*&---------------------------------------------------------------------*
*&PROGRAM NAME : <ZMM0050>
*---------------------------------------------------------------------*
* VERSION: V1.0
* DATE CREATED : 2019/03/21
* CREATED BY : Ma
* TRANSPORT REQUEST: XXXXXXXXXX
* DESCRIPTION : Update the schedule line category for test'mrp
* request raised by: Ding
REPORT zmm0050.
TABLES : zslca,vbak.
********************************
* INNITIALIZATION
********************************
TYPES : BEGIN OF ltype_status,
vbeln TYPE vbak-vbeln,
erdat TYPE vbak-erdat,
vkorg TYPE vbak-vkorg,
posnr TYPE vbup-posnr,
lfsta TYPE vbup-lfsta,
END OF ltype_status.
TYPES : BEGIN OF ltype_vbep,
vbeln TYPE vbep-vbeln,
posnr TYPE vbep-posnr,
etenr TYPE vbep-etenr,
ettyp TYPE vbep-ettyp,
END OF ltype_vbep.
DATA : lt_sta TYPE TABLE OF ltype_status,
ls_sta LIKE LINE OF lt_sta.
DATA : lt_vbep TYPE TABLE OF ltype_vbep,
ls_vbep LIKE LINE OF lt_vbep.
DATA : lt_zslca TYPE TABLE OF ltype_vbep,
ls_zslca LIKE LINE OF lt_zslca.
data : cnt TYPE i VALUE 0.
********************************
* SELECTION-SCREEN
********************************
SELECTION-SCREEN BEGIN OF BLOCK blk01 WITH FRAME.
select-OPTIONS : so_erdat FOR vbak-erdat.
PARAMETERS : p_x1 RADIOBUTTON GROUP grp1 DEFAULT 'X'.
PARAMETERS : p_x2 RADIOBUTTON GROUP grp1.
SELECTION-SCREEN END OF BLOCK blk01.
********************************
* AT SELECTION-SCREEN ON VALUE-REQUEST FOR xxxxx.
********************************
IF p_x1 = 'X'.
PERFORM frm_data_update.
ELSEIF p_x2 = 'X'.
PERFORM frm_data_recovery.
ENDIF.
********************************
* START OF SELECTION
********************************
FORM frm_data_update.
CLEAR lt_sta[].
SELECT
t1~vbeln
t1~vkorg
t1~erdat
t2~posnr
t2~lfsta
FROM vbak AS t1 INNER JOIN vbup AS t2 ON t1~vbeln = t2~vbeln
INTO CORRESPONDING FIELDS OF TABLE lt_sta
WHERE t1~vkorg = '0080'
AND t2~lfsta IN ( 'A','B' )
AND t1~erdat in so_erdat.
IF lt_sta IS NOT INITIAL.
CLEAR lt_vbep[].
SELECT
vbeln
posnr
etenr
ettyp
FROM vbep
INTO CORRESPONDING FIELDS OF TABLE lt_vbep
FOR ALL ENTRIES IN lt_sta
WHERE vbeln = lt_sta-vbeln
AND posnr = lt_sta-posnr
AND ettyp ne 'ZN'.
ENDIF.
IF lt_vbep IS NOT INITIAL.
CLEAR ls_vbep.
LOOP AT lt_vbep INTO ls_vbep.
MOVE-CORRESPONDING ls_vbep TO zslca.
"//保存Schedule line category原始值
MODIFY zslca FROM zslca.
"//更新Schedule line category 取值
update vbep SET ETTYP = 'ZN' WHERE vbeln = ls_vbep-vbeln AND posnr = ls_vbep-posnr AND etenr = ls_vbep-etenr.
IF sy-subrc = 0.
cnt = cnt + 1.
ENDIF.
ENDLOOP.
WRITE :'Update succeed :',cnt.
"//delete FROM zslca.
ENDIF.
clear cnt.
ENDFORM.
FORM frm_data_recovery.
clear lt_zslca[].
select
*
FROM zslca
INTO CORRESPONDING FIELDS OF TABLE lt_zslca.
IF lt_zslca is NOT INITIAL.
LOOP AT lt_zslca INTO ls_zslca.
update vbep set ettyp = ls_zslca-ettyp WHERE vbeln = ls_zslca-vbeln AND posnr = ls_zslca-posnr AND etenr = ls_zslca-etenr.
IF sy-subrc = 0.
cnt = cnt + 1.
ENDIF.
ENDLOOP.
write : 'Data recovery',cnt.
ENDIF.
ENDFORM.