首先数据来源是JCDS表,生产订单数据修改表。
下列代码的作用是判断工单是不是TECO及REL状态
FORM frm_del_not_stat .DATA lv_rel TYPE p .DATA lv_teco TYPE p .DATA lv_subrc like sy-subrc.
* DATA: lt_budat LIKE range_c8 OCCURS 0 WITH HEADER LINE.
* DATA: lt_jcds LIKE jcds OCCURS 0 WITH HEADER LINE.
* DATA: ls_jcds TYPE jcds.
* data: ls_aufnr like gt_aufnr.REFRESH : s_teco, s_rel.CLEAR : s_teco, s_rel.s_teco-sign = 'I' .s_teco-option = 'EQ' .s_rel-sign = 'I' .s_rel-option = 'EQ' .RANGES s_sta FOR jcds-stat .s_sta = 'IEQI0002' .APPEND s_sta .s_sta = 'IEQI0045' .APPEND s_sta .READ TABLE gt_budat INDEX 1.
* CLEAR lt_budat.
* READ TABLE gt_budat INDEX 1 INTO lt_budat.
*
* CLEAR ls_aufnr.
* LOOP AT gt_aufnr into ls_aufnr.
* REFRESH lt_jcds.
* CLEAR ls_jcds.
* SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_jcds FROM jcds
* WHERE objnr = gt_aufnr-objnr
* AND stat = 'I0045' "TECO
* AND inact = ''.
* IF sy-subrc = 0.
* SORT lt_jcds BY chgnr DESCENDING udate DESCENDING.
** SORT lt_jcds BY chgnr ASCENDING udate ASCENDING.
* READ TABLE lt_jcds INTO ls_jcds INDEX 1.
* IF ( ls_jcds-udate >= lt_budat-low ) AND ( ls_jcds-udate <= lt_budat-high ).
* s_teco-low = ls_aufnr-aufnr.
* APPEND s_teco .
* ENDIF.
* ENDIF.
* CLEAR ls_aufnr.
* ENDLOOP.CLEAR lv_subrc.SELECT jcds~objnr,onror~aufnr , stat, udate, utime,inactINTO TABLE @DATA(wt_jcdsn)FROM jcdsINNER JOIN onror ON onror~objnr = jcds~objnrFOR ALL ENTRIES IN @gt_aufnrWHERE udate <= @gt_budat-highAND stat IN @s_staAND jcds~objnr = @gt_aufnr-objnr .move sy-subrc to lv_subrc.SORT wt_jcdsn BY aufnr udate DESCENDING utime DESCENDING.
* SORT wt_jcds BY chgnr DESCENDING udate DESCENDING.LOOP AT wt_jcdsn INTO DATA(ls_jcds).IF ls_jcds-stat = 'I0002'.IF ls_jcds-inact = '' .lv_rel = lv_rel - 1 .ELSEIF ls_jcds-inact = 'X' .lv_rel = lv_rel + 1 .ENDIF.ENDIF.IF ls_jcds-stat = 'I0045'.IF ls_jcds-inact = '' .lv_teco = lv_teco - 1 .ELSEIF ls_jcds-inact = 'X' .lv_teco = lv_teco + 1 .ENDIF.ENDIF.AT END OF aufnr .IF lv_teco < 0 .s_teco-low = ls_jcds-aufnr .APPEND s_teco .ENDIF.IF lv_rel < 0 .s_rel-low = ls_jcds-aufnr.APPEND s_rel .ENDIF.CLEAR : lv_rel,lv_teco .ENDAT .ENDLOOP.
* amended at 2020.12.23if ( s_teco[] is NOT INITIAL ) and ( s_rel[] is NOT INITIAL ).DELETE gt_aufnr WHERE aufnr NOT IN s_teco AND aufnr NOT IN s_rel.elseif ( s_teco[] is NOT INITIAL ) and ( s_rel[] is INITIAL ).DELETE gt_aufnr WHERE aufnr NOT IN s_teco." AND aufnr NOT IN s_rel.elseif ( s_teco[] is INITIAL ) and ( s_rel[] is NOT INITIAL ).DELETE gt_aufnr WHERE aufnr NOT IN s_rel." AND aufnr NOT IN s_teco.ELSEIF ( s_teco[] is INITIAL ) and ( s_rel[] is INITIAL ) and lv_subrc ne 0.loop at gt_aufnr.DELETE gt_aufnr index sy-tabix.endloop.endif.
* endamended 2020.12.23
* DELETE gt_aufnr WHERE aufnr NOT IN s_teco AND aufnr NOT IN s_rel. "既不是TECO也不是REL的工单排除。IF i0045 <> 'X' AND s_teco[] IS NOT INITIAL.DELETE gt_aufnr WHERE aufnr IN s_teco .ENDIF.IF i0002 <> 'X' AND s_rel[] IS NOT INITIAL.DELETE gt_aufnr WHERE aufnr IN s_rel .ENDIF.ENDFORM.
以上代码供参考,欢迎大家留言