ABAP ALV单个单元格状态编辑
*&---------------------------------------------------------------------*
*& Report ZPPR0024
**&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
*&程序名称:工厂日生产计划待排维护
*&--------------------------------------------------------------------
REPORT zppr0024.
TABLES: ztpp_dpp_pool1.
DATA:edit(1) VALUE ''."ALV是否处于可编辑状态
FIELD-SYMBOLS: <f1>, <f2>, <f3>.
TYPES:BEGIN OF ty_zz.
INCLUDE TYPE ztpp_dpp_pool1.
TYPES:menge_x LIKE fieud_goods_sum-totqty, "修改数量
matnr_txt LIKE makt-maktx, "物料描述
extwg_txt LIKE twewt-ewbez, "外部物料组描述
vstel_txt LIKE tvstt-vtext, "装运点描述
zline_txt LIKE ztpp_line-ltext, "生产线描述
werks_txt LIKE t001w-name1, "工厂名称
style TYPE lvc_t_styl. "设置隐藏标识
TYPES: END OF ty_zz.
DATA: ls_edit TYPE lvc_s_styl,
lt_edit TYPE lvc_t_styl.
DATA: ls_outtab TYPE ty_zz.
DATA :gt_zz TYPE STANDARD TABLE OF ty_zz .
DATA:wa_zz TYPE ty_zz.
DATA: excel TYPE ole2_object,
workbook TYPE ole2_object,
sheet TYPE ole2_object,
cell TYPE ole2_object,
row TYPE ole2_object.
DATA: gs_fcat TYPE lvc_s_fcat,
gt_fcat TYPE lvc_t_fcat,
gs_layo TYPE lvc_s_layo,
gs_grid TYPE lvc_s_glay.
DATA: gt_event TYPE slis_t_event WITH HEADER LINE,
gt_event_exit TYPE slis_t_event_exit WITH HEADER LINE.
DATA: ref_grid TYPE REF TO cl_gui_alv_grid .
"parameters: p_ds type c as checkbox.
SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE text-002.
PARAMETERS: r1 RADIOBUTTON GROUP gr1 DEFAULT 'X' USER-COMMAND radio.
PARAMETERS: r2 RADIOBUTTON GROUP gr1.
SELECTION-SCREEN END OF BLOCK blk2.
DATA: filepath LIKE rlgrap-filename .
DATA: file LIKE rlgrap-filename.
START-OF-SELECTION.
SELECT-OPTIONS: p_btype FOR ztpp_dpp_pool1-btype NO-EXTENSION NO INTERVALS,
p_matnr FOR ztpp_dpp_pool1-matnr .
IF r1 EQ 'X'.
PERFORM get_data.
PERFORM show_data_to_alv.
ELSEIF r2 EQ 'X'.
PERFORM frm_path_selected CHANGING filepath.
CONCATENATE filepath '\模板.XLS' INTO file.
PERFORM frm_download_template USING file.
ENDIF.
*START-OF-SELECTION.
* PERFORM get_data.
* PERFORM show_data_to_alv.
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.
METHODS data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed.
ENDCLASS.
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_modify.
* PERFORM refresh.
DATA stbl TYPE lvc_s_stbl.
stbl-row = 'X'." 基于行的稳定刷新
stbl-col = 'X'." 基于列稳定刷新
CALL METHOD ref_grid->refresh_table_display
EXPORTING
is_stable = stbl.
ENDMETHOD.
METHOD data_changed.
DATA: ls_mod_cells TYPE lvc_s_modi,
tvalue TYPE string.
DATA: ls_stable TYPE lvc_s_stbl.
DATA: l_message TYPE string.
*
DATA:row_no TYPE i.
CHECK er_data_changed->mt_inserted_rows[] IS INITIAL.
LOOP AT er_data_changed->mt_good_cells INTO ls_mod_cells.
CLEAR tvalue.
CALL METHOD er_data_changed->get_cell_value
EXPORTING
i_row_id = ls_mod_cells-row_id
i_fieldname = ls_mod_cells-fieldname
IMPORTING
e_value = tvalue.
CLEAR wa_zz.
"READ TABLE gt_zz INTO wa_zz INDEX ls_mod_cells-row_id.
"读取焦点的行数据
IF ls_mod_cells-fieldname EQ 'BTYPE'.
IF tvalue EQ 'C'.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = ls_mod_cells-row_id
i_fieldname = 'BTYPE'
i_value = ''.
MESSAGE i001(00) WITH '不能选择计划类型为C的!'.
EXIT.
ENDIF.
ENDIF.
IF ls_mod_cells-fieldname EQ 'MENGE_D'.
READ TABLE gt_zz INTO wa_zz INDEX ls_mod_cells-row_id.
IF tvalue LE wa_zz-menge_a.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = ls_mod_cells-row_id
i_fieldname = 'MENGE_N'
i_value = ( wa_zz-menge_a - tvalue ).
ELSE.
MESSAGE i001(00) WITH '已超出总排产量!'.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = ls_mod_cells-row_id
i_fieldname = 'MENGE_D'
i_value = ''.
ENDIF.
ENDIF.
IF ls_mod_cells-fieldname EQ 'MENGE_X'.
READ TABLE gt_zz INTO wa_zz INDEX ls_mod_cells-row_id.
IF ( tvalue + wa_zz-menge_n ) GE 0.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = ls_mod_cells-row_id
i_fieldname = 'MENGE_N'
i_value = ( wa_zz-menge_n + tvalue ).
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = ls_mod_cells-row_id
i_fieldname = 'MENGE_A'
i_value = ( wa_zz-menge_a + tvalue ).
ELSE.
MESSAGE i001(00) WITH '少于未排产的数量!'.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = ls_mod_cells-row_id
i_fieldname = 'MENGE_X'
i_value = ''.
ENDIF.
ENDIF.
IF ls_mod_cells-fieldname EQ 'ZLINE'.
SELECT SINGLE werks INTO wa_zz-werks
FROM ztpp_line WHERE zline EQ tvalue.
SELECT SINGLE ltext INTO wa_zz-zline_txt
FROM ztpp_line WHERE zline EQ tvalue.
SELECT SINGLE name1 INTO wa_zz-werks_txt
FROM t001w WHERE werks EQ wa_zz-werks.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = ls_mod_cells-row_id
i_fieldname = 'WERKS'
i_value = wa_zz-werks.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id = ls_mod_cells"将第index行的fieldname字段的单元格置成不可编辑状态-row_id
i_fieldname
= 'WERKS_TXT'
i_value
= wa_zz-werks_txt.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id
= ls_mod_cells-row_id
i_fieldname
= 'ZLINE_TXT'
i_value
= wa_zz-zline_txt.
"MESSAGE i001(00) WITH '不能选择计划类型为C的!'.
ENDIF.
IF ls_mod_cells-fieldname EQ 'VSTEL'.
SELECT SINGLE vtext INTO wa_zz-vstel_txt
FROM tvstt WHERE vstel EQ tvalue.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id
= ls_mod_cells-row_id
i_fieldname
= 'VSTEL_TXT'
i_value
= wa_zz-vstel_txt.
"MESSAGE i001(00) WITH '不能选择计划类型为C的!'.
ENDIF.
IF ls_mod_cells-fieldname EQ 'MATNR'.
wa_zz
-extwg_txt = ''.
SELECT SINGLE meins INTO wa_zz-meins
FROM mara WHERE matnr EQ tvalue.
SELECT SINGLE extwg INTO wa_zz-extwg
FROM mara WHERE matnr EQ tvalue.
SELECT SINGLE maktx INTO wa_zz-matnr_txt
FROM makt WHERE matnr EQ tvalue.
SELECT SINGLE ewbez INTO wa_zz-extwg_txt
FROM twewt WHERE extwg EQ wa_zz-extwg.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id
= ls_mod_cells-row_id
i_fieldname
= 'MATNR_TXT'
i_value
= wa_zz-matnr_txt.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id
= ls_mod_cells-row_id
i_fieldname
= 'MEINS'
i_value
= wa_zz-meins.
"MESSAGE i001(00) WITH '不能选择计划类型为C的!'.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id
= ls_mod_cells-row_id
i_fieldname
= 'EXTWG'
i_value
= wa_zz-extwg.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id
= ls_mod_cells-row_id
i_fieldname
= 'EXTWG_TXT'
i_value
= wa_zz-extwg_txt.
ENDIF.
IF ls_mod_cells-fieldname EQ 'EXTWG'.
SELECT SINGLE ewbez INTO wa_zz-extwg_txt
FROM twewt WHERE extwg EQ tvalue.
CALL METHOD er_data_changed->modify_cell
EXPORTING
i_row_id
= ls_mod_cells-row_id
i_fieldname
= 'EXTWG_TXT'
i_value
= wa_zz-extwg_txt.
ENDIF.
ENDLOOP.
ENDMETHOD. "HANDLE_MODIFY
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION
DATA gt_event_receiver TYPE REF TO lcl_event_receiver .
FORM get_data.
* CALL FUNCTION 'VIEW_GET_DATA'
* EXPORTING
* view_name = 'V_TVBUR'
* TABLES
* data = gt_xs.
IF p_btype-low NE 'C' AND p_btype-low NE '' .
SELECT *
FROM ztpp_dpp_pool1 AS z
INTO CORRESPONDING FIELDS OF TABLE gt_zz
WHERE ( z~btype IN p_btype )
AND ( z~matnr IN p_matnr ) .
ELSEIF p_btype-low EQ ''.
MESSAGE i001(00) WITH '请选择计划类型!'.
LEAVE TO SCREEN 0.
ELSE.
MESSAGE i001(00) WITH '不能选择产销协调日生产计划类型为C的!'.
LEAVE TO SCREEN 0.
ENDIF.
CLEAR wa_zz.
LOOP AT gt_zz INTO wa_zz.
SELECT SINGLE ltext INTO wa_zz-zline_txt
FROM ztpp_line WHERE zline EQ wa_zz-zline.
SELECT SINGLE name1 INTO wa_zz-werks_txt
FROM t001w WHERE werks EQ wa_zz-werks.
SELECT SINGLE maktx INTO wa_zz-matnr_txt
FROM makt WHERE matnr EQ wa_zz-matnr.
SELECT SINGLE ewbez INTO wa_zz-extwg_txt
FROM twewt WHERE extwg EQ wa_zz-extwg.
SELECT SINGLE vtext INTO wa_zz-vstel_txt
FROM tvstt WHERE vstel EQ wa_zz-vstel.
MODIFY gt_zz FROM wa_zz.
ENDLOOP.
ENDFORM.
FORM show_data_to_alv.
PERFORM set_fcat USING edit.
PERFORM set_layout.
PERFORM show_alv TABLES gt_fcat gt_zz[]
USING gs_layo.
ENDFORM.
FORM frm_edit_alv." TABLES GT.
*DATA: ls_row TYPE lvc_s_cell,
* lt_rows TYPE lvc_t_cell.
* "CLEAR GT_HEADER.
* "CLEAR GT_ITEMS.
* CALL METHOD ref_grid->GET_SELECTED_CELLS
* IMPORTING
* et_index_cells = lt_rows
ENDFORM.
FORM show_changed_alv.
CLEAR gt_fcat[].
PERFORM set_fcat USING edit.
PERFORM set_layout.
PERFORM show_alv TABLES gt_fcat gt_zz[]
USING gs_layo.
PERFORM frm_edit_alv.
ENDFORM.
FORM set_fcat USING edit.
PERFORM csalv_set_fcat USING :
" 'Field' 'Text' 'Edit' 'Zero' 'Type' 'Qfieldname' 'Key' 'Hostspot' 'Emphasize' 'Checkbox'
'BTYPE' '产销协调日生产计划类型' '' '' '' '' '' '' '' '' '' '' '' 'X' 'ZTPP_DPP_POOL1' 'BTYPE' '' '' '',
'MATNR' '物料号' '' '' '' '' '' '' '' '' '' '' '' 'X' 'ZTPP_DPP_POOL1' 'MATNR' '' '' '',
'MATNR_TXT' '物料描述' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '',
'MEINS' '基本计量单位' '' '' '' '' '' '' '' '' '' '' '' 'X' 'MARA' 'MEINS' '' '' '',
'EXTWG' '外部物料组' '' '' '' '' '' '' '' '' '' '' '' 'X' 'MARA' 'EXTWG' '' '' '',
'EXTWG_TXT' '外部物料组描述' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '',
'PDATE' '日期' '' '' '' '' '' '' '' '' '' '' '' 'X' 'ZTPP_DPP_POOL1' 'PDATE' '' '' '',
'VSTEL' '装运点/接收点 ' '' '' '' '' '' '' '' '' '' '' '' 'X' 'LIKP' 'VSTEL' '' '' '',
'VSTEL_TXT' '装运点/接收点描述 ' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '',
'ZBATCH' '用户批次要求' '' '' '' '' '' '' '' '' '' '' '' 'X' 'ZTPP_DPP_POOL1' 'ZBATCH' '' '' '',
'MENGE_A' '总需求数量' '' 'X' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '3',
'MENGE_D' '已排产数量' '' 'X' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '3',
'MENGE_N' '未排产数量' '' 'X' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '3',
'MENGE_X' '修改数量' edit 'X' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '3',
'ZLINE' '生产线' '' '' '' '' '' '' '' '' '' '' '' 'X' 'ZTPP_LINE_LOAD' 'ZLINE' '' '' '',
'ZLINE_TXT' '生产线描述' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '',
'WERKS' '工厂' '' '' '' '' '' '' '' '' '' '' '' 'X' 'ZTPP_DPP_POOL1' 'WERKS' '' '' '',
'WERKS_TXT' '工厂名称' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''.
ENDFORM. " SET_FCAT
FORM set_layout .
gs_layo
-zebra = 'X'.
gs_layo
-stylefname = 'STYLE'.
gs_layo
-cwidth_opt = 'X'.
ENDFORM. " SET_LAYOUT
*&---------------------------------------------------------------------*
FORM csalv_set_fcat USING
p_name
p_text
p_edit
p_zero
p_type
p_qfieldname
p_key
p_hotspot
p_emphasize
p_checkbox
p_do_sum
p_decimals_out
p_no_out
p_f4availabl
p_ref_table
p_ref_field
p_inttype
p_datatype
p_decimals
.
gs_fcat
-fieldname = p_name.
* gs_fcat-reptext_l =
* gs_fcat-selddictxt =
gs_fcat
-reptext = p_text.
gs_fcat
-edit = p_edit.
gs_fcat
-no_zero = p_zero.
gs_fcat
-datatype = p_type.
gs_fcat
-qfieldname = p_qfieldname.
gs_fcat
-key = p_key.
gs_fcat
-hotspot = p_hotspot.
gs_fcat
-emphasize = p_emphasize.
gs_fcat
-checkbox = p_checkbox.
gs_fcat
-do_sum = p_do_sum.
gs_fcat
-decimals_o = p_decimals_out.
gs_fcat
-no_out = p_no_out.
gs_fcat
-f4availabl = p_f4availabl.
gs_fcat
-ref_table = p_ref_table.
gs_fcat
-ref_field = p_ref_field.
gs_fcat
-inttype = p_inttype.
gs_fcat
-datatype = p_datatype.
gs_fcat
-decimals = p_decimals.
APPEND gs_fcat TO gt_fcat.
ENDFORM. "csalv_set_fcat
FORM show_alv TABLES pt_fcat
pt_tab
USING ps_layout.
gs_grid
-edt_cll_cb = 'X'."当屏幕失去焦点时,自动刷新
gt_event
-name = 'CALLER_EXIT'. "slis_ev_caller_exit_at_start事件
gt_event
-form = 'FM_BUTTON'.
APPEND gt_event .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program
= sy-repid
i_callback_user_command
= 'USER_COMMAND'
i_grid_settings
= gs_grid
i_callback_pf_status_set
= 'SET_PF_STATUS'
is_layout_lvc
= ps_layout
it_fieldcat_lvc
= pt_fcat[]
it_events
= gt_event[]
* it_event_exit = gt_event_exit[]
TABLES
t_outtab
= pt_tab
EXCEPTIONS
program_error
= 1
OTHERS = 2.
ENDFORM. "csalv_set_fcat
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield
TYPE slis_selfield.
CASE r_ucomm.
WHEN '&CHANGE'.
IF edit EQ '' .
edit = 'X'.
ELSE.
edit = ''.
ENDIF.
PERFORM show_changed_alv.
WHEN '&BACK'.
LEAVE PROGRAM.
WHEN '&ADD_ROW'.
*
DATA: last_row LIKE sy-tabix.
CLEAR wa_zz.
IF edit EQ 'X'.
APPEND wa_zz TO gt_zz.
DESCRIBE TABLE gt_zz LINES last_row.
PERFORM set_status_enabled USING last_row 'BTYPE'.
PERFORM set_status_enabled USING last_row 'MATNR'.
PERFORM set_status_enabled USING last_row 'PDATE'.
PERFORM set_status_enabled USING last_row 'VSTEL'.
PERFORM set_status_enabled USING last_row 'ZBATCH'.
PERFORM set_status_enabled USING last_row 'MENGE_A'.
PERFORM set_status_enabled USING last_row 'MENGE_D'.
PERFORM set_status_enabled USING last_row 'ZLINE'.
INSERT LINES OF lt_edit INTO TABLE ls_outtab-style.
MODIFY gt_zz INDEX last_row FROM ls_outtab TRANSPORTING style .
CLEAR lt_edit.
CLEAR ls_outtab.
PERFORM show_changed_alv.
ENDIF.
WHEN '&SAVE_DATA'.
DATA:save_rows TYPE STANDARD TABLE OF ztpp_dpp_pool1.
CLEAR wa_zz.
MOVE-CORRESPONDING gt_zz TO save_rows.
MODIFY ztpp_dpp_pool1 FROM TABLE save_rows[].
IF sy-subrc EQ 0.
MESSAGE i001(00) WITH '保存成功!'.
ELSE.
MESSAGE i001(00) WITH '保存失败!'.
ENDIF.
WHEN '&DELE_ROW'.
DATA:ls_row TYPE lvc_s_row,
lt_rows
TYPE lvc_t_row.
DATA:del_rows TYPE STANDARD TABLE OF ty_zz.
CALL METHOD ref_grid->get_selected_rows
IMPORTING
et_index_rows
= lt_rows
* et_row_no =
.
CLEAR wa_zz.
LOOP AT lt_rows INTO ls_row.
READ TABLE gt_zz INTO wa_zz INDEX ls_row-index.
"delete gt_zz INDEX ls_row-index.
"DELETE ztsd007 FROM wa_zz.
APPEND wa_zz TO del_rows.
ENDLOOP.
LOOP AT del_rows INTO wa_zz.
DELETE TABLE gt_zz FROM wa_zz.
ENDLOOP.
CLEAR del_rows.
CLEAR ls_row.
CLEAR lt_rows.
PERFORM show_changed_alv.
WHEN '&IN'.
DATA: filepath LIKE rlgrap-filename.
PERFORM set_file_path CHANGING filepath.
PERFORM frm_upload_from_excel USING filepath.
PERFORM show_changed_alv.
ENDCASE.
ENDFORM.
FORM set_pf_status USING rt_extab TYPE slis_t_extab..
SET PF-STATUS 'STANDARD'.
ENDFORM. "SET_PF_STATUS
FORM fm_button USING e_grid TYPE slis_data_caller_exit.
DATA: lt_f4 TYPE lvc_t_f4,
ls_f4
TYPE lvc_s_f4.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
* EXPORTING
* IR_SALV_FULLSCREEN_ADAPTER =
IMPORTING
* ET_EXCLUDING =
* E_REPID =
* E_CALLBACK_PROGRAM =
* E_CALLBACK_ROUTINE =
e_grid
= ref_grid
* ET_FIELDCAT_LVC =
* ER_TRACE =
* E_FLG_NO_HTML =
* ES_LAYOUT_KKBLO =
* ES_SEL_HIDE =
* ET_EVENT_EXIT =
* ER_FORM_TOL =
* ER_FORM_EOL =
.
* CALL METHOD ref_grid->check_changed_data.
* 设置enter事件
CALL METHOD ref_grid->register_edit_event
EXPORTING
i_event_id
= cl_gui_alv_grid=>mc_evt_enter
EXCEPTIONS
error
= 1
OTHERS = 2.
CREATE OBJECT gt_event_receiver.
SET HANDLER gt_event_receiver->handle_modify FOR ref_grid.
SET HANDLER gt_event_receiver->data_changed FOR ref_grid.
ENDFORM. "FM_BUTTON
FORM frm_upload_from_excel USING p_pa_fname LIKE rlgrap-filename.
* TYPES: BEGIN OF ty_tmp,
* lifnr LIKE ztmm002-lifnr,
* lifnr_name LIKE lfa1-name1,
* werks LIKE ztmm002-werks,
* werks_name LIKE t001w-name1,
* menge LIKE ztmm002-menge,
* meins LIKE ztmm002-meins,
* END OF ty_tmp.
DATA:vkbur_tmp LIKE tvkbt-vkbur,
vkgrp_tmp
LIKE tvkgr-vkgrp.
DATA: git_xls TYPE TABLE OF ty_zz WITH HEADER LINE,
gwa_xls
TYPE ty_zz.
**数据从EXCEL导入程序
DATA: l_exception TYPE REF TO cx_root.
DATA: lit_intern TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE,
l_index
TYPE i,
l_no
TYPE i.
DATA: ls_style TYPE lvc_s_styl.
FIELD-SYMBOLS: <f>.
CHECK p_pa_fname IS NOT INITIAL.
REFRESH: git_xls.
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename
= p_pa_fname
i_begin_col
= 1
i_begin_row
= 2
i_end_col
= 6
i_end_row
= 30000
TABLES
intern
= lit_intern
EXCEPTIONS
inconsistent_parameters
= 1
upload_ole
= 2
OTHERS = 3.
IF sy-subrc = 0.
l_no
= 0.
LOOP AT lit_intern.
MOVE lit_intern-col TO l_index.
ASSIGN COMPONENT l_index OF STRUCTURE gwa_xls TO <f>.
TRY.
MOVE lit_intern-value TO <f>.
CATCH cx_root INTO l_exception.
* gwa_xls-err_info = l_exception->get_text( ).
* gwa_xls-status = icon_led_red.
ENDTRY.
AT END OF row.
ADD 1 TO l_no.
"gwa_xls-no = l_no.
APPEND gwa_xls TO git_xls.
CLEAR gwa_xls.
ENDAT.
ENDLOOP.
ENDIF.
LOOP AT git_xls INTO gwa_xls.
*
* MOVE-CORRESPONDING gwa_xls TO wa_zz.
*
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* input = 1
* IMPORTING
* output = 1.
*
* SELECT SINGLE bezei INTO wa_zz-vkburtext
* FROM tvkbt WHERE vkbur EQ wa_zz-vkbur.
*
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* input = wa_zz-vkgrp
* IMPORTING
* output = wa_zz-vkgrp.
*
* SELECT SINGLE bezei INTO wa_zz-vkgrptext
* FROM tvgrt WHERE vkgrp EQ wa_zz-vkgrp.
*
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* input = wa_zz-kostl
* IMPORTING
* output = wa_zz-kostl.
*
* SELECT SINGLE ltext INTO wa_zz-ltext
* FROM cskt WHERE kostl EQ wa_zz-kostl.
*
* DATA: gt_v_tvbvk LIKE TABLE OF v_tvbvk_assign,
* wa_v_tvbvk LIKE v_tvbvk_assign.
* CALL FUNCTION 'VIEW_GET_DATA'
* EXPORTING
* view_name = 'V_TVBVK_ASSIGN'
* TABLES
* data = gt_v_tvbvk.
*
* READ TABLE gt_v_tvbvk INTO wa_v_tvbvk WITH KEY vkbur = wa_zz-vkbur
* vkgrp = wa_zz-vkgrp.
*
* IF ( wa_v_tvbvk-vkbur IS NOT INITIAL ) AND ( wa_v_tvbvk-vkgrp IS NOT INITIAL ) .
* APPEND wa_zz TO gt_zz.
* ELSE.
* MESSAGE e001(00) WITH '销售办公室:' && wa_zz-vkbur && '与销售组:' &&
* wa_zz-vkgrp && '的组合不存在!'.
* CONTINUE.
*
* ENDIF.
CLEAR wa_zz.
ENDLOOP.
ENDFORM.
FORM set_file_path CHANGING filepath LIKE rlgrap-filename.
FIELD-SYMBOLS: <f> TYPE file_table .
DATA: gd_path TYPE string.
DATA: it_tab TYPE filetable,
gd_subrc
TYPE i.
DATA: ld_filename TYPE string,
ld_path
TYPE string,
ld_fullpath
TYPE string,
ld_result
TYPE i,
gd_file
TYPE c.
DATA:"filepath LIKE rlgrap-filename,
openfile
LIKE rlgrap-filename.
* CALL METHOD cl_gui_frontend_services=>directory_browse
* EXPORTING
* window_title = '文件路径选择'
* initial_folder = 'C:'
* CHANGING
* selected_folder = gd_path.
* CALL METHOD cl_gui_cfw=>flush.
* CONCATENATE gd_path '' INTO filepath.
CALL METHOD cl_gui_frontend_services=>file_open_dialog
EXPORTING
window_title
= 'Select File'
default_filename
= '模板.XLS'
multiselection
= 'X'
CHANGING
file_table
= it_tab
rc
= gd_subrc.
CALL METHOD cl_gui_cfw=>flush.
READ TABLE it_tab ASSIGNING <f> INDEX 1.
IF sy-subrc EQ 0.
filepath
= <f>-filename.
ENDIF.
*CALL METHOD cl_gui_frontend_services=>file_save_dialog
* EXPORTING
* default_extension = 'XLS'
* default_file_name = '产品出库单'
* initial_directory = 'c:/temp/'
* CHANGING
* filename = ld_filename
* path = filepath
* fullpath = ld_fullpath
* user_action = ld_result.
ENDFORM.
FORM frm_path_selected CHANGING filepath LIKE rlgrap-filename.
DATA: gd_path TYPE string.
DATA: it_tab TYPE filetable,
gd_subrc
TYPE i.
DATA: ld_filename TYPE string,
ld_path
TYPE string,
ld_fullpath
TYPE string,
ld_result
TYPE i,
gd_file
TYPE c.
DATA:"filepath LIKE rlgrap-filename,
openfile
LIKE rlgrap-filename.
CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title
= '文件路径选择'
initial_folder
= 'C:'
CHANGING
selected_folder
= gd_path.
CALL METHOD cl_gui_cfw=>flush.
CONCATENATE gd_path '' INTO filepath.
ENDFORM.
FORM frm_download_template USING c_path .
DATA: lv_objdata LIKE wwwdatatab,
lv_obj_name
LIKE wwwdatatab-objid,
lv_destination
LIKE rlgrap-filename,
lv_objid
LIKE sy-repid,
lv_subrc
LIKE sy-subrc.
DATA:l_ret TYPE abap_bool, lv_answer
.
DATA:lv_file TYPE string.
MOVE c_path TO lv_file.
CALL METHOD cl_gui_frontend_services=>file_exist
EXPORTING
file
= lv_file
RECEIVING
result
= l_ret
EXCEPTIONS
cntl_error
= 1
error_no_gui
= 2
wrong_parameter
= 3
not_supported_by_gui
= 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
IF l_ret EQ 'X'.
* 模版已存在,是否覆盖
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
text_question
= '模版已存在,是否覆盖?'
text_button_1
= '是'(001)
text_button_2
= '否'(002)
IMPORTING
answer
= lv_answer
EXCEPTIONS
text_not_found
= 1
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
IF lv_answer EQ 'A'. "取消
EXIT.
ELSEIF lv_answer NE '1'. "否
"p_filepath = c_path.
ENDIF.
ELSE.
lv_answer
= '1'.
ENDIF.
CREATE OBJECT excel 'EXCEL.APPLICATION'.
GET PROPERTY OF excel 'Workbooks' = workbook .
CALL METHOD OF workbook
'Close'.
IF lv_answer EQ '1'.
MOVE 'ZSD_XLS_002' TO lv_obj_name."引用传入到服务器中xls模板
SELECT relid objid
FROM wwwdata
INTO CORRESPONDING FIELDS OF lv_objdata
UP TO 1 ROWS
WHERE srtf2 = 0 AND relid = 'MI'
AND objid = lv_obj_name.
ENDSELECT.
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
key = lv_objdata
destination
= c_path
IMPORTING
rc
= lv_subrc.
* IF lv_subrc = 0.
* p_filepath = c_path.
* ENDIF.
ENDIF.
* CALL METHOD OF
* g_workbook
* 'open'
*
* EXPORTING
* #1 = c_path.
*
* CALL METHOD OF
* g_excel
* 'worksheets' = g_sheet
* EXPORTING
* #1 = 1.
* CALL METHOD OF
* g_sheet
* 'activate'.
"SET PROPERTY OF g_excel 'visible' = 0.
FREE OBJECT sheet.
"FREE OBJECT g_applica.
FREE OBJECT workbook.
FREE OBJECT excel.
ENDFORM. "frm_download_template
FORM set_status_disabled USING index TYPE sy-tabix fieldname TYPE lvc_s_styl-fieldname .
sy
-tabix = index.
ls_edit
-fieldname = fieldname.
ls_edit
-style = cl_gui_alv_grid=>mc_style_disabled.
ls_edit
-style2 = space.
ls_edit
-style3 = space.
ls_edit
-style4 = space.
ls_edit
-maxlen = 10.
INSERT ls_edit INTO TABLE lt_edit.
ENDFORM.
"将第index行的fieldname字段的单元格置成可编辑状态
FORM set_status_enabled USING index TYPE sy-tabix fieldname TYPE lvc_s_styl-fieldname .
sy
-tabix = index.
ls_edit
-fieldname = fieldname.
ls_edit
-style = cl_gui_alv_grid=>mc_style_enabled.
ls_edit
-style2 = space.
ls_edit
-style3 = space.
ls_edit
-style4 = space.
ls_edit
-maxlen = 10.
INSERT ls_edit INTO TABLE lt_edit.
ENDFORM.
ABAP ALV单个单元格状态编辑的更多相关文章
- ABAP ALV单个单元格状态编辑-简单版本
*&---------------------------------------------------------------------* *& Report ZPPR0024 ...
- 【ABAP系列】SAP ABAP OOALV 动态设置单元格可否编辑
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP OOALV 动 ...
- Devexpress WinForm GridControl实现单元格可编辑状态更改
之前做项目的时候,需要实现这样的功能.在gridcontrol中,根据是否修改(checkbox)列的选中和未选中状态来联动另外一列的编辑状态.实现如下: private void gridView1 ...
- Java poi导出设置 Excel某些单元格不可编辑
小白的总结,大神勿喷:需要转载请说明出处,如果有什么问题,欢迎留言 一.需求: 1.某一列 .某一行或某些单元格不可编辑,其他列可以编辑 二.期间遇到的问题 1.无法设置成不可编辑 2.设置为不可编辑 ...
- C# DataGridView中指定的单元格不能编辑
注意:DataGridView控件是从.NET Framework 2.0版本开始追加的. ReadOnly属性的使用 DataGridView内所有的单元格不能编辑 当DataGridView.Re ...
- GridView获取单个单元格的值
0.GridView中的所有数据都存储在Rows集合中,可以通过Rows的Cell属性获取单个单元格的值:如果某个单元格包含其他控件,则通过使用单元格的 Controls 集合,从单元格检索控件:如果 ...
- excel设置单元格不可编辑
把允许编辑的单元格选定,右键-设置单元格格式-保护,把锁定前的对钩去掉.再点工具-保护工作表.这样就可以只让你刚才设定的单元格允许编辑,其他不允许.
- ABAP 将单元格设置编辑状态 FORM
FORM set_style USING fieldname style TYPE string CHANGING ...
- ABAP分享五 ALV修改单元格并将修改数据更新到数据表中示例1
*下面的代码是在alv字段中修改字段的内容,点击保存后就可以保存数据至数据表. TABLES: spfli. DATA: wa_fieldcat TYPE lvc_s_fcat , " 相 ...
随机推荐
- 导入excel错误:外部表不是预期的格式 解决方案
环境:win7+iis7+Office2007 在asp.net网站中导出Excel文件后,再把文件导入到数据库中. 读取Excel文件时,打开连接出错. 错误为:外部表不是预期的格式 解决:检查了一 ...
- 使用python标准库urllib2访问网页
#访问不需要登录的网页import urllib2target_page_url='http://10.224.110.118/myweb/view.jsp' f = urllib2.urlopen( ...
- [译]git status
git status git status命令能展示工作目录和stage区的状态. 使用他你能看到那些修改被staged到了, 哪些没有, 哪些文件没有被Git tracked到. git statu ...
- 由pthread_create引起的段错误
一般线程的结束是由进程内的其他线程来结束的,调用pthread_cancel. 但是需要考虑到被结束线程的性质,一方面,线程是可被结束,也可无法结束,即不响应该信号:另一方面,如果线程是可被结束的,那 ...
- OC第五节 ——点语法和@property
一.setter和getter函数 1.回忆:如何访问对象中的成员变量 2.setter和getter函数的作用 setter 方法: 修改对象的字段/实例变 ...
- Centos7下搭建LAMP平台环境
1.启用Apache2 Centos7默认已经安装httpd服务,只是没有启动.如果你需要全新安装,可以yum install -y httpd 启动服务:systemctl start httpd. ...
- MySQL编译安装
1.准备工作 其官方站点为http://www.mysql.com/ 为了避免发生端口冲突.程序冲突现象.建议先查询MySQL软件的安装情况,确认没有使用以RPM方式安装的mysql-server.m ...
- Java(Android)线程池
1.new Thread的弊端执行一个异步任务你还只是如下new Thread吗? new Thread(new Runnable() { @Override public void run() ...
- Bellman_Ford
Source:http://www.cnblogs.com/Jason-Damon/archive/2012/04/21/2460850.html 摘自百度百科 Bellman-ford算法是求含负权 ...
- HDU 5014 Number Sequence(位运算)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5014 解题报告:西安网赛的题,当时想到一半,只想到从大的开始匹配,做异或运算得到对应的b[i],但是少 ...