当前位置: 代码迷 >> 综合 >> SAP-ABAP-如何获取指定月份生产订单状态
  详细解决方案

SAP-ABAP-如何获取指定月份生产订单状态

热度:59   发布时间:2023-12-13 04:25:35.0

首先数据来源是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.

以上代码供参考,欢迎大家留言