Refresh Alv

*&---------------------------------------------------------------------*
*& Report  ZPR_MOLD_SCHEDULE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  zpr_tp_schedule.
TYPE-POOLS:slis.
TABLES ztpmachine.
DATA:BEGIN OF g_it_schedule OCCURS 0,
       zz_machine     TYPE zz_machine,
       mc_type        TYPE zz_mc_typ,
       zz_workshop    TYPE zz_workshop,
       zz_drawing_no  TYPE zz_drawing_no,
       maktx          TYPE maktx,
       vornr          TYPE vornr,
       sch_seq        TYPE zz_sch_seq,
       zz_ma_time     TYPE zz_ma_time,
       bmsch          TYPE bmsch,
       output         TYPE i,
       matnr          TYPE matnr,
       aufnr          TYPE aufnr,
       sch_qty        TYPE zz_sch_qty,
       ssedd          TYPE bdter,
       meinh          TYPE vorme,
       daily1         TYPE i,
       daily2         TYPE i,
       daily3         TYPE i,
       daily4         TYPE i,
       daily5         TYPE i,
       daily6         TYPE i,
       daily7         TYPE i,
       daily8         TYPE i,
       daily9         TYPE i,
       daily10        TYPE i,
       daily11        TYPE i,
       daily12        TYPE i,
       daily13        TYPE i,
       daily14        TYPE i,


       man_p1         TYPE i,
       man_p2         TYPE i,
       man_p3         TYPE i,
       man_p4         TYPE i,
       man_p5         TYPE i,
       man_p6         TYPE i,
       man_p7         TYPE i,
       man_p8         TYPE i,
       man_p9         TYPE i,
       man_p10        TYPE i,
       man_p11        TYPE i,
       man_p12        TYPE i,
       man_p13        TYPE i,
       man_p14        TYPE i,

       zz_drawing_rmk TYPE zz_drawing_rmk,
       zz_wsseq       TYPE zz_wsseq,
       zz_sch_byseq   TYPE zz_sch_byseq,
       zz_aufnr       TYPE zz_aufnr,
       zz_memo        TYPE zz_memo,
       zz_fda         TYPE zz_fda,
       mc_fda         TYPE zz_fda,
       gamng          TYPE gamng,
       zz_scrap	      TYPE zz_scrap,
       zz_gamng	      TYPE zz_gamng,
       plastic_cp1    TYPE matnr,
       unit_of_cp1    TYPE meins,
       avai_qty_cp1   TYPE labst,"Available Qty in MARD
       plastic_cp2    TYPE matnr,
       unit_of_cp2    TYPE meins,
       avai_qty_cp2   TYPE labst,
       plastic_cp3    TYPE matnr,
       unit_of_cp3    TYPE meins,
       avai_qty_cp3   TYPE labst,
  END OF g_it_schedule,


  gt_ztpsched   TYPE TABLE OF ztpsched WITH HEADER LINE,

  gt_schedule_old LIKE TABLE OF g_it_schedule,
  g_wa_alv_field    TYPE slis_fieldcat_alv,
  g_it_alv_fieldcat TYPE slis_t_fieldcat_alv.
DATA TEM_GRID     TYPE REF TO CL_GUI_ALV_GRID.

DATA: BEGIN OF gs_alv_schedule.
        INCLUDE STRUCTURE g_it_schedule.
        DATA: index TYPE sy-tabix,
      END OF gs_alv_schedule,

      gt_alv_schedule LIKE TABLE OF gs_alv_schedule.
data gt_ztpsched2 TYPE TABLE OF ztpsched2.
DEFINE add_field.
  clear g_wa_alv_field.
  g_wa_alv_field-fieldname     = &1.
  g_wa_alv_field-reptext_ddic  = &2.
  g_wa_alv_field-no_zero       = &3.
  g_wa_alv_field-edit       = &4.
  g_wa_alv_field-qfieldname    = 'MEINH'.
  append g_wa_alv_field to g_it_alv_fieldcat.
