*&---------------------------------------------------------------------*
*& 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.