创建动态DEEP STRUCTURE实现控制单元格可编辑,单元格颜色,行颜色
2011-10-27 15:02
489 查看
REPORT zpp_rp009 NO STANDARD PAGE HEADING
LINE-SIZE 280
MESSAGE-ID zpp01.
************************************************************************
* TABLES
************************************************************************
TABLES:
marc,
t001w,
plaf,
mara,
makt. "物料描述
************************************************************************
* INTERNAL TABLES
************************************************************************
FIELD-SYMBOLS:<dynitab> TYPE STANDARD TABLE, "Dynamic internal table
<dynwa> TYPE ANY, "Dynamic work area
<field> TYPE ANY. "Field
TYPE-POOLS: slis.
DATA: fieldcat TYPE lvc_t_fcat,
fieldcat_ln TYPE lvc_s_fcat,
g_user_command TYPE slis_formname VALUE 'USER_COMMAND',
git_events TYPE slis_t_event, "ALV 事件
ps_layout TYPE lvc_s_layo.
DATA: cl_stru TYPE REF TO cl_abap_structdescr,
cl_tabl TYPE REF TO cl_abap_tabledescr,
cl_handle TYPE REF TO data,
cl_strue TYPE REF TO data,
compdesc TYPE abap_componentdescr,
components TYPE abap_component_tab.
DATA:BEGIN OF wa_itab,
plnum LIKE plaf-plnum,
matnr LIKE plaf-matnr,
plwrk LIKE plaf-plwrk,
gsmng LIKE plaf-gsmng, "
pertr LIKE plaf-pertr, "未清日期
psttr LIKE plaf-psttr, "开始日期
dispo LIKE plaf-dispo,
matkl LIKE mara-matkl,
wgbez LIKE t023t-wgbez, "物料组描述
maktx LIKE makt-maktx,
meins LIKE mara-meins,
END OF wa_itab.
DATA:itab LIKE wa_itab OCCURS 0 WITH HEADER LINE.
DATA:
wa_flname(11) TYPE c,
wa_field(10),
t_quan TYPE p DECIMALS 0,
t_style TYPE lvc_t_styl,
t_color TYPE lvc_t_scol,
w_color TYPE lvc_s_scol,
tline(4),
stylelin TYPE lvc_s_styl.
DATA:BEGIN OF func OCCURS 0,
fcode(20) TYPE c,
END OF func.
DATA:BEGIN OF it_day OCCURS 0,
day TYPE d,
END OF it_day.
DATA tem_grid TYPE REF TO cl_gui_alv_grid.
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS handle_modify
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed .
ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_modify.
DATA stbl TYPE lvc_s_stbl.
PERFORM frm_refresh_data USING er_data_changed.
* 稳定刷新
stbl-row = 'X'." 基于行的稳定刷新
stbl-col = 'X'." 基于列稳定刷新
CALL METHOD tem_grid->refresh_table_display
EXPORTING
is_stable = stbl.
ENDMETHOD. "handle_modify
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION
DATA gt_event_receiver TYPE REF TO lcl_event_receiver .
************************************************************************
* selection-screen
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t1.
SELECT-OPTIONS:s_werks FOR plaf-plwrk.
SELECT-OPTIONS:s_psttr FOR plaf-psttr.
SELECTION-SCREEN END OF BLOCK b1.
************************************************************************
* Initialization
************************************************************************
INITIALIZATION.
t1 = '选择条件'.
START-OF-SELECTION.
PERFORM sub_read_data.
PERFORM sub_dny_field_create.
PERFORM sub_dny_table_create.
PERFORM sub_dny_field_update.
END-OF-SELECTION.
PERFORM sub_write_data.
*&---------------------------------------------------------------------*
*& Form SUB_READ_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_read_data .
SELECT p~plnum p~matnr p~plwrk p~gsmng p~psttr p~dispo
m~meins m~matkl
INTO CORRESPONDING FIELDS OF TABLE itab
FROM plaf AS p
JOIN mara AS m ON m~matnr = p~matnr
WHERE p~psttr IN s_psttr
AND p~plwrk IN s_werks.
IF itab[] IS NOT INITIAL.
SORT itab BY matnr.
LOOP AT itab.
CLEAR it_day.
it_day-day = itab-psttr.
APPEND it_day.
SELECT SINGLE maktx INTO itab-maktx
FROM makt
WHERE matnr = itab-matnr
AND spras = '1'.
SELECT SINGLE wgbez INTO itab-wgbez
FROM t023t
WHERE matkl = itab-matkl
AND spras = '1'.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
input = itab-meins
language = sy-langu
IMPORTING
output = itab-meins.
MODIFY itab.
ENDLOOP.
SORT it_day BY day.
DELETE ADJACENT DUPLICATES FROM it_day COMPARING ALL FIELDS.
ELSE.
MESSAGE i997 WITH '没有找到相关数据!'.
SUBMIT (sy-repid) VIA SELECTION-SCREEN.
ENDIF.
SORT it_day BY day.
ENDFORM. " SUB_READ_DATA
*&---------------------------------------------------------------------*
*& Form SUB_WRITE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_write_data .
CLEAR fieldcat.
REFRESH fieldcat.
PERFORM frm_get_event. "设置自定义事件处理程序
PERFORM build_fieldcat.
PERFORM display_alv.
ENDFORM. " SUB_WRITE_DATA
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_fieldcat .
DATA : col_pos TYPE i VALUE 1.
ps_layout-zebra = 'X'.
ps_layout-cwidth_opt = 'X'.
ps_layout-stylefname = 'STYLE'.
ps_layout-ctab_fname = 'COLOR'.
ps_layout-info_fname = 'CLINE'.
*----------------------------------------------------------------------*
*& Rerference
*& _fieldname scrtext_l _no_zero _edit _decimals_out
*----------------------------------------------------------------------*
PERFORM field USING 'PLWRK' '工厂' '' ' ' '' .
PERFORM field USING 'MATNR' '产品编码' 'X' '' ''.
PERFORM field USING 'MAKTX' '物料描述' '' ' ' '' .
PERFORM field USING 'WGBEZ' '物料组' '' ' ' '' .
PERFORM field USING 'DISPO' 'MRP控制者' '' '' ''.
PERFORM field USING 'MEINS' '单位' '' ' ' ''.
PERFORM field USING 'GSMNG' '总数' 'X' '' '0' .
LOOP AT it_day.
CONCATENATE 'DAY' it_day-day INTO wa_flname.
CONCATENATE it_day-day(4) '.' it_day-day+4(2)
'.' it_day-day+6(2) INTO wa_field.
PERFORM field USING wa_flname wa_field 'X' 'X' '0'.
ENDLOOP.
ENDFORM. " BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& Form field
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_COL_POS text
* -->P_1055 text
* -->P_1056 text
* -->P_1057 text
* -->P_1058 text
* -->P_1059 text
*----------------------------------------------------------------------*
FORM field USING p_fieldname "
p_seltext_l "
p_no_zero "
p_edit "
p_deci.
fieldcat_ln-fieldname = p_fieldname.
fieldcat_ln-reptext = p_seltext_l.
fieldcat_ln-no_zero = p_no_zero.
fieldcat_ln-edit = p_edit.
fieldcat_ln-decimals_o = p_deci.
APPEND fieldcat_ln TO fieldcat.
CLEAR: fieldcat_ln.
ENDFORM. " field
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_alv .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-cprog
is_layout_lvc = ps_layout
it_fieldcat_lvc = fieldcat
i_save = 'A'
i_callback_user_command = 'USER_COMMAND'
it_events = git_events
TABLES
t_outtab = <dynitab>
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. " DISPLAY_ALV
*&---------------------------------------------------------------------*
*& Form usercommand
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA:str(2),
line TYPE i.
CASE r_ucomm.
WHEN '&IC1'.
CASE rs_selfield-sel_tab_field.
WHEN '1-MATNR'.
SET PARAMETER ID 'MAT' FIELD rs_selfield-value.
SET PARAMETER ID 'MXX' FIELD 'K'.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form FRM_GET_EVENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_event .
DATA l_events TYPE LINE OF slis_t_event.
CLEAR l_events.
l_events-name = 'CALLER_EXIT'.
l_events-form = 'FM_BUTTON'.
APPEND l_events TO git_events.
ENDFORM. " FRM_GET_EVENT
*&---------------------------------------------------------------------*
*& Form fm_button
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->E_GRID text
*----------------------------------------------------------------------*
FORM fm_button USING e_grid TYPE slis_data_caller_exit.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = tem_grid.
* 设置enter事件
CALL METHOD tem_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter
EXCEPTIONS
error = 1
OTHERS = 2.
* 设置单光标焦点移开被修改单元格后既触发事件
CALL METHOD tem_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified
EXCEPTIONS
error = 1
OTHERS = 2.
CREATE OBJECT gt_event_receiver.
SET HANDLER gt_event_receiver->handle_modify FOR tem_grid.
ENDFORM. "FM_BUTTON
*&---------------------------------------------------------------------*
*& Form FRM_REFRESH_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_MODIFIED text
*----------------------------------------------------------------------*
FORM frm_refresh_data USING p_er_data_changed
TYPE REF TO cl_alv_changed_data_protocol.
DATA:mod_data TYPE lvc_t_modi,
wa_mod_data TYPE lvc_s_modi.
mod_data = p_er_data_changed->mt_mod_cells.
ENDFORM. " FRM_REFRESH_DATA
*&---------------------------------------------------------------------*
*& Form SUB_DNY_FIELD_CREATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_dny_field_create .
CLEAR compdesc.
compdesc-type ?= cl_abap_datadescr=>describe_by_name( 'MARA-MATNR' ).
compdesc-name = 'MATNR'.
APPEND compdesc TO components.
compdesc-type ?= cl_abap_datadescr=>describe_by_name( 'MARC-WERKS').
compdesc-name = 'PLWRK'.
APPEND compdesc TO components.
compdesc-type ?= cl_abap_datadescr=>describe_by_name( 'PLAF-GSMNG').
compdesc-name = 'GSMNG'. "数量
APPEND compdesc TO components.
compdesc-type ?= cl_abap_datadescr=>describe_by_name( 'PLAF-DISPO').
compdesc-name = 'DISPO'. "mrp控制者
APPEND compdesc TO components.
compdesc-type ?= cl_abap_datadescr=>describe_by_name( 'MARA-MATKL').
compdesc-name = 'MATKL'. "
APPEND compdesc TO components.
compdesc-type ?= cl_abap_datadescr=>describe_by_name( 'T023T-WGBEZ' ).
compdesc-name = 'WGBEZ'. "物料组描述
APPEND compdesc TO components.
compdesc-type ?= cl_abap_datadescr=>describe_by_name( 'MARA-MEINS' ).
compdesc-name = 'MEINS'. "
APPEND compdesc TO components.
compdesc-type ?= cl_abap_datadescr=>describe_by_name( 'MAKT-MAKTX' ).
compdesc-name = 'MAKTX'. "
APPEND compdesc TO components.
LOOP AT it_day.
CONCATENATE 'DAY' it_day-day INTO wa_flname.
compdesc-type ?= cl_abap_datadescr=>describe_by_data( t_quan ).
compdesc-name = wa_flname.
APPEND compdesc TO components.
ENDLOOP.
compdesc-type ?= cl_abap_typedescr=>describe_by_data( t_style ).
compdesc-name = 'STYLE'. "控制单元格可编辑
APPEND compdesc TO components.
compdesc-type ?= cl_abap_typedescr=>describe_by_data( t_color ).
compdesc-name = 'COLOR'. "控制单元格颜色
APPEND compdesc TO components.
compdesc-type ?= cl_abap_typedescr=>describe_by_data( tline ).
compdesc-name = 'CLINE'. "控制行颜色
APPEND compdesc TO components.
ENDFORM. " SUB_DNY_FIELD_CREATE
*&---------------------------------------------------------------------*
*& Form SUB_DNY_TABLE_CREATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_dny_table_create .
cl_stru = cl_abap_structdescr=>create( components ).
cl_tabl = cl_abap_tabledescr=>create( cl_stru ).
CREATE DATA cl_handle TYPE HANDLE cl_tabl.
ASSIGN cl_handle->* TO <dynitab>.
CREATE DATA cl_strue TYPE HANDLE cl_stru.
ASSIGN cl_strue->* TO <dynwa>.
ENDFORM. " SUB_DNY_TABLE_CREATE
*&---------------------------------------------------------------------*
*& Form SUB_DNY_FIELD_UPDATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_dny_field_update .
LOOP AT itab.
wa_flname = 'MATNR'.
READ TABLE <dynitab> INTO <dynwa> WITH KEY (wa_flname) = itab-matnr.
IF sy-subrc NE 0.
ASSIGN COMPONENT 'MATNR' OF STRUCTURE <dynwa> TO <field>.
<field> = itab-matnr.
ASSIGN COMPONENT 'PLWRK' OF STRUCTURE <dynwa> TO <field>.
<field> = itab-plwrk.
ASSIGN COMPONENT 'GSMNG' OF STRUCTURE <dynwa> TO <field>.
<field> = itab-gsmng.
ASSIGN COMPONENT 'DISPO' OF STRUCTURE <dynwa> TO <field>.
<field> = itab-dispo. "mrp控制者
ASSIGN COMPONENT 'MATKL' OF STRUCTURE <dynwa> TO <field>.
<field> = itab-matkl. "
ASSIGN COMPONENT 'WGBEZ' OF STRUCTURE <dynwa> TO <field>.
<field> = itab-wgbez. "物料组描述
ASSIGN COMPONENT 'MEINS' OF STRUCTURE <dynwa> TO <field>.
<field> = itab-meins. "
ASSIGN COMPONENT 'MAKTX' OF STRUCTURE <dynwa> TO <field>.
<field> = itab-maktx. "
CONCATENATE 'DAY' itab-psttr INTO wa_flname.
ASSIGN COMPONENT wa_flname OF STRUCTURE <dynwa> TO <field>.
<field> = itab-gsmng.
APPEND <dynwa> TO <dynitab>.
CLEAR <dynwa>.
ELSE.
ASSIGN COMPONENT 'GSMNG' OF STRUCTURE <dynwa> TO <field>.
<field> = <field> + itab-gsmng.
CONCATENATE 'DAY' itab-psttr INTO wa_flname.
ASSIGN COMPONENT wa_flname OF STRUCTURE <dynwa> TO <field>.
<field> = <field> + itab-gsmng.
MODIFY <dynitab> FROM <dynwa> INDEX sy-tabix .
CLEAR <dynwa>.
ENDIF.
ENDLOOP.
**********
LOOP AT <dynitab> INTO <dynwa>.
ASSIGN COMPONENT 'GSMNG' OF STRUCTURE <dynwa> TO <field>.
IF <field> > 100 AND <field> < 500.
CLEAR w_color.
REFRESH t_color.
w_color-fname = 'GSMNG'.
w_color-color-col = 6. "<--- colour number
w_color-color-int = 1. "
w_color-color-inv = 1.
APPEND w_color TO t_color.
ASSIGN COMPONENT 'COLOR' OF STRUCTURE <dynwa> TO <field>.
<field> = t_color.
ELSEIF <field> >= 500 AND <field> < 800.
CLEAR w_color.
REFRESH t_color.
w_color-fname = 'GSMNG'.
w_color-color-col = 5. "<--- colour number
w_color-color-int = 1. "
w_color-color-inv = 1.
APPEND w_color TO t_color.
ASSIGN COMPONENT 'COLOR' OF STRUCTURE <dynwa> TO <field>.
<field> = t_color.
ELSEIF <field> < 5.
ASSIGN COMPONENT 'CLINE' OF STRUCTURE <dynwa> TO <field>.
<field> = 'C310'.
ENDIF.
REFRESH t_style.
LOOP AT it_day.
CONCATENATE 'DAY' it_day-day INTO wa_flname.
ASSIGN COMPONENT wa_flname OF STRUCTURE <dynwa> TO <field>.
IF <field> > 20 OR <field> IS INITIAL.
stylelin-fieldname = wa_flname.
stylelin-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT stylelin INTO TABLE t_style.
ASSIGN COMPONENT 'STYLE' OF STRUCTURE <dynwa> TO <field>.
<field> = t_style.
CLEAR stylelin.
ENDIF.
ENDLOOP.
MODIFY <dynitab> FROM <dynwa>.
ENDLOOP.
ENDFORM. " SUB_DNY_FIELD_UPDATE
LINE-SIZE 280
MESSAGE-ID zpp01.
************************************************************************
* TABLES
************************************************************************
TABLES:
marc,
t001w,
plaf,
mara,
makt. "物料描述
************************************************************************
* INTERNAL TABLES
************************************************************************
FIELD-SYMBOLS:<dynitab> TYPE STANDARD TABLE, "Dynamic internal table
<dynwa> TYPE ANY, "Dynamic work area
<field> TYPE ANY. "Field
TYPE-POOLS: slis.
DATA: fieldcat TYPE lvc_t_fcat,
fieldcat_ln TYPE lvc_s_fcat,
g_user_command TYPE slis_formname VALUE 'USER_COMMAND',
git_events TYPE slis_t_event, "ALV 事件
ps_layout TYPE lvc_s_layo.
DATA: cl_stru TYPE REF TO cl_abap_structdescr,
cl_tabl TYPE REF TO cl_abap_tabledescr,
cl_handle TYPE REF TO data,
cl_strue TYPE REF TO data,
compdesc TYPE abap_componentdescr,
components TYPE abap_component_tab.
DATA:BEGIN OF wa_itab,
plnum LIKE plaf-plnum,
matnr LIKE plaf-matnr,
plwrk LIKE plaf-plwrk,
gsmng LIKE plaf-gsmng, "
pertr LIKE plaf-pertr, "未清日期
psttr LIKE plaf-psttr, "开始日期
dispo LIKE plaf-dispo,
matkl LIKE mara-matkl,
wgbez LIKE t023t-wgbez, "物料组描述
maktx LIKE makt-maktx,
meins LIKE mara-meins,
END OF wa_itab.
DATA:itab LIKE wa_itab OCCURS 0 WITH HEADER LINE.
DATA:
wa_flname(11) TYPE c,
wa_field(10),
t_quan TYPE p DECIMALS 0,
t_style TYPE lvc_t_styl,
t_color TYPE lvc_t_scol,
w_color TYPE lvc_s_scol,
tline(4),
stylelin TYPE lvc_s_styl.
DATA:BEGIN OF func OCCURS 0,
fcode(20) TYPE c,
END OF func.
DATA:BEGIN OF it_day OCCURS 0,
day TYPE d,
END OF it_day.
DATA tem_grid TYPE REF TO cl_gui_alv_grid.
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS handle_modify
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed .
ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_modify.
DATA stbl TYPE lvc_s_stbl.
PERFORM frm_refresh_data USING er_data_changed.
* 稳定刷新
stbl-row = 'X'." 基于行的稳定刷新
stbl-col = 'X'." 基于列稳定刷新
CALL METHOD tem_grid->refresh_table_display
EXPORTING
is_stable = stbl.
ENDMETHOD. "handle_modify
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION
DATA gt_event_receiver TYPE REF TO lcl_event_receiver .
************************************************************************
* selection-screen
************************************************************************
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t1.
SELECT-OPTIONS:s_werks FOR plaf-plwrk.
SELECT-OPTIONS:s_psttr FOR plaf-psttr.
SELECTION-SCREEN END OF BLOCK b1.
************************************************************************
* Initialization
************************************************************************
INITIALIZATION.
t1 = '选择条件'.
START-OF-SELECTION.
PERFORM sub_read_data.
PERFORM sub_dny_field_create.
PERFORM sub_dny_table_create.
PERFORM sub_dny_field_update.
END-OF-SELECTION.
PERFORM sub_write_data.
*&---------------------------------------------------------------------*
*& Form SUB_READ_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_read_data .
SELECT p~plnum p~matnr p~plwrk p~gsmng p~psttr p~dispo
m~meins m~matkl
INTO CORRESPONDING FIELDS OF TABLE itab
FROM plaf AS p
JOIN mara AS m ON m~matnr = p~matnr
WHERE p~psttr IN s_psttr
AND p~plwrk IN s_werks.
IF itab[] IS NOT INITIAL.
SORT itab BY matnr.
LOOP AT itab.
CLEAR it_day.
it_day-day = itab-psttr.
APPEND it_day.
SELECT SINGLE maktx INTO itab-maktx
FROM makt
WHERE matnr = itab-matnr
AND spras = '1'.
SELECT SINGLE wgbez INTO itab-wgbez
FROM t023t
WHERE matkl = itab-matkl
AND spras = '1'.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
input = itab-meins
language = sy-langu
IMPORTING
output = itab-meins.
MODIFY itab.
ENDLOOP.
SORT it_day BY day.
DELETE ADJACENT DUPLICATES FROM it_day COMPARING ALL FIELDS.
ELSE.
MESSAGE i997 WITH '没有找到相关数据!'.
SUBMIT (sy-repid) VIA SELECTION-SCREEN.
ENDIF.
SORT it_day BY day.
ENDFORM. " SUB_READ_DATA
*&---------------------------------------------------------------------*
*& Form SUB_WRITE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_write_data .
CLEAR fieldcat.
REFRESH fieldcat.
PERFORM frm_get_event. "设置自定义事件处理程序
PERFORM build_fieldcat.
PERFORM display_alv.
ENDFORM. " SUB_WRITE_DATA
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_fieldcat .
DATA : col_pos TYPE i VALUE 1.
ps_layout-zebra = 'X'.
ps_layout-cwidth_opt = 'X'.
ps_layout-stylefname = 'STYLE'.
ps_layout-ctab_fname = 'COLOR'.
ps_layout-info_fname = 'CLINE'.
*----------------------------------------------------------------------*
*& Rerference
*& _fieldname scrtext_l _no_zero _edit _decimals_out
*----------------------------------------------------------------------*
PERFORM field USING 'PLWRK' '工厂' '' ' ' '' .
PERFORM field USING 'MATNR' '产品编码' 'X' '' ''.
PERFORM field USING 'MAKTX' '物料描述' '' ' ' '' .
PERFORM field USING 'WGBEZ' '物料组' '' ' ' '' .
PERFORM field USING 'DISPO' 'MRP控制者' '' '' ''.
PERFORM field USING 'MEINS' '单位' '' ' ' ''.
PERFORM field USING 'GSMNG' '总数' 'X' '' '0' .
LOOP AT it_day.
CONCATENATE 'DAY' it_day-day INTO wa_flname.
CONCATENATE it_day-day(4) '.' it_day-day+4(2)
'.' it_day-day+6(2) INTO wa_field.
PERFORM field USING wa_flname wa_field 'X' 'X' '0'.
ENDLOOP.
ENDFORM. " BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*& Form field
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_COL_POS text
* -->P_1055 text
* -->P_1056 text
* -->P_1057 text
* -->P_1058 text
* -->P_1059 text
*----------------------------------------------------------------------*
FORM field USING p_fieldname "
p_seltext_l "
p_no_zero "
p_edit "
p_deci.
fieldcat_ln-fieldname = p_fieldname.
fieldcat_ln-reptext = p_seltext_l.
fieldcat_ln-no_zero = p_no_zero.
fieldcat_ln-edit = p_edit.
fieldcat_ln-decimals_o = p_deci.
APPEND fieldcat_ln TO fieldcat.
CLEAR: fieldcat_ln.
ENDFORM. " field
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_alv .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-cprog
is_layout_lvc = ps_layout
it_fieldcat_lvc = fieldcat
i_save = 'A'
i_callback_user_command = 'USER_COMMAND'
it_events = git_events
TABLES
t_outtab = <dynitab>
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. " DISPLAY_ALV
*&---------------------------------------------------------------------*
*& Form usercommand
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->R_UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
DATA:str(2),
line TYPE i.
CASE r_ucomm.
WHEN '&IC1'.
CASE rs_selfield-sel_tab_field.
WHEN '1-MATNR'.
SET PARAMETER ID 'MAT' FIELD rs_selfield-value.
SET PARAMETER ID 'MXX' FIELD 'K'.
CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDCASE.
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form FRM_GET_EVENT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_event .
DATA l_events TYPE LINE OF slis_t_event.
CLEAR l_events.
l_events-name = 'CALLER_EXIT'.
l_events-form = 'FM_BUTTON'.
APPEND l_events TO git_events.
ENDFORM. " FRM_GET_EVENT
*&---------------------------------------------------------------------*
*& Form fm_button
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->E_GRID text
*----------------------------------------------------------------------*
FORM fm_button USING e_grid TYPE slis_data_caller_exit.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = tem_grid.
* 设置enter事件
CALL METHOD tem_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter
EXCEPTIONS
error = 1
OTHERS = 2.
* 设置单光标焦点移开被修改单元格后既触发事件
CALL METHOD tem_grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified
EXCEPTIONS
error = 1
OTHERS = 2.
CREATE OBJECT gt_event_receiver.
SET HANDLER gt_event_receiver->handle_modify FOR tem_grid.
ENDFORM. "FM_BUTTON
*&---------------------------------------------------------------------*
*& Form FRM_REFRESH_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_E_MODIFIED text
*----------------------------------------------------------------------*
FORM frm_refresh_data USING p_er_data_changed
TYPE REF TO cl_alv_changed_data_protocol.
DATA:mod_data TYPE lvc_t_modi,
wa_mod_data TYPE lvc_s_modi.
mod_data = p_er_data_changed->mt_mod_cells.
ENDFORM. " FRM_REFRESH_DATA
*&---------------------------------------------------------------------*
*& Form SUB_DNY_FIELD_CREATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_dny_field_create .
CLEAR compdesc.
compdesc-type ?= cl_abap_datadescr=>describe_by_name( 'MARA-MATNR' ).
compdesc-name = 'MATNR'.
APPEND compdesc TO components.
compdesc-type ?= cl_abap_datadescr=>describe_by_name( 'MARC-WERKS').
compdesc-name = 'PLWRK'.
APPEND compdesc TO components.
compdesc-type ?= cl_abap_datadescr=>describe_by_name( 'PLAF-GSMNG').
compdesc-name = 'GSMNG'. "数量
APPEND compdesc TO components.
compdesc-type ?= cl_abap_datadescr=>describe_by_name( 'PLAF-DISPO').
compdesc-name = 'DISPO'. "mrp控制者
APPEND compdesc TO components.
compdesc-type ?= cl_abap_datadescr=>describe_by_name( 'MARA-MATKL').
compdesc-name = 'MATKL'. "
APPEND compdesc TO components.
compdesc-type ?= cl_abap_datadescr=>describe_by_name( 'T023T-WGBEZ' ).
compdesc-name = 'WGBEZ'. "物料组描述
APPEND compdesc TO components.
compdesc-type ?= cl_abap_datadescr=>describe_by_name( 'MARA-MEINS' ).
compdesc-name = 'MEINS'. "
APPEND compdesc TO components.
compdesc-type ?= cl_abap_datadescr=>describe_by_name( 'MAKT-MAKTX' ).
compdesc-name = 'MAKTX'. "
APPEND compdesc TO components.
LOOP AT it_day.
CONCATENATE 'DAY' it_day-day INTO wa_flname.
compdesc-type ?= cl_abap_datadescr=>describe_by_data( t_quan ).
compdesc-name = wa_flname.
APPEND compdesc TO components.
ENDLOOP.
compdesc-type ?= cl_abap_typedescr=>describe_by_data( t_style ).
compdesc-name = 'STYLE'. "控制单元格可编辑
APPEND compdesc TO components.
compdesc-type ?= cl_abap_typedescr=>describe_by_data( t_color ).
compdesc-name = 'COLOR'. "控制单元格颜色
APPEND compdesc TO components.
compdesc-type ?= cl_abap_typedescr=>describe_by_data( tline ).
compdesc-name = 'CLINE'. "控制行颜色
APPEND compdesc TO components.
ENDFORM. " SUB_DNY_FIELD_CREATE
*&---------------------------------------------------------------------*
*& Form SUB_DNY_TABLE_CREATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_dny_table_create .
cl_stru = cl_abap_structdescr=>create( components ).
cl_tabl = cl_abap_tabledescr=>create( cl_stru ).
CREATE DATA cl_handle TYPE HANDLE cl_tabl.
ASSIGN cl_handle->* TO <dynitab>.
CREATE DATA cl_strue TYPE HANDLE cl_stru.
ASSIGN cl_strue->* TO <dynwa>.
ENDFORM. " SUB_DNY_TABLE_CREATE
*&---------------------------------------------------------------------*
*& Form SUB_DNY_FIELD_UPDATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sub_dny_field_update .
LOOP AT itab.
wa_flname = 'MATNR'.
READ TABLE <dynitab> INTO <dynwa> WITH KEY (wa_flname) = itab-matnr.
IF sy-subrc NE 0.
ASSIGN COMPONENT 'MATNR' OF STRUCTURE <dynwa> TO <field>.
<field> = itab-matnr.
ASSIGN COMPONENT 'PLWRK' OF STRUCTURE <dynwa> TO <field>.
<field> = itab-plwrk.
ASSIGN COMPONENT 'GSMNG' OF STRUCTURE <dynwa> TO <field>.
<field> = itab-gsmng.
ASSIGN COMPONENT 'DISPO' OF STRUCTURE <dynwa> TO <field>.
<field> = itab-dispo. "mrp控制者
ASSIGN COMPONENT 'MATKL' OF STRUCTURE <dynwa> TO <field>.
<field> = itab-matkl. "
ASSIGN COMPONENT 'WGBEZ' OF STRUCTURE <dynwa> TO <field>.
<field> = itab-wgbez. "物料组描述
ASSIGN COMPONENT 'MEINS' OF STRUCTURE <dynwa> TO <field>.
<field> = itab-meins. "
ASSIGN COMPONENT 'MAKTX' OF STRUCTURE <dynwa> TO <field>.
<field> = itab-maktx. "
CONCATENATE 'DAY' itab-psttr INTO wa_flname.
ASSIGN COMPONENT wa_flname OF STRUCTURE <dynwa> TO <field>.
<field> = itab-gsmng.
APPEND <dynwa> TO <dynitab>.
CLEAR <dynwa>.
ELSE.
ASSIGN COMPONENT 'GSMNG' OF STRUCTURE <dynwa> TO <field>.
<field> = <field> + itab-gsmng.
CONCATENATE 'DAY' itab-psttr INTO wa_flname.
ASSIGN COMPONENT wa_flname OF STRUCTURE <dynwa> TO <field>.
<field> = <field> + itab-gsmng.
MODIFY <dynitab> FROM <dynwa> INDEX sy-tabix .
CLEAR <dynwa>.
ENDIF.
ENDLOOP.
**********
LOOP AT <dynitab> INTO <dynwa>.
ASSIGN COMPONENT 'GSMNG' OF STRUCTURE <dynwa> TO <field>.
IF <field> > 100 AND <field> < 500.
CLEAR w_color.
REFRESH t_color.
w_color-fname = 'GSMNG'.
w_color-color-col = 6. "<--- colour number
w_color-color-int = 1. "
w_color-color-inv = 1.
APPEND w_color TO t_color.
ASSIGN COMPONENT 'COLOR' OF STRUCTURE <dynwa> TO <field>.
<field> = t_color.
ELSEIF <field> >= 500 AND <field> < 800.
CLEAR w_color.
REFRESH t_color.
w_color-fname = 'GSMNG'.
w_color-color-col = 5. "<--- colour number
w_color-color-int = 1. "
w_color-color-inv = 1.
APPEND w_color TO t_color.
ASSIGN COMPONENT 'COLOR' OF STRUCTURE <dynwa> TO <field>.
<field> = t_color.
ELSEIF <field> < 5.
ASSIGN COMPONENT 'CLINE' OF STRUCTURE <dynwa> TO <field>.
<field> = 'C310'.
ENDIF.
REFRESH t_style.
LOOP AT it_day.
CONCATENATE 'DAY' it_day-day INTO wa_flname.
ASSIGN COMPONENT wa_flname OF STRUCTURE <dynwa> TO <field>.
IF <field> > 20 OR <field> IS INITIAL.
stylelin-fieldname = wa_flname.
stylelin-style = cl_gui_alv_grid=>mc_style_disabled.
INSERT stylelin INTO TABLE t_style.
ASSIGN COMPONENT 'STYLE' OF STRUCTURE <dynwa> TO <field>.
<field> = t_style.
CLEAR stylelin.
ENDIF.
ENDLOOP.
MODIFY <dynitab> FROM <dynwa>.
ENDLOOP.
ENDFORM. " SUB_DNY_FIELD_UPDATE
相关文章推荐
- 动态创建的表格单元格中的事件实现代码
- 学习u3d笔记(一) OnGui实现动态创建cube组件 并按钮控制cube旋转 停止 销毁
- 动态创建Text或者Label并且控制文本颜色以及透明度
- 动态创建的表格单元格中的事件实现代码
- Asp.Net利用Ajax实现Fullcalendar动态获取更新events并修改日程单元格背景颜色
- DevExpress.XtraReports:创建动态报表之单元格宽度控制问题
- Android - 用Fragments实现动态UI - 创建灵活的UI
- Jquery5_控制Dom元素_动态创建table
- 使用JavaScript实现动态创建含合并单元格(行)的表单
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- LayParames动态创建控件和控制相对布局的展示
- PHP编实现程动态图像的创建代码
- PHP实现动态创建XML文档的方法
- .net中实现运行时从字符串动态创建对象
- Easui中datagrid实现动态控制columns
- CCRenderTexture(动态创建纹理类 ---通过OpenGL方法 可以实现截屏功能)
- 【Java基础】动态代理实现AOP之控制事务
- 用于创建实现 System.ComponentModel.INotifyPropertyChanged 接口的动态类型,并添加各个 public 属性的定义
- MFC动态创建控件并响应事件代码实现过程
- python实现在sqlite动态创建表的方法