END-OF-DEFINITION.

SELECT-OPTIONS:s_ma    FOR ztpmachine-machine_no.
PARAMETERS    :p_start TYPE zz_ssavd DEFAULT sy-datum.

END-OF-SELECTION.
  PERFORM data_load.
  PERFORM alv_display.

*&---------------------------------------------------------------------*
*&      Form  DATA_LOAD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM data_load .
  TYPES:BEGIN OF ty_mat,
          plastic_cp    TYPE matnr,
          unit_of_cp    TYPE meins,
          avai_qty_cp  TYPE labst,
        END OF ty_mat.

    DATA:lt_mat TYPE TABLE OF ty_mat,
        ls_mat TYPE ty_mat,
        xwmdvsx type table of bapiwmdvs with header line,
        xwmdvex type table of bapiwmdve with header line.
  FIELD-SYMBOLS <lf_mat> TYPE ty_mat.
  DATA:l_it_schedule     TYPE TABLE OF ztpsched2 WITH HEADER LINE,
       l_it_tmp          TYPE TABLE OF ztpsched2 WITH HEADER LINE,
       l_it_tmp_2         TYPE TABLE OF ztpsched WITH HEADER LINE,
       l_it_ztpmachine TYPE TABLE OF ztpmachine WITH HEADER LINE ,
       l_offset          TYPE string,
       l_filename        TYPE string,
       l_filename2        TYPE string,
       l_enddate         TYPE zz_ssavd,
       l_machine         TYPE zz_machine,
       l_it_makt         TYPE TABLE OF makt WITH HEADER LINE,
       l_it_ztpsched   TYPE TABLE OF ztpsched WITH HEADER LINE,
       l_it_tsched       LIKE TABLE OF g_it_schedule,
       l_werks           TYPE werks_d,
       lt_material       TYPE TABLE OF ztpmaterial,
       ls_material       LIKE LINE OF lt_material.
  DATA:BEGIN OF l_it_rmk OCCURS 0,
         matnr          TYPE matnr,
         zz_drawing_rmk TYPE zz_drawing_rmk,
         zz_fda         TYPE zz_fda,
         zz_drawing_no  TYPE zz_drawing_no,
       END OF l_it_rmk.

  DATA:BEGIN OF l_it_afko OCCURS 0,
         aufnr    TYPE aufnr,
         gamng    TYPE gamng,
         zz_scrap TYPE zz_scrap,
         zz_gamng	TYPE zz_gamng,
       END OF l_it_afko.

  DATA:BEGIN OF l_it_caufv OCCURS 0,
         zz_drawing_no TYPE zz_drawing_no,
         maktx         TYPE maktx,
         matnr         TYPE matnr,
         aufnr         TYPE aufnr,
         ssedd         TYPE bdter,
         meinh         TYPE meinh,
         sch_qty       TYPE zz_sch_qty,
         gamng         TYPE gamng,
      END OF l_it_caufv,
      l_it_tcaufv LIKE TABLE OF l_it_caufv WITH HEADER LINE.

  FIELD-SYMBOLS:<value> TYPE i,
                <value2> TYPE i,
                <wa>    LIKE LINE OF g_it_schedule.

  l_enddate = p_start + 13.
  IF sy-uname+0(1) = 'B'.
    l_werks = '1040'.
  ELSE.
    l_werks = '1020'.
  ENDIF.

  SELECT * INTO CORRESPONDING FIELDS OF TABLE l_it_ztpmachine
     FROM ztpmachine
    WHERE
       plant = l_werks.

  SORT l_it_ztpmachine BY machine_no.

  SELECT * INTO CORRESPONDING FIELDS OF TABLE l_it_schedule
    FROM ztpsched2
   WHERE zz_machine IN s_ma
     AND zz_ssavd >= p_start
     AND zz_ssavd <= l_enddate.

  IF l_it_schedule[] is  NOT INITIAL.

    SELECT * INTO CORRESPONDING FIELDS OF TABLE l_it_ztpsched FROM ztpsched
       FOR ALL ENTRIES IN l_it_schedule
     WHERE aufpl = l_it_schedule-aufpl
       AND aplzl = l_it_schedule-aplzl
       AND sch_seq = l_it_schedule-sch_seq.
    SORT l_it_ztpsched BY aufpl aplzl sch_seq.
  ENDIF.

  SORT l_it_schedule BY zz_machine zz_sch_byseq.
  l_it_tmp[] = l_it_schedule[].
  SORT l_it_tmp BY aufpl aplzl sch_seq.
  DELETE ADJACENT DUPLICATES FROM l_it_tmp COMPARING aufpl aplzl sch_seq.
  SORT l_it_tmp BY zz_machine zz_sch_byseq.

  IF l_it_ztpsched[] is  NOT INITIAL .
   SELECT * INTO CORRESPONDING FIELDS OF TABLE l_it_makt
     FROM makt
      FOR ALL ENTRIES IN l_it_ztpsched
    WHERE matnr = l_it_ztpsched-matnr
      AND spras = 'E'.
   SORT l_it_makt BY matnr.


    SELECT * INTO CORRESPONDING FIELDS OF TABLE l_it_rmk
      FROM mara
       FOR ALL ENTRIES IN l_it_ztpsched
     WHERE matnr = l_it_ztpsched-matnr.

    SORT l_it_rmk BY matnr.
  ENDIF.

  gt_ztpsched[] = l_it_tmp_2[] = l_it_ztpsched[].
  SORT l_it_tmp_2 by matnr.
  DELETE ADJACENT DUPLICATES FROM l_it_tmp_2 COMPARING matnr.

  IF l_it_tmp_2[] IS NOT INITIAL.
    SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_material
      FROM ztpmaterial
      FOR ALL ENTRIES IN l_it_tmp_2
      WHERE material eq l_it_tmp_2-matnr.
      IF sy-subrc eq 0.
        SORT lt_material by plant material machine_no.
      ENDIF.
  ENDIF.

  IF lt_material IS NOT INITIAL.
    REFRESH lt_mat.
    SELECT matnr as plastic_cp meins as unit_of_cp
      INTO TABLE lt_mat
      FROM mara
      FOR ALL ENTRIES IN lt_material
      WHERE matnr eq lt_material-plastic_cp1.
    SELECT matnr as plastic_cp meins as unit_of_cp
      APPENDING TABLE lt_mat
      FROM mara
      FOR ALL ENTRIES IN lt_material
      WHERE matnr eq lt_material-plastic_cp2.
    SELECT matnr as plastic_cp meins as unit_of_cp
      APPENDING TABLE lt_mat
      FROM mara
      FOR ALL ENTRIES IN lt_material
      WHERE matnr eq lt_material-plastic_cp3.

      SORT lt_mat by plastic_cp.

  ENDIF.


  IF lt_mat IS NOT INITIAL.
    LOOP AT lt_mat ASSIGNING <lf_mat>.
      CALL FUNCTION 'BAPI_MATERIAL_AVAILABILITY'
        EXPORTING
          plant                    = l_werks
          material                 = <lf_mat>-plastic_cp
          unit                     = <lf_mat>-unit_of_cp
       IMPORTING
         AV_QTY_PLT               = <lf_mat>-avai_qty_cp
        tables
          wmdvsx                   = xwmdvsx
          wmdvex                   = xwmdvex
                .
    ENDLOOP.
  ENDIF.

  LOOP AT l_it_tmp.
    CLEAR g_it_schedule.
    MOVE-CORRESPONDING l_it_tmp TO g_it_schedule.
    READ TABLE l_it_ztpmachine WITH KEY machine_no = l_it_tmp-zz_machine  BINARY SEARCH.
    IF sy-subrc = 0.
      g_it_schedule-zz_workshop =  l_it_ztpmachine-workshop.
    ELSE.
      CONTINUE.
    ENDIF.

    READ TABLE l_it_ztpsched WITH KEY aufpl = l_it_tmp-aufpl aplzl = l_it_tmp-aplzl sch_seq = l_it_tmp-sch_seq BINARY SEARCH.
    IF sy-subrc = 0.
      g_it_schedule-zz_drawing_no = l_it_ztpsched-zz_drawing_no.
