**=====================================================================*
*& Report ZPM_RP_09
**=====================================================================*
REPORT zpm_rp_09.
*======================================================================*
* Modify Log History.
*----------------------------------------------------------------------*
*
*No. Modified by Date Transport Description
*--- ----------- ---- --------- -----------
*M1
*======================================================================*
* Tables
*======================================================================*
TABLES:zpm_rp_09.
*======================================================================*
* Constants
*======================================================================*
*======================================================================*
* Types
*======================================================================*
TYPE-POOLS : abap,slis,icon,shlp.
*======================================================================*
* Internal Tables/work areas
*======================================================================*
DATA:BEGIN OF gt_out OCCURS 0,
zzjhbh LIKE zpm_rp_09-zzjhbh, "计划编号
zzhxmh LIKE zpm_rp_09-zzhxmh, "行项目号
werks LIKE zpm_rp_09-werks, "工厂
name1 LIKE zpm_rp_09-name1, "工厂名称
pspnr TYPE zpm_rp_09-pspnr, "大修预算编号
post1 LIKE zpm_rp_09-post1, "大修预算名称
sel(1) TYPE c,
END OF gt_out.
DATA: fieldcat TYPE lvc_t_fcat WITH HEADER LINE.
DATA:gt_excel LIKE TABLE OF alsmex_tabline,
gw_excel LIKE alsmex_tabline.
DATA:BEGIN OF gt_upload OCCURS 0,
zzjhbh LIKE zpm_rp_09-zzjhbh, "计划编号
zzhxmh LIKE zpm_rp_09-zzhxmh, "行项目号
werks LIKE zpm_rp_09-werks, "工厂
name1 LIKE zpm_rp_09-name1, "工厂名称
pspnr LIKE zpm_rp_09-pspnr, "大修预算编号
post1 LIKE zpm_rp_09-post1, "大修预算名称
END OF gt_upload.
*======================================================================*
* Data declarations
*======================================================================*
DATA: wa_layout TYPE lvc_s_layo,
gt_events TYPE slis_t_event WITH HEADER LINE,
gs_event LIKE LINE OF gt_events.
DATA: g_grid TYPE REF TO cl_gui_alv_grid.
DATA:gv_file TYPE rlgrap-filename.
DATA: ref_grid TYPE REF TO cl_gui_alv_grid.
DATA:lw_layout TYPE slis_layout_alv.
*----------------------------------------------------------------------*
* CLASS lcl_event_receiver DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
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:
handle_f4
FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
es_row_no
er_event_data
et_bad_cells.
ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION
*----------------------------------------------------------------------*
* CLASS LCL_EVENT_RECEIVER IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_modify.
DATA stbl TYPE lvc_s_stbl.
DATA:wa_out LIKE gt_out.
LOOP AT gt_out INTO wa_out.
CALL FUNCTION 'CONVERSION_EXIT_ABPSN_INPUT'
EXPORTING
input = wa_out-pspnr
IMPORTING
output = wa_out-pspnr.
SELECT SINGLE post1
INTO wa_out-post1
FROM prps
WHERE posid = wa_out-pspnr.
CALL FUNCTION 'CONVERSION_EXIT_ABPSN_OUTPUT'
EXPORTING
input = wa_out-pspnr
IMPORTING
output = wa_out-pspnr.
MODIFY gt_out FROM wa_out.
ENDLOOP.
* 稳定刷新
stbl-row = 'X'." 基于行的稳定刷新
stbl-col = 'X'." 基于列稳定刷新
CALL METHOD ref_grid->refresh_table_display
EXPORTING
is_stable = stbl.
ENDMETHOD. "HANDLE_MODIFY
*---------------------------------------------------------------------------------------------*
METHOD handle_f4.
* 窗口时间参数的自定义f4检索帮助
PERFORM f4_help_zsjcs USING e_fieldname
es_row_no.
* 设置后,alv稳定刷新
PERFORM refresh_table_alv.
ENDMETHOD. "HANDLE_F4
ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION
DATA gt_event_receiver TYPE REF TO lcl_event_receiver .
*---------------------------------------------------------------*
*DEFINATION
*---------------------------------------------------------------*
DEFINE fill_field.
CLEAR FIELDCAT.
FIELDCAT-FIELDNAME = &1.
FIELDCAT-SCRTEXT_L = &2.
FIELDCAT-CFIELDNAME = &3.
FIELDCAT-OUTPUTLEN = &4.
FIELDCAT-EDIT = &5.
APPEND FIELDCAT.
END-OF-DEFINITION.
*======================================================================*
* Range declarations
*======================================================================*
*======================================================================*
* Input Selection Screen
*======================================================================*
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001.
PARAMETERS:p_werks LIKE zpm_rp_09-werks OBLIGATORY. "工厂
SELECTION-SCREEN END OF BLOCK bl1.
*======================================================================*
* Initialization
*======================================================================*
INITIALIZATION.
*======================================================================*
* At Selection Screen
*======================================================================*
AT SELECTION-SCREEN.
PERFORM frm_authorization_check_swerk. "对工厂进行权限检查
*======================================================================*
* At Selection Screen Output
*======================================================================*
AT SELECTION-SCREEN OUTPUT .
*======================================================================*
* AT SELECTION-SCREEN ON VALUE-REQUEST
*======================================================================*
*at selection-screen on value-request for p_ksgru.
*======================================================================*
* Start of Selection
*======================================================================*
START-OF-SELECTION.
PERFORM frm_get_data.
*======================================================================*
* End of Selection
*======================================================================*
END-OF-SELECTION.
PERFORM frm_display_data.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_data .
SELECT zzjhbh zzhxmh werks name1 pspnr post1
INTO CORRESPONDING FIELDS OF TABLE gt_out
FROM zpm_rp_09
WHERE werks = p_werks.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_display_data .
PERFORM frm_layout.
PERFORM frm_fill_field.
PERFORM frm_alv_display.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_LAYOUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_layout .
CLEAR: wa_layout."它用来定义ALV报表的整体属性
wa_layout-cwidth_opt = 'X'."优化列宽选项是否设置
wa_layout-box_fname = 'SEL'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_FILL_FIELD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_fill_field .
fieldcat-fieldname = 'WERKS'.
fieldcat-scrtext_l = '工厂'.
fieldcat-cfieldname = ''.
fieldcat-outputlen = '20'.
fieldcat-edit = ''.
fieldcat-f4availabl = 'X'.
APPEND fieldcat.
CLEAR fieldcat.
fill_field 'NAME1' '工厂名称' '' '20' ''.
fieldcat-fieldname = 'ZZJHBH'.
fieldcat-scrtext_l = '大修计划号'.
fieldcat-cfieldname = ''.
fieldcat-outputlen = '20'.
fieldcat-edit = ''.
fieldcat-f4availabl = 'X'.
APPEND fieldcat.
CLEAR fieldcat.
fieldcat-fieldname = 'ZZHXMH'.
fieldcat-scrtext_l = '大修计划行项目号'.
fieldcat-cfieldname = ''.
fieldcat-outputlen = '20'.
fieldcat-edit = ''.
fieldcat-f4availabl = 'X'.
APPEND fieldcat.
CLEAR fieldcat.
fieldcat-fieldname = 'PSPNR'.
fieldcat-scrtext_l = '大修预算编号'.
fieldcat-cfieldname = ''.
fieldcat-outputlen = '20'.
fieldcat-edit = ''.
fieldcat-f4availabl = 'X'.
APPEND fieldcat.
CLEAR fieldcat.
fill_field 'POST1' '大修预算名称' '' '20' ''.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_ALV_DISPLAY
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_alv_display .
gt_events-name = 'CALLER_EXIT'. "slis_ev_caller_exit_at_start事件
gt_events-form = 'FM_BUTTON'.
APPEND gt_events.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_user_command = 'USER_COMMAND'
i_callback_pf_status_set = 'PF_STATUS'
is_layout_lvc = wa_layout
it_fieldcat_lvc = fieldcat[]
i_default = 'X'
i_save = 'A'
it_events = gt_events[]
TABLES
t_outtab = gt_out[]
EXCEPTIONS
OTHERS = 2.
IF sy-subrc <> 0.
ENDIF.
ENDFORM. " FRM_ALV_DISPLAY
FORM pf_status USING lt_extab.
SET PF-STATUS 'MENU'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->UCOMM text
* -->RS_SELFIELD text
*----------------------------------------------------------------------*
FORM user_command USING ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield. "#EC CALLED
CASE ucomm.
WHEN 'CHANGE'.
PERFORM frm_change_function.
WHEN 'DELETE'.
PERFORM frm_delete_function.
WHEN 'CREATE'.
PERFORM frm_create_function.
WHEN 'SAVE'.
PERFORM frm_save_function.
WHEN 'IMPORT'.
PERFORM frm_import_function.
ENDCASE.
rs_selfield-refresh = 'X'.
rs_selfield-col_stable = 'X'.
rs_selfield-row_stable = 'X'.
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form FRM_CHANGE_FUNCTION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_change_function .
LOOP AT fieldcat.
IF fieldcat-fieldname = 'NAME1' OR fieldcat-fieldname = 'POST1' OR fieldcat-fieldname = 'WERKS' OR fieldcat-fieldname = 'ZZHXMH'.
fieldcat-edit = ''.
ELSE.
fieldcat-edit = 'X'.
ENDIF.
MODIFY fieldcat TRANSPORTING edit.
ENDLOOP.
PERFORM frm_alv_display.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DELETE_FUNCTION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_delete_function .
DATA: l_answer(1) TYPE c.
READ TABLE gt_out WITH KEY sel = 'X'.
IF sy-subrc <> 0.
MESSAGE '请选择要删除的行!' TYPE 'E'.
ELSE.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = '删除'
text_question = '是否要删除该内容?'
default_button = '2'
display_cancel_button = 'X'
IMPORTING
answer = l_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF l_answer = '1'.
LOOP AT gt_out WHERE sel = 'X'.
DELETE gt_out.
DELETE FROM zpm_rp_09 WHERE zzjhbh = gt_out-zzjhbh AND zzhxmh = gt_out-zzhxmh AND werks = gt_out-werks.
IF sy-subrc = 0.
MESSAGE '删除成功!' TYPE 'S'.
ELSE.
MESSAGE '删除失败!' TYPE 'E'.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_FUNCTION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_create_function .
APPEND INITIAL LINE TO gt_out.
LOOP AT gt_out.
IF gt_out-werks = ''.
SELECT SINGLE werks name1
INTO (gt_out-werks,gt_out-name1)
FROM t001w
WHERE werks = p_werks.
MODIFY gt_out.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SAVE_FUNCTION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_save_function .
DATA: lv_valid TYPE char01.
DATA:lv_mes TYPE string.
DATA lt_save TYPE TABLE OF zpm_rp_09 WITH HEADER LINE.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
e_grid = g_grid.
CALL METHOD g_grid->check_changed_data
IMPORTING
e_valid = lv_valid.
IF lv_valid IS INITIAL.
EXIT.
ENDIF.
REFRESH lt_save.
LOOP AT gt_out.
lt_save-zzjhbh = gt_out-zzjhbh.
lt_save-zzhxmh = gt_out-zzhxmh.
lt_save-werks = gt_out-werks.
lt_save-name1 = gt_out-name1.
lt_save-pspnr = gt_out-pspnr.
lt_save-post1 = gt_out-post1.
APPEND lt_save.
CLEAR lt_save.
ENDLOOP.
MODIFY zpm_rp_09 FROM TABLE lt_save.
COMMIT WORK.
IF sy-subrc = 0.
MESSAGE '保存成功!' TYPE 'S'.
ELSE.
MESSAGE '保存失败!' TYPE 'E'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_IMPORT_FUNCTION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_import_function .
PERFORM frm_get_fiel_name.
PERFORM frm_excel_upload.
PERFORM frm_data_get.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_FIEL_NAME
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_get_fiel_name .
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
mode = 'O'
title = '选取路径'
IMPORTING
filename = gv_file
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_EXCEL_UPLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_excel_upload .
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = gv_file
i_begin_col = 1
i_begin_row = 2
i_end_col = 6
i_end_row = 5000
TABLES
intern = gt_excel
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
REFRESH gt_upload.
SORT gt_excel BY row.
LOOP AT gt_excel INTO gw_excel.
CASE gw_excel-col.
WHEN '001'.
gt_upload-werks = gw_excel-value.
WHEN '002'.
gt_upload-name1 = gw_excel-value.
WHEN '003'.
gt_upload-zzjhbh = gw_excel-value.
WHEN '004'.
gt_upload-zzhxmh = gw_excel-value.
WHEN '005'.
gt_upload-pspnr = gw_excel-value.
WHEN '006'.
gt_upload-post1 = gw_excel-value.
WHEN OTHERS.
ENDCASE.
AT END OF row.
APPEND gt_upload.
CLEAR gt_upload.
ENDAT.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DATA_GET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_data_get .
DATA:lt_import LIKE TABLE OF zpm_rp_09 WITH HEADER LINE.
LOOP AT gt_upload.
MOVE-CORRESPONDING gt_upload TO gt_out.
APPEND gt_out.
CLEAR gt_out.
ENDLOOP.
REFRESH lt_import.
LOOP AT gt_out.
MOVE-CORRESPONDING gt_out TO lt_import.
APPEND lt_import.
CLEAR lt_import.
ENDLOOP.
MODIFY zpm_rp_09 FROM TABLE lt_import.
COMMIT WORK.
IF sy-subrc = 0.
MESSAGE '导入成功!' TYPE 'S'.
ELSE.
MESSAGE '导入失败' TYPE 'E'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& 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 = ref_grid.
* 设置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.
DATA: lv_event_receiver TYPE REF TO lcl_event_receiver,
lt_f4 TYPE lvc_t_f4,
ls_f4 TYPE lvc_s_f4.
ls_f4-fieldname = 'WERKS'. "窗口时间参数(需要定义F4帮助按钮的字段)
ls_f4-register = 'X'.
ls_f4-getbefore = 'X'.
ls_f4-chngeafter = 'X'.
INSERT ls_f4 INTO TABLE lt_f4.
ls_f4-fieldname = 'PSPNR'. "窗口时间参数(需要定义F4帮助按钮的字段)
ls_f4-register = 'X'.
ls_f4-getbefore = 'X'.
ls_f4-chngeafter = 'X'.
INSERT ls_f4 INTO TABLE lt_f4.
ls_f4-fieldname = 'ZZJHBH'. "窗口时间参数(需要定义F4帮助按钮的字段)
ls_f4-register = 'X'.
ls_f4-getbefore = 'X'.
ls_f4-chngeafter = 'X'.
INSERT ls_f4 INTO TABLE lt_f4.
ls_f4-fieldname = 'ZZHXMH'. "窗口时间参数(需要定义F4帮助按钮的字段)
ls_f4-register = 'X'.
ls_f4-getbefore = 'X'.
ls_f4-chngeafter = 'X'.
INSERT ls_f4 INTO TABLE lt_f4.
CREATE OBJECT lv_event_receiver.
SET HANDLER lv_event_receiver->handle_f4 FOR ref_grid.
CALL METHOD ref_grid->register_f4_for_fields
EXPORTING
it_f4 = lt_f4[].
ENDFORM. "FM_BUTTON
*&---------------------------------------------------------------------*
*& Form REFRESH_TABLE_ALV
*&---------------------------------------------------------------------*
* 设置后,alv稳定刷新
*----------------------------------------------------------------------*
FORM refresh_table_alv .
DATA: stbl TYPE lvc_s_stbl.
*
stbl-row = 'X'." 基于行的稳定刷新
stbl-col = 'X'." 基于列稳定刷新
CALL METHOD ref_grid->refresh_table_display
EXPORTING
is_stable = stbl.
ENDFORM. " REFRESH_TABLE_ALV
*&---------------------------------------------------------------------*
*& Form F4_HELP_ZSJCS
*&---------------------------------------------------------------------*
* 窗口时间参数的自定义f4检索帮助
*----------------------------------------------------------------------*
FORM f4_help_zsjcs USING p_fieldname TYPE lvc_fname
p_row_no TYPE lvc_s_roid.
DATA: lt_return TYPE STANDARD TABLE OF ddshretval,
ls_return TYPE ddshretval.
DATA:BEGIN OF lt_t001w OCCURS 0,
werks LIKE t001w-werks,
name1 LIKE t001w-name1,
END OF lt_t001w.
IF p_fieldname = 'WERKS'.
SELECT name1 werks
INTO CORRESPONDING FIELDS OF TABLE lt_t001w
FROM t001w.
SORT lt_t001w BY werks.
DELETE ADJACENT DUPLICATES FROM lt_t001w
COMPARING werks.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'WERKS' "lt内表里面的字段
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'WERKS' "画面上绑定字段
value_org = 'S'
callback_program = sy-repid
TABLES
value_tab = lt_t001w "需要显示帮助的值内表
return_tab = lt_return "返回值
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
READ TABLE gt_out INDEX p_row_no-row_id.
IF lw_layout-edit = 'X'.
READ TABLE lt_return INTO ls_return INDEX 1.
gt_out-werks = ls_return-fieldval.
MODIFY gt_out INDEX p_row_no-row_id
TRANSPORTING werks.
ENDIF.
ENDIF.
DATA:BEGIN OF lt_prps OCCURS 0, "大修预算编号
pspnr LIKE prps-pspnr,
post1 LIKE prps-post1,
END OF lt_prps.
IF p_fieldname = 'PSPNR'.
SELECT pspnr post1
INTO CORRESPONDING FIELDS OF TABLE lt_prps
FROM prps.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'PSPNR' "lt内表里面的字段
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'PSPNR' "画面上绑定字段
value_org = 'S'
callback_program = sy-repid
TABLES
value_tab = lt_prps "需要显示帮助的值内表
return_tab = lt_return "返回值
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
READ TABLE gt_out INDEX p_row_no-row_id.
IF sy-subrc = 0.
READ TABLE lt_return INTO ls_return INDEX 1.
IF sy-subrc = 0.
READ TABLE fieldcat WITH KEY fieldname = ls_return-retfield.
IF fieldcat-edit = 'X'.
gt_out-pspnr = ls_return-fieldval.
MODIFY gt_out INDEX p_row_no-row_id
TRANSPORTING pspnr.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
DATA:BEGIN OF lt_zzjhbh OCCURS 0, "计划编号
zzjhbh TYPE zzjhbh,
zzhxmh TYPE zzhxmh,
zzequnr TYPE zzequnr,
zzktext TYPE zzktext,
END OF lt_zzjhbh.
DATA:lv_index TYPE char02.
IF p_fieldname = 'ZZJHBH'.
READ TABLE gt_out INDEX p_row_no-row_id.
IF sy-subrc = 0.
SELECT zpm001b~zzjhbh zpm001b~zzhxmh zpm001b~zzequnr zpm001b~zzktext
INTO CORRESPONDING FIELDS OF TABLE lt_zzjhbh
FROM zpm001a
INNER JOIN zpm001b
ON zpm001b~zzjhbh = zpm001a~zzjhbh
WHERE zpm001a~zzjhjt = '02'
AND zpm001a~zzjhlx = '03'
AND zpm001a~zzjhdw = gt_out-werks.
ENDIF.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ZZJHBH' "lt内表里面的字段
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'ZZJHBH' "画面上绑定字段
value_org = 'S'
callback_program = sy-repid
multiple_choice = 'X'
callback_form = 'BO_CALLBACK_FORM'
TABLES
value_tab = lt_zzjhbh "需要显示帮助的值内表
return_tab = lt_return "返回值
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
DATA:wa_out LIKE gt_out.
lv_index = p_row_no-row_id - 1.
LOOP AT lt_return INTO ls_return.
READ TABLE fieldcat WITH KEY fieldname = ls_return-retfield.
IF fieldcat-edit = 'X' AND fieldcat-fieldname = 'ZZJHBH'.
wa_out-zzjhbh = ls_return-fieldval.
ELSEIF fieldcat-fieldname = 'ZZHXMH'.
wa_out-zzhxmh = ls_return-fieldval.
ENDIF.
IF ls_return-fieldname = 'F0002'.
lv_index = lv_index + 1.
ENDIF.
IF wa_out-zzjhbh IS NOT INITIAL AND wa_out-zzhxmh IS NOT INITIAL.
MODIFY gt_out FROM wa_out INDEX lv_index TRANSPORTING zzjhbh zzhxmh.
CLEAR wa_out.
ENDIF.
ENDLOOP.
ENDIF.
DATA:BEGIN OF lt_zzhxmh OCCURS 0, "行项目号
zzjhbh LIKE zpm001b-zzjhbh,
zzhxmh LIKE zpm001b-zzhxmh,
END OF lt_zzhxmh.
IF p_fieldname = 'ZZHXMH'.
READ TABLE gt_out INDEX p_row_no-row_id.
IF sy-subrc = 0.
SELECT zzhxmh zzjhbh
INTO CORRESPONDING FIELDS OF TABLE lt_zzhxmh
FROM zpm001b
WHERE zzjhbh = gt_out-zzjhbh.
ENDIF.
ENDIF.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ZZHXMH' "lt内表里面的字段
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'ZZHXMH' "画面上绑定字段
value_org = 'S'
callback_program = sy-repid
TABLES
value_tab = lt_zzhxmh "需要显示帮助的值内表
return_tab = lt_return "返回值
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc = 0.
READ TABLE gt_out INDEX p_row_no-row_id.
IF sy-subrc = 0.
READ TABLE lt_return INTO ls_return INDEX 1.
IF sy-subrc = 0.
READ TABLE fieldcat WITH KEY fieldname = ls_return-retfield.
IF fieldcat-edit = 'X'.
gt_out-zzhxmh = ls_return-fieldval.
MODIFY gt_out INDEX p_row_no-row_id
TRANSPORTING zzhxmh.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " F4_HELP_
FORM bo_callback_form
TABLES record_tab STRUCTURE seahlpres
CHANGING shlp TYPE shlp_descr_t
callcontrol LIKE ddshf4ctrl.
DATA: interface LIKE LINE OF shlp-interface,
fp LIKE LINE OF shlp-fieldprop.
CLEAR interface.
CLEAR fp.
fp-shlpoutput = 'X'.
MODIFY shlp-fieldprop FROM fp TRANSPORTING shlpoutput
WHERE shlpoutput = space.
READ TABLE shlp-interface INTO interface INDEX 1.
interface-shlpfield+4(1) = '1'. "第一个位置。调用F4函数本身就已经有内容,所以会造成选择后面的语言或者是物料描述的时候,物料代码无法更改,所以此处用MODIFY 就可以解决这个问题
interface-valfield = 'ZZJHBH'.
APPEND interface TO shlp-interface.
MODIFY shlp-interface FROM interface INDEX 1.
interface-shlpfield+4(1) = '2'. "这里的数字 代表F4搜索帮助弹出的ALV对话框,字段的位置,比如此行是显示F4弹出的alv第二列的内容
interface-valfield = 'ZZHXMH'.
APPEND interface TO shlp-interface.
ENDFORM. "bo_callback_form
*&---------------------------------------------------------------------*
*& Form FRM_AUTHORIZATION_CHECK_SWERK
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_authorization_check_swerk .
DATA:lv_message TYPE char50.
DATA:BEGIN OF lt_werks OCCURS 0,
werks LIKE t001w-werks,
END OF lt_werks.
SELECT werks
INTO CORRESPONDING FIELDS OF TABLE lt_werks
FROM t001w
WHERE werks = p_werks.
LOOP AT lt_werks.
AUTHORITY-CHECK OBJECT 'I_IWERK'
ID 'TCD' DUMMY
ID 'IWERK' FIELD lt_werks-werks.
IF sy-subrc <> 0.
CLEAR lv_message.
CONCATENATE '你没有该工厂' lt_werks-werks '的权限!' INTO lv_message.
MESSAGE lv_message TYPE 'E'.
CLEAR lt_werks.
ENDIF.
ENDLOOP.
ENDFORM.
---------------------
作者:鹏翼丶
来源:CSDN
原文:https://blog.csdn.net/liupengpeng1109/article/details/50409551
版权声明:本文为博主原创文章,转载请附上博文链接!