在ALV中添加搜索帮助并返回多列值

来源:互联网 发布:人工智能吧 编辑:程序博客网 时间:2024/06/14 19:27
**=====================================================================**& 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_F4ENDCLASS.                    "LCL_EVENT_RECEIVER IMPLEMENTATIONDATA 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_DISPLAYFORM 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_formTABLES record_tab STRUCTURE seahlpresCHANGING shlp TYPE shlp_descr_tcallcontrol 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.
0 0
原创粉丝点击