*      g_it_schedule-zz_ma_time = l_it_ztpsched-vgw06.
      g_it_schedule-zz_ma_time = l_it_ztpsched-zz_ma_time.
      g_it_schedule-bmsch      = l_it_ztpsched-bmsch.
      IF l_it_ztpsched-zz_ma_time > 0.
        IF SY-UNAME+0(1) = 'B'.
          g_it_schedule-output     = 20 * 3600 * l_it_ztpsched-bmsch / l_it_ztpsched-zz_ma_time.
        ELSE.
          g_it_schedule-output     = 24 * 3600 * l_it_ztpsched-bmsch / l_it_ztpsched-zz_ma_time.
        ENDIF.
      ENDIF.
      g_it_schedule-matnr      = l_it_ztpsched-matnr.
      g_it_schedule-aufnr      = l_it_ztpsched-aufnr.
      g_it_schedule-sch_qty    = l_it_ztpsched-sch_qty.
      g_it_schedule-ssedd      = l_it_ztpsched-ssedd.
      g_it_schedule-vornr      = l_it_ztpsched-vornr.
      g_it_schedule-meinh      = l_it_ztpsched-meinh.
      g_it_schedule-zz_memo    = l_it_ztpsched-zz_memo.
      g_it_schedule-zz_aufnr   = l_it_ztpsched-zz_aufnr.


      LOOP AT l_it_schedule WHERE aufpl = l_it_tmp-aufpl AND aplzl = l_it_tmp-aplzl AND sch_seq = l_it_tmp-sch_seq.
        l_offset = l_it_schedule-zz_ssavd - p_start + 1.
        CONCATENATE 'DAILY' l_offset INTO l_filename.
        ASSIGN COMPONENT l_filename OF STRUCTURE g_it_schedule TO <value>.
        IF <value> IS ASSIGNED.
          <value> = l_it_schedule-sch_qty.
          UNASSIGN <value>.
        ENDIF.


        CONCATENATE 'MAN_P' l_offset INTO l_filename2.
        ASSIGN COMPONENT l_filename2 OF STRUCTURE g_it_schedule TO <value2>.
        IF <value2> IS ASSIGNED.
          <value2> = l_it_schedule-sch_qty * l_it_ztpsched-zz_ma_time.
          UNASSIGN <value2>.
        ENDIF.
      ENDLOOP.

    ENDIF.

    READ TABLE l_it_makt WITH KEY matnr = g_it_schedule-matnr BINARY SEARCH.
    IF sy-subrc = 0.
      g_it_schedule-maktx = l_it_makt-maktx.
    ENDIF.

    READ TABLE l_it_rmk WITH KEY matnr = g_it_schedule-matnr BINARY SEARCH.
    IF sy-subrc = 0.
      g_it_schedule-zz_drawing_rmk = l_it_rmk-zz_drawing_rmk.
      g_it_schedule-zz_fda         = l_it_rmk-zz_fda.
    ENDIF.


    CLEAR ls_material.
    READ TABLE lt_material INTO ls_material WITH KEY plant = l_werks material = g_it_schedule-matnr
    machine_no = g_it_schedule-zz_machine BINARY SEARCH.
    IF sy-subrc eq 0.
      g_it_schedule-plastic_cp1 = ls_material-plastic_cp1.
      CLEAR ls_mat.
      READ TABLE lt_mat INTO ls_mat WITH KEY plastic_cp = ls_material-plastic_cp1.
      IF sy-subrc eq 0.
        g_it_schedule-unit_of_cp1 = ls_mat-unit_of_cp.
        g_it_schedule-avai_qty_cp1 = ls_mat-avai_qty_cp.
      ENDIF.

      g_it_schedule-plastic_cp2 = ls_material-plastic_cp2.
      CLEAR ls_mat.
      READ TABLE lt_mat INTO ls_mat WITH KEY plastic_cp = ls_material-plastic_cp2.
      IF sy-subrc eq 0.
        g_it_schedule-unit_of_cp2 = ls_mat-unit_of_cp.
        g_it_schedule-avai_qty_cp2 = ls_mat-avai_qty_cp.
      ENDIF.
      g_it_schedule-plastic_cp3 = ls_material-plastic_cp3.
      CLEAR ls_mat.
      READ TABLE lt_mat INTO ls_mat WITH KEY plastic_cp = ls_material-plastic_cp3.
      IF sy-subrc eq 0.
        g_it_schedule-unit_of_cp3 = ls_mat-unit_of_cp.
        g_it_schedule-avai_qty_cp3 = ls_mat-avai_qty_cp.
      ENDIF.
    ENDIF.
    APPEND g_it_schedule.
  ENDLOOP.

  SORT g_it_schedule BY zz_workshop zz_wsseq zz_sch_byseq.

  l_it_tsched[] = g_it_schedule[].
  SORT l_it_tsched BY aufnr.
  DELETE ADJACENT DUPLICATES FROM l_it_tsched COMPARING aufnr.

  IF l_it_tsched[] IS NOT INITIAL.


  SELECT * INTO CORRESPONDING FIELDS OF TABLE l_it_afko
    FROM caufv
     FOR ALL ENTRIES IN l_it_tsched
   WHERE aufnr = l_it_tsched-aufnr
     AND werks = l_werks.
  SORT l_it_afko BY aufnr.
  ENDIF.
  LOOP AT g_it_schedule ASSIGNING <wa>.
    READ TABLE l_it_afko WITH KEY aufnr = <wa>-aufnr BINARY SEARCH.
    IF sy-subrc = 0.
      <wa>-gamng = l_it_afko-gamng.
      <wa>-zz_scrap	= l_it_afko-zz_scrap.
      <wa>-zz_gamng	= l_it_afko-zz_gamng.
    ENDIF.
  ENDLOOP.
  DELETE g_it_schedule WHERE gamng IS INITIAL.

  LOOP AT g_it_schedule.
    IF l_machine <> g_it_schedule-zz_machine .
      IF  l_machine IS NOT INITIAL.
        l_machine = g_it_schedule-zz_machine.
        CLEAR g_it_schedule.
        g_it_schedule-zz_wsseq = '9999'.
        INSERT g_it_schedule INDEX sy-tabix .
      ELSE.
        l_machine = g_it_schedule-zz_machine.
      ENDIF.

    ENDIF.
  ENDLOOP.

  CLEAR g_it_schedule.
  APPEND g_it_schedule.

  SELECT plnbez AS matnr aufnr gstrp AS ssedd gmein AS meinh gamng igmng AS sch_qty INTO CORRESPONDING FIELDS OF TABLE l_it_caufv
    FROM caufv AS a
   WHERE a~gamng > a~igmng
     AND idat2 = '00000000'
     AND idat3 = '00000000'
     AND fevor = 'DEB'
     AND werks = l_werks.

  l_it_tcaufv[] = l_it_caufv[].
  SORT l_it_tcaufv BY matnr.
  DELETE ADJACENT DUPLICATES FROM l_it_tcaufv COMPARING matnr.

  IF l_it_tcaufv[] is  NOT INITIAL.
    SELECT * INTO CORRESPONDING FIELDS OF TABLE l_it_makt
      FROM makt
       FOR ALL ENTRIES IN l_it_tcaufv
     WHERE matnr = l_it_tcaufv-matnr
       AND spras = 'E'.
    SORT l_it_makt BY matnr.

    SELECT * INTO CORRESPONDING FIELDS OF TABLE l_it_rmk
      FROM mara
       FOR ALL ENTRIES IN l_it_tcaufv
     WHERE matnr = l_it_tcaufv-matnr.
  ENDIF.
  LOOP AT l_it_caufv.
    READ TABLE l_it_makt WITH KEY matnr = l_it_caufv-matnr.
    IF sy-subrc = 0.
      l_it_caufv-maktx = l_it_makt-maktx.
    ENDIF.

    READ TABLE l_it_rmk WITH KEY matnr = l_it_caufv-matnr.
    IF sy-subrc = 0.
      l_it_caufv-zz_drawing_no = l_it_rmk-zz_drawing_no.
    ENDIF.

    l_it_caufv-sch_qty = l_it_caufv-gamng - l_it_caufv-sch_qty.
    MOVE-CORRESPONDING l_it_caufv TO g_it_schedule.
    APPEND g_it_schedule.
  ENDLOOP.

