SAP修改系统数据表

版权声明:本文为博主原创文章,未经博主允许不得转载。 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.

猜你喜欢

转载自blog.csdn.net/wtxhai/article/details/88719269