ENDFORM.                    " DATA_LOAD
*&---------------------------------------------------------------------*
*&      Form  ALV_DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM alv_display .
  DATA:l_int       TYPE string,
       l_fieldname TYPE string,
       l_fieldname2 TYPE string,
       l_ssavd     TYPE zz_ssavd,
       lv_man_p TYPE string.
  CONSTANTS: lc_man_p(9) VALUE 'Man Power'.

  DATA: l_wa_et_events    TYPE slis_alv_event,
        l_it_et_events    TYPE slis_t_event,
        l_alv_layout      TYPE slis_layout_alv,
        l_it_sort_fldname TYPE slis_t_sortinfo_alv WITH HEADER LINE,
        l_disvariant      LIKE disvariant.


  add_field 'ZZ_MACHINE'    'Machine'        'X' ''.
  add_field 'MC_TYPE'       'MC TYP'         'X' ''.
  add_field 'MC_MOD'        'MC Mode'        'X' ''.
  add_field 'ZZ_WORKSHOP'   'WorkShop'       'X' ''.
  add_field 'MC_FDA'        'Machine FDA'    'X' ''..          "09/09/2014
  add_field 'ZZ_SCH_BYSEQ'  'SEQ'            'X' ''..
  add_field 'ZZ_DRAWING_NO' 'Drawing_no'     'X' ''..
  add_field 'MAKTX'         'Description'    'X' ''..
  add_field 'ZZ_MA_TIME'    'Cycle Time'     'X' ''..
  add_field 'BMSCH'         'Cave'           'X' ''..
  add_field 'OUTPUT'        'Spec. Output'   'X' ''..
  add_field 'MATNR'         'Material'       'X' ''..
  add_field 'ZZ_FDA'        'Material FDA'   'X' ''..          "09/09/2014
  add_field 'AUFNR'         'Order'          'X' ''..
  add_field 'ZZ_AUFNR'      'Ref order'      'X' ''..
  add_field 'VORNR'         'Oper./Act.'     'X' ''..
  add_field 'SCH_SEQ'       'SEQ'            'X' ''..
  add_field 'SCH_QTY'       'Open qty'       'X' ''..
  add_field 'GAMNG'         'Target qty'     'X' ''..
  add_field 'ZZ_SCRAP'      'Scrap'          'X' ''..
  add_field 'ZZ_GAMNG'      'Original QTY'   'X' ''..
  add_field 'MEINH'         'UOM'            'X' ''..
  add_field 'SSEDD'         'Reqmt Date'     'X' ''..
  add_field 'PLASTIC_CP1'         'Component 1'     'X' ''..
  add_field 'UNIT_OF_CP1'         'Unit'     'X' ''..
  add_field 'AVAI_QTY_CP1'         'Available Qty'     'X' ''..

  add_field 'PLASTIC_CP2'         'Component 2'     'X' ''.
  add_field 'UNIT_OF_CP2'         'Unit'     'X' ''.
  add_field 'AVAI_QTY_CP2'         'Available Qty'     'X' ''..

  add_field 'PLASTIC_CP3'         'Component 3'     'X' ''.
  add_field 'UNIT_OF_CP3'         'Unit'     'X' ''.
  add_field 'AVAI_QTY_CP3'         'Available Qty'     'X' ''.

  DO 14 TIMES.
    l_int = sy-index.
    CONCATENATE 'DAILY' l_int INTO l_fieldname.
    l_ssavd = p_start + sy-index - 1.
    add_field l_fieldname l_ssavd 'X' 'X'.


    CONCATENATE 'MAN_P' l_int INTO l_fieldname2.
    CONCATENATE lc_man_p l_int INTO lv_man_p.
    add_field l_fieldname2 lv_man_p 'X' ''..
  ENDDO.

  add_field 'ZZ_DRAWING_RMK' 'Rating Drawing' 'X' ''..

  gt_schedule_old[]  =  g_it_schedule[].



  CLEAR l_alv_layout.

  l_alv_layout-detail_popup         = 'X'.
  l_alv_layout-no_vline             = ' '.
  l_alv_layout-zebra                = 'X'.
  l_alv_layout-detail_initial_lines = 'X'.
  l_alv_layout-colwidth_optimize    = 'X'.
  l_alv_layout-allow_switch_to_list = ''.


  l_disvariant-report   = sy-cprog.
  l_disvariant-username = sy-uname.


  CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
      i_list_type = 0
    IMPORTING
      et_events   = l_it_et_events.


  READ TABLE l_it_et_events
    WITH KEY name = slis_ev_user_command
      INTO l_wa_et_events.
  IF sy-subrc = 0.
    l_wa_et_events-form = 'USER_COMMAND'.
    APPEND l_wa_et_events TO l_it_et_events.
  ENDIF.

   READ TABLE l_it_et_events
    WITH KEY name = slis_ev_pf_status_set
      INTO l_wa_et_events.
  IF sy-subrc = 0.
    l_wa_et_events-form = 'STATUS'.
    APPEND l_wa_et_events TO l_it_et_events.
  ENDIF.

  l_wa_et_events-name = 'CALLER_EXIT'.
  l_wa_et_events-FORM = 'FM_BUTTON'.
  APPEND l_wa_et_events TO l_it_et_events.


  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program    = sy-repid
      it_events             = l_it_et_events
      is_layout             = l_alv_layout
      it_fieldcat           = g_it_alv_fieldcat
      it_sort               = l_it_sort_fldname[]
      is_variant            = l_disvariant
    TABLES
      t_outtab              = g_it_schedule.


ENDFORM.                    " ALV_DISPLAY



FORM user_command CHANGING  p_ucomm   TYPE sy-ucomm
                            p_sel_fld TYPE slis_selfield.


  CASE p_ucomm.
    WHEN '&DATA_SAVE'.

      CHECK gt_ZTPSCHED2 IS NOT INITIAL.
      MODIFY ZTPSCHED2 FROM TABLE gt_ZTPSCHED2.
      IF sy-subrc eq 0.
        COMMIT WORK.
      ELSE.
        ROLLBACK WORK.
      ENDIF.
  ENDCASE.

ENDFORM.                    "alv_user_command



CLASS LCL_EVENT_RECEIVER DEFINITION.
  PUBLIC SECTION.
    METHODS:
      HANDLE_MODIFY
        FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID
        IMPORTING E_MODIFIED ET_GOOD_CELLS.
ENDCLASS.

CLASS LCL_EVENT_RECEIVER IMPLEMENTATION.

  METHOD  HANDLE_MODIFY.
    DATA: STBL      TYPE LVC_S_STBL,
          l_int       TYPE string,
          l_fieldname TYPE string,
          l_fieldname2 TYPE string,
          lt_schedule_new LIKE TABLE OF g_it_schedule,
          ls_schedule_new like g_it_schedule,
          ls_schedule_old like g_it_schedule,
          lt_schedule LIKE TABLE OF g_it_schedule,
          ls_ztpsched TYPE ztpsched,
          ls_ztpsched2 TYPE ztpsched2.
   FIELD-SYMBOLS:<value_new> TYPE i,
                <value_old> TYPE i,
                <value_man> TYPE i,
                <l_schedule> like LINE OF g_it_schedule.
    CHECK g_it_schedule[] <> gt_schedule_old[] AND sy-ucomm ne '&DATA_SAVE'.
    LOOP AT g_it_schedule ASSIGNING <l_schedule>.
      READ TABLE gt_schedule_old INTO ls_schedule_old INDEX sy-tabix.
      IF <l_schedule> <> ls_schedule_old.
        DO 14 TIMES.
           l_int = sy-index.
           CONCATENATE 'DAILY' l_int INTO l_fieldname.
           ASSIGN COMPONENT l_fieldname OF STRUCTURE <l_schedule> to <value_new>.
           ASSIGN COMPONENT l_fieldname OF STRUCTURE ls_schedule_old to <value_old>.
           IF <value_new> IS ASSIGNED AND <value_old> IS ASSIGNED.
             IF <value_new> ne <value_old>.
               CLEAR ls_ztpsched.
               READ TABLE gt_ztpsched INTO ls_ztpsched WITH KEY
                zz_machine = <l_schedule>-zz_machine
                matnr = <l_schedule>-matnr
                aufnr = <l_schedule>-aufnr.
               IF sy-subrc eq 0.
                 CLEAR ls_ztpsched2.
                 ls_ztpsched2-AUFPL = ls_ztpsched-AUFPL.
                 ls_ztpsched2-APLZL = ls_ztpsched-APLZL.
                 ls_ztpsched2-ZZ_SSAVD = p_start + sy-index - 1.
                 ls_ztpsched2-SCH_SEQ = ls_ztpsched-SCH_SEQ.
                 ls_ztpsched2-SCH_QTY = <value_new>.
                 ls_ztpsched2-ZZ_MACHINE = ls_ztpsched-ZZ_MACHINE.
                 ls_ztpsched2-MEINH = ls_ztpsched-MEINH.
                 ls_ztpsched2-ZZ_SCH_BYSEQ = ls_ztpsched-ZZ_SCH_BYSEQ.
                 ls_ztpsched2-ANDAT = sy-datum.
                 APPEND ls_ztpsched2 to gt_ztpsched2.
               ENDIF.

              CONCATENATE 'MAN_P' l_int INTO l_fieldname2.
              ASSIGN COMPONENT l_fieldname2 OF STRUCTURE <l_schedule> to <value_man>.
              IF <value_man> IS ASSIGNED.
                <value_man> = <value_new> * <l_schedule>-zz_ma_time.
                UNASSIGN <value_man>.
              ENDIF.
             ENDIF.
           ENDIF.
        ENDDO.
      ENDIF.
    ENDLOOP.

*   稳定刷新
    STBL-ROW = 'X'." 基于行的稳定刷新
    STBL-COL = 'X'." 基于列稳定刷新
    CALL METHOD TEM_GRID->REFRESH_TABLE_DISPLAY
      EXPORTING
        IS_STABLE = STBL.
  ENDMETHOD.                    "HANDLE_MODIFY

ENDCLASS.


FORM FM_BUTTON USING E_GRID TYPE SLIS_DATA_CALLER_EXIT.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID = TEM_GRID.

  CALL METHOD TEM_GRID->REGISTER_EDIT_EVENT
    EXPORTING
      I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER
    EXCEPTIONS
      ERROR      = 1
      OTHERS     = 2.

  DATA: GT_EVENT_RECEIVER TYPE REF TO LCL_EVENT_RECEIVER .
  CREATE OBJECT GT_EVENT_RECEIVER.
  SET HANDLER GT_EVENT_RECEIVER->HANDLE_MODIFY FOR TEM_GRID.
ENDFORM.                    "FM_BUTTON


FORM status USING p_rt_extab TYPE slis_t_extab.
  SET PF-STATUS 'STATUS_DEFAULT'.
ENDFORM.
posted @ 2019-05-02 18:46  auroracj  阅读(188)  评论(0)    收藏  举报