程序模板(20210603笔记)

例子程序1 excel批导

例子程序2(最最简单alv下传按钮)

例子程序3(最最简单alv按钮 改底表)

例子程序4(最简单alv报表,最简单)

 

例子程序1 excel批导

zmmrsk00500



Description: 物料主数据 ***** 批导 


*&---------------------------------------------------------------------*
 *& Report  ZMMRSK00500
 *&
 *&**********************************************************************
 *& PROGRAM NAME        :                          *
 *& Apply Author        : panjin                                        *
 *& Author              : panjin                                        *
 *& Started on          : 2021-                                        *
 *& Transaction         : ZMMRSK00500                                   *
 *& Program type        : REPORT                                        *
 *& SAP Release         : ECC 6.0                                       *
 *&                                                                     *
 *&*&********************************************************************
 *& REVISION LOG                                                        *
 *&                                                                     *
 *& LOG# DATE       AUTHOR    DESCRIPTION                               *
 *& ---- ----       ------    -----------                               *
 * ****  create 202101
 *&**********************************************************************



REPORT ZMMRSK00500 MESSAGE-ID ZMMSK01.

 include ZMMRSK00500_top.
 include ZMMRSK00500_srm.
 include ZMMRSK00500_alv.
 include ZMMRSK00500_pai.
 include ZMMRSK00500_pbo.
 include ZMMRSK00500_f01.


zmmrsk00500_alv

zmmrsk00500_f01


*&---------------------------------------------------------------------*
 *&  包含                ZMMRSK00500_F01
 *&---------------------------------------------------------------------*
 *&---------------------------------------------------------------------*
 *&      Form  FM_GET_FILE
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *      <--P_P_FNAME  text
 *----------------------------------------------------------------------*

FORM frm_get_file CHANGING CV_fname.
   DATA: l_work_rc          TYPE i.          "Return Code
   DATA: l_lstr_filter    TYPE string.
   DATA: lt_ltb_file_table   TYPE filetable,
         ls_lwk_file_table  TYPE filename.

   CONCATENATE 'Excel 2007-2019(*.XLSX)|*.XLSX|' 'Excel(*.XLSX)|*.XLSX'
          INTO l_lstr_filter.
   CALL METHOD cl_gui_frontend_services=>file_open_dialog
     EXPORTING
       window_title            = 'Select the file '


*     DEFAULT_EXTENSION       =


      default_filename        = ''
       file_filter             = l_lstr_filter
       initial_directory       = 'C:'


*     MULTISELECTION          =
 *     WITH_ENCODING           =


    CHANGING
       file_table              = lt_ltb_file_table
       rc                      = l_work_rc


*     USER_ACTION             =
 *     FILE_ENCODING           =


    EXCEPTIONS
       file_open_dialog_failed = 1
       cntl_error              = 2
       error_no_gui            = 3
       not_supported_by_gui    = 4
       OTHERS                  = 5.
   IF sy-subrc = 0.
     LOOP AT lt_ltb_file_table INTO ls_lwk_file_table.
       MOVE ls_lwk_file_table TO CV_fname.
       EXIT.
     ENDLOOP.
   ELSE.
     MESSAGE text-t10 TYPE 'E'.
   ENDIF.
 ENDFORM. " FM_GET_FILE


*&---------------------------------------------------------------------*
 *&      Form  FM_GET_FILEPATH
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM frm_get_filepath .
   DATA:L_window_title TYPE STRING,
        L_file_filter TYPE STRING,
        l_filename TYPE string,
          l_path TYPE string,
          l_fullpath TYPE string,
           l_title TYPE string.

   g_co_objid = 'ZMMRSK00500'.

   L_WINDOW_TITLE = text-t27.
   L_file_filter = text-t28 .
   L_TITLE = text-t29.

   CALL METHOD cl_gui_frontend_services=>file_save_dialog
     EXPORTING
       window_title         = L_window_title  " '模板保存为EXCEL' "text-t27 "'模板保存为EXCEL'
       default_extension    = 'xlsx'
       default_file_name    = l_title


*     file_filter          = '.xls'


      file_filter          = l_file_filter  "'Excel 文件 (*.XLSX)'  "text-t28  " 'Excel 文件 (*.XLS)'
       initial_directory    = 'C:/'


*     DEFAULT_FILE_NAME    = p_filename


    CHANGING
       filename             = l_filename
       path                 = l_path
       fullpath             = g_fullpath
     EXCEPTIONS
       cntl_error           = 1
       error_no_gui         = 2
       not_supported_by_gui = 3
       OTHERS               = 4.
   IF sy-subrc <> 0.
     STOP.
   ENDIF.
   IF g_fullpath IS INITIAL.
     MESSAGE text-t11 TYPE 'E'.
   ENDIF.
 ENDFORM. " FM_GET_FILEPATH


*&---------------------------------------------------------------------*
 *&      Form  FM_DOWNM
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM frm_downm .
   DATA:  ls_indcatortxt TYPE string,
          l_filename TYPE sapb-sappfad.
   DATA: lo_objdata LIKE wwwdatatab,
         lo_mime LIKE w3mime,
         ls_destination LIKE rlgrap-filename,
         ls_objnam TYPE string,
         l_rc LIKE sy-subrc,
         ls_errtxt TYPE string.

   l_filename = g_fullpath.
   ls_indcatortxt = text-t03. "'程序正在下载模板'.
   CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
     EXPORTING
       percentage = 0
       text       = ls_indcatortxt.
   CONCATENATE g_co_objid '.XLSX' INTO ls_objnam.
   CONDENSE ls_objnam NO-GAPS.
   SELECT SINGLE relid objid FROM wwwdata
     INTO CORRESPONDING FIELDS OF lo_objdata
     WHERE srtf2    = 0
       AND relid    = 'MI'
       AND objid    = g_co_objid.
   IF sy-subrc NE 0 OR lo_objdata-objid EQ space.
     CONCATENATE text-t04 ls_objnam text-t05 INTO ls_errtxt.
     MESSAGE E000(ZMMSK01) WITH ls_errtxt.
   ENDIF.
   ls_destination   = g_fullpath.
   CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
     EXPORTING
       key         = lo_objdata
       destination = ls_destination
     IMPORTING
       rc          = l_rc.
   IF l_rc NE 0.
     CONCATENATE text-t04 ls_objnam text-t06 INTO ls_errtxt.
     MESSAGE e000(ZMMSK01) with ls_errtxt.
   ENDIF.
 ENDFORM. " FM_DOWNM


*&---------------------------------------------------------------------*
 *&      Form  FM_FILE_READ
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM frm_file_read .
   CLEAR: gt_iexcel,   "
          gt_iexcel[], "
          gt_itab.  "

   call function 'ZALSM_EXCEL_TO_INTERNAL_TABLE'
     EXPORTING
       filename                = p_fname
       i_begin_col             = g_cns_excel_scol
       i_begin_row             = g_cns_excel_srow
       i_end_col               = g_cns_excel_ecol
       i_end_row               = g_cns_excel_erow
     TABLES
       intern                  = gt_iexcel
     EXCEPTIONS
       inconsistent_parameters = 1
       upload_ole              = 2
       OTHERS                  = 3.
   IF sy-subrc <> 0.
     MESSAGE text-t07 TYPE 'E'.
     EXIT.
   ENDIF.
   SORT gt_iexcel BY row col.
   CLEAR gt_itab.

   PERFORM frm_read_ycl.

   IF gt_itab[] IS INITIAL.
     MESSAGE text-t08  TYPE 'E'.
     EXIT.
   ELSE.
   ENDIF.

 ENDFORM. " FM_FILE_READ

 

zmmrsk00500_pai




*&---------------------------------------------------------------------*
 *&  包含                ZMMRSK00500_PAI
 *&---------------------------------------------------------------------*

 *&---------------------------------------------------------------------*
 *&      Form  user_command
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *      -->IN_UCOMM     text
 *      -->IN_SELFIELD  text
 *----------------------------------------------------------------------*


FORM FRM_user_command USING PV_ucomm LIKE sy-ucomm
                          PS_selfield TYPE slis_selfield.
   PS_selfield-refresh = 'X'.
   DATA: lr_grid  TYPE REF TO cl_gui_alv_grid.
   CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
     IMPORTING
       e_grid = lr_grid.
   CALL METHOD lr_grid->check_changed_data.

   CASE PV_ucomm.
     WHEN '&SEL'.
       PERFORM frm_SELECT.
     WHEN '&DESEL'.
       PERFORM frm_DESELECT.
     WHEN '&IC1'.


*      IF in_selfield-fieldname = 'MATNR' .
 *        SET PARAMETER ID 'MAT' FIELD in_selfield-value.
 *        CALL TRANSACTION 'CS03' .
 *      ENDIF.



    WHEN '&UPLOAD'.
       PERFORM frm_upload.
   ENDCASE.
 ENDFORM. "user_command


*&---------------------------------------------------------------------*
 *&      Form  FRM_SELECT
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM FRM_SELECT .
   LOOP AT gt_itab  WHERE SEL = 'X'.
     gt_itab-chkbox = 'X'.
     MODIFY gt_itab  TRANSPORTING chkbox.
   ENDLOOP.
 ENDFORM. " FRM_SELECT


*&---------------------------------------------------------------------*
 *&      Form  FRM_DESELECT
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM FRM_DESELECT .
   LOOP AT gt_itab  WHERE SEL = 'X'.
     gt_itab-chkbox = ''.
     MODIFY gt_itab  TRANSPORTING chkbox.
   ENDLOOP.
 ENDFORM. " FRM_DESELECT


*&---------------------------------------------------------------------*
 *&      Form  FRM_UPLOAD
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM FRM_UPLOAD .
   data:lt_ZMMTSK00090 type TABLE OF ZMMTSK00090 WITH HEADER LINE.
   LOOP AT gt_itab WHERE chkbox = 'X'.
     MOVE-CORRESPONDING gt_itab to lt_ZMMTSK00090.   "
     append lt_ZMMTSK00090.  "
     CLEAR:lt_ZMMTSK00090.  "
   ENDLOOP.
   IF sy-subrc ne 0.
     MESSAGE text-e01 type 'E'.   "请先选择
    exit.
   ENDIF.

   IF lt_ZMMTSK00090[] is not INITIAL.
     MODIFY ZMMTSK00090 FROM TABLE lt_ZMMTSK00090.
     commit WORK.
   ENDIF.
   REFRESH:lt_ZMMTSK00090[].

   LOOP AT gt_itab WHERE chkbox = 'X'.
     gt_itab-icon  = ICON_GREEN_LIGHT.
     modify gt_itab.
   ENDLOOP.
   MESSAGE text-t30 type 'S'.
 ENDFORM. " FRM_UPLOAD

 
 

zmmrsk00500_pbo



*&---------------------------------------------------------------------*
 *&  包含                ZMMRSK00500_PBO
 *&---------------------------------------------------------------------*
 *&---------------------------------------------------------------------*
 *&      Form  DISPLAY
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM frm_display .
   PERFORM frm_build_fact.
   PERFORM frm_set_layout.
   PERFORM frm_display_alv.
 ENDFORM. " DISPLAY


*&---------------------------------------------------------------------*
 *&      Form  BUILD_FACT
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM frm_build_fact .
   DEFINE def_fieldcat.
     clear gs_fieldcat.
     gs_fieldcat-fieldname = &1.
     gs_fieldcat-reptext = &2.
     gs_fieldcat-edit = &3.
     gs_fieldcat-no_zero = &4.
     gs_fieldcat-fix_column(1) = &5.
     gs_fieldcat-just = &6.


**    if &1 = 'C'.
 **      gw_fieldcat-checkbox = 'X'.
 **    endif.
 *    if &1 = 'BANFN'.
 *      gw_fieldcat-hotspot = 'X'.
 *      gw_fieldcat-emphasize = 'C500'.
 *    endif.


    append gs_fieldcat to gt_fieldcat.
   END-OF-DEFINITION.
   REFRESH gt_fieldcat[].
   gs_fieldcat-fieldname = 'CHKBOX'.
   gs_fieldcat-datatype = 'CHAR'.
   gs_fieldcat-intlen = 1.
   gs_fieldcat-COLTEXT = text-t24.
   gs_fieldcat-checkbox = 'X'.
   gs_fieldcat-edit = 'X'.
   gs_fieldcat-FIX_COLUMN = 'X'.
   append gs_fieldcat to gt_fieldcat.
   CLEAR gs_fieldcat.

   def_fieldcat   'ICON'  text-T01    ''  'X'  ''  ''.
   def_fieldcat   'MATNR_FR'  text-T12    ''  'X'  ''  ''. 
  def_fieldcat   'MATNR_TO'  text-T13    ''  ''  ''  ''. 
  def_fieldcat   'KLART'  text-T14    ''  ''  ''  ''.  "
  def_fieldcat   'CLASS'  text-T15    ''  ''  ''  ''.  
  def_fieldcat   'ZSFZJ'  text-T16    ''  ''  ''  ''.  
  def_fieldcat   'ZAUTO'  text-T17   ''  ''  ''  ''.   
  def_fieldcat   'LGORT'  text-T18    ''  ''  ''  ''.   
  def_fieldcat   'UMLGO'  text-T19    ''  ''  ''  ''.   
  def_fieldcat   'BWART'  text-T20    ''  ''  ''  ''.   
  def_fieldcat   'XCHPF_H'  text-T21    ''  ''  ''  ''.   
  def_fieldcat   'XCHPF_X' text-T22   ''  ''  ''  ''.    
  def_fieldcat   'ZNOTE'  text-T23    ''  ''  ''  ''.    
ENDFORM. " BUILD_FACT


*&---------------------------------------------------------------------*
 *&      Form  SET_LAYOUT
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM frm_set_layout .
   gs_layo-zebra = 'X'.
   gs_layo-cwidth_opt = 'X'.
   gs_layo-box_fname      = 'SEL'.
 ENDFORM. " SET_LAYOUT


*&---------------------------------------------------------------------*
 *&      Form  DISPLAY_ALV
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM frm_display_alv .
   g_repid = sy-repid.
   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
     EXPORTING
       i_callback_pf_status_set = 'FRM_STATUS'
       i_callback_user_command  = 'FRM_USER_COMMAND'


*     i_callback_top_of_page   = 'FM_ALV_TOP'


      i_callback_program       = g_repid
       it_fieldcat_lvc          = gt_fieldcat
       is_layout_lvc            = gs_layo
     TABLES
       t_outtab                 = gt_itab[].
   IF sy-subrc <> 0.
     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
   ENDIF.
 ENDFORM. " DISPLAY_ALV



*&---------------------------------------------------------------------*
 *&      Form  set_pf_status
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *      -->RT_EXTAB   text
 *----------------------------------------------------------------------*


FORM frm_status USING ps_extab TYPE slis_t_extab.
   SET PF-STATUS '0100' EXCLUDING ps_extab.
 ENDFORM. "set_pf_status


*&---------------------------------------------------------------------*
 *&      Form  READ_YCL
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM frm_read_ycl .
   DATA:lv_col TYPE i.
   FIELD-SYMBOLS:<l_field> type any.

   LOOP AT gt_iexcel.
     CASE gt_iexcel-col.
       WHEN '0001'.
         IF strlen( gt_iexcel-value ) <= 16.
           CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
             EXPORTING
               input  = gt_iexcel-value
             IMPORTING
               output = gt_itab-MATNR_FR.
         ELSE.
           gt_itab-MATNR_FR = gt_iexcel-value.
         ENDIF.

       WHEN '0002'.
         IF strlen( gt_iexcel-value ) <= 16.
           CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
             EXPORTING
               input  = gt_iexcel-value
             IMPORTING
               output = gt_itab-MATNR_TO.
         ELSE.
           gt_itab-MATNR_TO = gt_iexcel-value.
         ENDIF.
       WHEN OTHERS.
         CONDENSE gt_iexcel-value NO-GAPS.
         TRANSLATE gt_iexcel-value TO UPPER CASE.

         lv_col = gt_iexcel-col + 1.
         ASSIGN COMPONENT lv_col OF STRUCTURE gt_itab TO <l_field>.
         IF sy-subrc = 0.
           TRY.
               <l_field> = gt_iexcel-value.
             CATCH cx_sy_conversion_no_number."非数值
          ENDTRY.
         ENDIF.
     ENDCASE.

     AT END OF row.


*      if sy-subrc ne 0.
 *        gt_itab-msg = '此组件在此工厂不存在 '.
 *        gt_itab-ICON = '@0A@'.
 *      endif.


      gt_itab-CHKBOX = 'X'.
       APPEND  gt_itab.
       CLEAR: gt_itab.
     ENDAT.
   ENDLOOP.
 ENDFORM. " READ_YCL

 
 

zmmrsk00500_srm

*&---------------------------------------------------------------------*
 *&  包含                ZMMRSK00500_SRM
 *&---------------------------------------------------------------------*


INITIALIZATION.
   g_functxt-icon_id = icon_export.
   g_functxt-icon_text = TEXT-T25. "'下载EXCEL模板'.
   g_functxt-quickinfo = TEXT-T25.  "'下载EXCEL模板'.
   sscrfields-functxt_01 = g_functxt.

 AT SELECTION-SCREEN.
   CASE sscrfields-ucomm.
     WHEN 'FC01'.
       PERFORM frm_get_filepath.
       PERFORM frm_downm.
     WHEN 'ONLI'.
       IF p_fname IS INITIAL.
         SET CURSOR FIELD 'P_FNAME'.
         MESSAGE text-t09 TYPE 'E'.
       ENDIF.
   ENDCASE.

 AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_fname.
   PERFORM frm_get_file CHANGING p_fname.

 START-OF-SELECTION.
   PERFORM frm_file_read.
   PERFORM frm_display.

zmmrsk00500_top



*&---------------------------------------------------------------------*
 *&  包含                ZMMRSK00500_TOP
 *&---------------------------------------------------------------------*

TYPE-POOLS: slis,icon.
 TABLES:sscrfields.

 TYPES: BEGIN OF ty_data.
 include structure ZMMTSK00090.
 TYPES:
        icon(30),
        msg  TYPE  string,
        chkbox(1),
        sel(1),
         END OF ty_data.

 DATA: gt_itab TYPE TABLE OF ty_data WITH HEADER LINE,
       gt_itab_tmp TYPE TABLE OF ty_data WITH HEADER LINE.

 DATA: g_co_objid TYPE wwwdatatab-objid .
 data : g_cns_excel_scol TYPE i VALUE 1, "EXCEL START COL
             g_cns_excel_srow   TYPE i VALUE 2,      "EXCEL START ROW
             g_cns_excel_ecol   TYPE i VALUE 50,     "EXCEL END COL
             g_cns_excel_erow   TYPE i VALUE 50000.   "EXCEL END ROW

 DATA:BEGIN OF gt_iexcel OCCURS 0.
         INCLUDE STRUCTURE alsmex_tabline.
 DATA:END OF gt_iexcel.

 DATA: g_functxt TYPE smp_dyntxt,
       g_fullpath TYPE string.
 DATA: gt_fieldcat TYPE lvc_t_fcat,
       gs_fieldcat   TYPE  lvc_s_fcat,
       g_repid       TYPE  sy-repid VALUE sy-repid,
       gs_layo       TYPE  lvc_s_layo.
 SELECTION-SCREEN: FUNCTION KEY 1.

 SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t26.
 PARAMETERS:p_fname TYPE rlgrap-filename.
 SELECTION-SCREEN END OF BLOCK b2.

 
 

 

 

例子程序2   最最简单alv下传按钮 me




**&*********************************************************************
 *& PROGRAM NAME :******                *
 *& Module Name :  *                                                 *
 *& Apply Author :                                                      *
 *& Author :                                                          *
 *& Started on : 2020-10                                             *
 *& Transaction : ZWMESK00640                                          *
 *& Program type : Reprot                                               *
 *& SAP Release : 46C/ECC 6.0                                           *
 *& Program ID : ZWMESK00640                                           *
 *& Program Description : ********        *
 *&*&********************************************************************
 *& REVISION LOG                                                        *
 *& LOG# DATE AUTHOR DESCRIPTION                                        *
 *& ---- ---- ------ ----------- ----------- ----------- ----------- ---*
 *& 0001 2020-10   ****  Initial Creation                             *
 *&**********************************************************************



REPORT ZWMESK00640.
 TABLES: ZMMTSK00110,ZMMTHQ00062.
 type-pools:slis.

 data:BEGIN OF gt_itab OCCURS 10.
         include structure ZMMTSK00110.
 data:chkbox(1),
          sel(1),
          icon(30),
          id        TYPE int4.
 data:end of gt_itab.

 data:gt_ZMMTSK00100 LIKE TABLE OF ZMMTSK00100 WITH HEADER LINE.

 data: gt_exclude type ui_functions .


*==alv


DATA: gt_fieldcat TYPE lvc_t_fcat, "SLIS_T_FIELDCAT_ALV .
       gs_fieldcat         TYPE lvc_s_fcat,
       gs_layout           TYPE lvc_s_layo,  "SLIS_LAYOUT_ALV ,
       gs_glay             TYPE lvc_s_glay.
 DATA: gt_events TYPE slis_t_event,
       gt_event_exit       TYPE slis_t_event_exit,
       gt_list_comments    TYPE slis_t_listheader,
       gt_excluding        TYPE slis_t_extab.
 DATA: gs_events LIKE LINE OF gt_events,
       gs_event_exit       LIKE LINE OF gt_event_exit,
       gs_list_comments    LIKE LINE OF gt_list_comments,
       gs_excluding        LIKE LINE OF gt_excluding.
 DATA: g_repid LIKE sy-repid ,
       g_title TYPE lvc_title,
       g_html_top_of_page TYPE  slis_formname.

 selection-screen begin of block bl1 with frame title text-001.
 select-options s_werks for ZMMTSK00110-werks memory id WRK.
 select-options s_mblnr for ZMMTSK00110-mblnr .
 select-options s_datum for ZMMTSK00110-datum.
 select-options s_FLAG for ZMMTSK00110-FLAG.
 selection-screen end of block bl1.

 START-OF-SELECTION.

   PERFORM frm_get_data.
   PERFORM frm_process_data.
   PERFORM frm_alv.

 FORM frm_get_data .
   SELECT * FROM ZMMTSK00110
     INTO CORRESPONDING FIELDS OF TABLE gt_itab
   WHERE werks in s_werks
     and mblnr in s_mblnr
     and datum in s_datum
     and flag in s_flag.
   sort gt_itab by DATUM DESCENDING UZEIT DESCENDING.

   SELECT * INTO CORRESPONDING FIELDS OF TABLE gt_ZMMTSK00100     "收件人表
    FROM ZMMTSK00100
   WHERE del ne 'X'.
 ENDFORM.


*&---------------------------------------------------------------------*
 *&      Form  FRM_PROCESS_DATA
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM FRM_PROCESS_DATA .
   LOOP AT gt_itab.
     gt_itab-id = sy-tabix.


*    SELECT SINGLE name1
 *      INTO gt_itab-werks_txt
 *    FROM t001w
 *     WHERE werks eq gt_itab-werks.


    modify gt_itab.
     CLEAR:gt_itab.
   ENDLOOP.
 ENDFORM.

 FORM frm_alv.
   DEFINE  alv_field.
     clear gs_fieldcat.
     gs_fieldcat-fieldname = &1.
     gs_fieldcat-coltext = &2.
     gs_fieldcat-fix_column = &3.
     gs_fieldcat-emphasize  = &4.
     gs_fieldcat-edit_mask  = &5.
     gs_fieldcat-no_zero    = &6.
     IF &1 EQ 'MBLNR'.
       gs_fieldcat-HOTSPOT  = 'X'..
     ENDIF.
     append gs_fieldcat to gt_fieldcat.
   END-OF-DEFINITION.

   refresh gt_events.
   refresh gt_fieldcat.

   gs_fieldcat-fieldname = 'CHKBOX'.
   gs_fieldcat-datatype = 'CHAR'.
   gs_fieldcat-intlen = 1.
   gs_fieldcat-coltext =  text-t36 . "'选择'.
   gs_fieldcat-checkbox = 'X'.
   gs_fieldcat-edit = 'X'.
   gs_fieldcat-fix_column = 'X'.
   append gs_fieldcat to gt_fieldcat.
   CLEAR gs_fieldcat.



*  alv_field 'ID'     text-t09  ''  ''  ''  '' .    "


  alv_field 'ICON'     text-t10  ''  ''  ''  '' .    "
   alv_field 'WERKS'     text-t01  ''  ''  ''  '' .    "
   alv_field 'MBLNR'     text-t02  ''  ''  ''  '' .   "
   alv_field 'MJAHR'     text-t03  ''  ''  ''  '' .   "
   alv_field 'MB_DATUM'     text-t14  ''  ''  ''  '' .   "
   alv_field 'MB_BUDAT'     text-t15  ''  ''  ''  '' .   "
   alv_field 'FLAG'     text-t04  ''  ''  ''  '' .
   alv_field 'DATUM'     text-t05  ''  ''  ''  '' .
   alv_field 'UZEIT'     text-t06  ''  ''  ''  '' .
   alv_field 'UNAME'     text-t07  ''  ''  ''  '' .
   alv_field 'MSG'     text-t08  ''  ''  ''  '' .

   g_repid = sy-repid.
   gs_layout-cwidth_opt = 'X'.


*  gs_layout-sel_mode = 'A'.


  gs_layout-box_fname      = 'SEL'.

   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
     EXPORTING
       i_callback_pf_status_set = 'FRM_SET_STATUS'
       i_callback_program       = g_repid
       i_callback_user_command  = 'FRM_USER_COMMAND'


*     I_GRID_TITLE             = G_TITLE


      i_grid_settings          = gs_glay
       is_layout_lvc            = gs_layout
       it_fieldcat_lvc          = gt_fieldcat
       i_default                = 'X'
       i_save                   = 'X'
     TABLES
       t_outtab                 = gt_itab[]
     EXCEPTIONS
       program_error            = 1
       others                   = 2.
   if sy-subrc <> 0.
     message id sy-msgid type sy-msgty number sy-msgno
          with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
   endif.
 ENDFORM.



*---------------------------------------------------------------------*
 *       FORM fRM_user_command                                         *
 *---------------------------------------------------------------------*
 *       ........                                                      *
 *---------------------------------------------------------------------*
 *  -->  pv_ucomm                                                       *
 *  -->  ps_rs_selfield                                                 *
 *---------------------------------------------------------------------*


FORM frm_user_command USING pv_ucomm TYPE sy-ucomm
                             ps_selfield TYPE slis_selfield .
   ps_selfield-refresh = 'X'.
   data:lo_grid type ref to cl_gui_alv_grid.
   CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
     IMPORTING   "
       e_grid = lo_grid.   "
   CALL METHOD lo_grid->check_changed_data.  "

   CASE pv_ucomm.
     WHEN '&SEL'.
       PERFORM frm_select.
     WHEN '&DESEL'.
       PERFORM frm_deselect.
     WHEN '&TRANS'.
       PERFORM frm_trans .
     WHEN '&IC1'.
       check not ps_selfield-value is initial.
       case ps_selfield-fieldname.
         when 'MBLNR'.
           set parameter id 'MBN' field ps_selfield-value.
           call transaction 'MB03' and skip first screen.
       endcase.
     WHEN OTHERS.
   ENDCASE.
 endform.


*---------------------------------------------------------------------*
 *       FORM FRM_SET_STATUS                                           *
 *---------------------------------------------------------------------*
 *       ........                                                      *
 *---------------------------------------------------------------------*
 *  -->  P_EXTAB                                                       *
 *---------------------------------------------------------------------*


FORM frm_set_status USING pt_extab TYPE slis_t_extab.
   SET PF-STATUS '0100'.
 ENDFORM. "FRM_SET_STATUS


*&---------------------------------------------------------------------*
 *&      Form  FRM_SELECT
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM frm_select .
   LOOP AT gt_itab  WHERE sel = 'X'.
     gt_itab-chkbox = 'X'.
     MODIFY gt_itab  TRANSPORTING chkbox.
   ENDLOOP.
 ENDFORM. " FRM_SELECT


*&---------------------------------------------------------------------*
 *&      Form  FRM_DESELECT
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM frm_deselect .
   LOOP AT gt_itab  WHERE sel = 'X'.
     gt_itab-chkbox = ''.
     MODIFY gt_itab  TRANSPORTING chkbox.
   ENDLOOP.
 ENDFORM. " FRM_DESELECT


*&---------------------------------------------------------------------*
 *&      Form  FRM_TRANS
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM FRM_TRANS .
   data:lt_matnr type TABLE OF ZMMSSK00060 WITH HEADER LINE,
        lt_matnr_tmp type TABLE OF ZMMSSK00060 WITH HEADER LINE.
   data:ls_wa type ZMMTSK00110.

   data:BEGIN OF lt_mblnr OCCURS 10,
      mblnr type mblnr,
      mjahr type mjahr,
   END OF lt_mblnr.
   data:lv_flag type CHAR1,
         lv_msg type CHAR200.

   LOOP AT gt_itab WHERE chkbox = 'X'.
     lt_mblnr-mblnr =  gt_itab-mblnr.
     lt_mblnr-mjahr =  gt_itab-mjahr.
     append lt_mblnr.
     CLEAR:lt_mblnr.
   ENDLOOP.
   IF sy-subrc ne 0.
     MESSAGE text-e01 type 'E'.   "请先选择
    exit.
   ENDIF.


   IF lt_mblnr[] is not INITIAL.
     SELECT mseg~MBLNR mseg~MJAHR mseg~matnr mseg~charg
       mseg~erfmg as menge mseg~erfme as meins mseg~bwart
       mkpf~USNAM
        INTO CORRESPONDING FIELDS OF TABLE lt_matnr
        FROM mseg INNER JOIN mkpf on mkpf~mblnr eq mseg~mblnr and mseg~mjahr eq mkpf~mjahr
        FOR ALL ENTRIES IN lt_mblnr
      where mseg~mblnr eq lt_mblnr-mblnr
        and mseg~mjahr eq lt_mblnr-mjahr
        and mseg~shkzg eq 'H'
        and mseg~werks eq 'SKM1'
        and mseg~MATNR ne space
        and mseg~charg  ne space
        .
   ENDIF.

   LOOP AT lt_matnr.
     SELECT SINGLE * FROM ZMMTHQ00062
       WHERE matnr eq lt_matnr-matnr
       .
     IF sy-subrc ne 0 or ZMMTHQ00062-FERTH is  INITIAL.
       delete lt_matnr.
     ENDIF.
   ENDLOOP.
   sort lt_matnr by matnr charg meins mblnr mjahr.
   delete ADJACENT DUPLICATES FROM lt_matnr COMPARING ALL FIELDS.

   LOOP AT gt_itab WHERE chkbox = 'X'.
     MOVE-CORRESPONDING gt_itab to ls_wa.
     lt_matnr_tmp[] = lt_matnr[].
     delete lt_matnr_tmp WHERE mblnr ne gt_itab-mblnr or mjahr ne gt_itab-mjahr.

     call function 'ZFM_MM_SK_MAIL'
       EXPORTING
         IS_WA      = ls_wa
       IMPORTING
         EV_FLAG    = LV_FLAG
         EV_MSG     = LV_MSG
       TABLES
         IT_MATNR   = lt_matnr_tmp
         IT_ADDRESS = gt_ZMMTSK00100.


     gt_itab-flag = lv_flag.

     IF lv_msg is not INITIAL.
       gt_itab-icon =  icon_led_red.
       gt_itab-msg = lv_msg.
     else.
       gt_itab-icon  = ICON_GREEN_LIGHT.
     ENDIF.
     modify gt_itab.
     CLEAR:gt_itab,lv_msg,lv_flag.
     REFRESH:lt_matnr_tmp[].
   ENDLOOP.

   SUBMIT rsconn01 WITH mode = 'INT'  "立即执行
                "WITH output = 'X'
                 AND RETURN.
   REFRESH:lt_mblnr[],lt_matnr[].
 ENDFORM. " FRM_TRANS

 

 

例子程序3(最最简单alv按钮 改底表me)




**&*********************************************************************
 *& PROGRAM NAME : *******                               *
 *& Module Name :  ****                                                  *
 *& Author :       *****                                               *
 *& Started on :   2021.01                                           *
 *& Transaction :  ZPSRSK00010                                        *
 *& Program type : REPROT                                               *
 *& Program ID :   ZPSRSK00010                                        *
 *& Program Description : sm30 维护 Z 表                     *
 *&*&********************************************************************
 *& LOG#  DATE        AUTHOR    DESCRIPTION                             *
 *& ----  ------     ------     -----                                   *
 *
 *&**********************************************************************




REPORT ZPSRSK00030.
 TABLES: PRPS.
 type-pools:slis.

 data:BEGIN OF gt_itab OCCURS 10.
         INCLUDE STRUCTURE prps.
 data:chkbox(1),
          sel(1),
          icon(30),
          id        TYPE int4.
 data:end of gt_itab.



*data:gt_ZMMTSK00100 LIKE TABLE OF ZMMTSK00100 WITH HEADER LINE.



data: gt_exclude type ui_functions .


*==alv


DATA: gt_fieldcat TYPE lvc_t_fcat, "SLIS_T_FIELDCAT_ALV .
       gs_fieldcat         TYPE lvc_s_fcat,
       gs_layout           TYPE lvc_s_layo,  "SLIS_LAYOUT_ALV ,
       gs_glay             TYPE lvc_s_glay.
 DATA: gt_events TYPE slis_t_event,
       gt_event_exit       TYPE slis_t_event_exit,
       gt_list_comments    TYPE slis_t_listheader,
       gt_excluding        TYPE slis_t_extab.
 DATA: gs_events LIKE LINE OF gt_events,
       gs_event_exit       LIKE LINE OF gt_event_exit,
       gs_list_comments    LIKE LINE OF gt_list_comments,
       gs_excluding        LIKE LINE OF gt_excluding.
 DATA: g_repid LIKE sy-repid ,
       g_title TYPE lvc_title,
       g_html_top_of_page TYPE  slis_formname.

 selection-screen begin of block bl1 with frame title text-001.
 select-options s_WBS for PRPS-POSID.
 selection-screen end of block bl1.

 START-OF-SELECTION.

   PERFORM frm_get_data.
   PERFORM frm_process_data.
   PERFORM frm_alv.

 FORM frm_get_data .
   SELECT * FROM prps
     INTO CORRESPONDING FIELDS OF TABLE gt_itab
   WHERE POSID in s_wbs
     and werks like 'SK%'
     .
 ENDFORM.


*&---------------------------------------------------------------------*
 *&      Form  FRM_PROCESS_DATA
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM FRM_PROCESS_DATA .
   LOOP AT gt_itab.
     gt_itab-id = sy-tabix.


*    SELECT SINGLE name1
 *      INTO gt_itab-werks_txt
 *    FROM t001w
 *     WHERE werks eq gt_itab-werks.


    modify gt_itab.
     CLEAR:gt_itab.
   ENDLOOP.
 ENDFORM.

 FORM frm_alv.
   DEFINE  alv_field.
     clear gs_fieldcat.
     gs_fieldcat-fieldname = &1.
     gs_fieldcat-coltext = &2.
     gs_fieldcat-fix_column = &3.
     gs_fieldcat-emphasize  = &4.
     gs_fieldcat-edit  = &5.
     gs_fieldcat-no_zero    = &6.
     IF &1 EQ 'POSID'.
       gs_fieldcat-HOTSPOT  = 'X'..
     ENDIF.
     append gs_fieldcat to gt_fieldcat.
   END-OF-DEFINITION.

   refresh gt_events.
   refresh gt_fieldcat.

   gs_fieldcat-fieldname = 'CHKBOX'.
   gs_fieldcat-datatype = 'CHAR'.
   gs_fieldcat-intlen = 1.
   gs_fieldcat-coltext =  text-t00 . "'选择'.
   gs_fieldcat-checkbox = 'X'.
   gs_fieldcat-edit = 'X'.
   gs_fieldcat-fix_column = 'X'.
   append gs_fieldcat to gt_fieldcat.
   CLEAR gs_fieldcat.

   alv_field 'ICON'     text-t01  ''  ''  ''  '' .    "
   alv_field 'POSID'     text-t02  ''  ''  ''  '' .    "
   alv_field 'POST1'     text-t03  ''  ''  ''  '' .   "
   alv_field 'CUSFILD40'     text-t04  ''  ''  'X'  '' .   "
   alv_field 'CUSFILD43'     text-t05  ''  ''  'X'  '' .   "
   alv_field 'CUSFILD91'     text-t06  ''  ''  'X'  '' .   "
   alv_field 'CUSFILD92'     text-t07  ''  ''  'X'  '' .
   alv_field 'CUSFILD94'     text-t08  ''  ''  'X'  '' .
   alv_field 'XMZTZ'     text-t09  ''  ''  'X'  '' .
   alv_field 'EJDW'     text-t10  ''  ''  'X'  '' .


   g_repid = sy-repid.
   gs_layout-cwidth_opt = 'X'.


*  gs_layout-sel_mode = 'A'.


  gs_layout-box_fname      = 'SEL'.

   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
     EXPORTING
       i_callback_pf_status_set = 'FRM_SET_STATUS'
       i_callback_program       = g_repid
       i_callback_user_command  = 'FRM_USER_COMMAND'


*     I_GRID_TITLE             = G_TITLE


      i_grid_settings          = gs_glay
       is_layout_lvc            = gs_layout
       it_fieldcat_lvc          = gt_fieldcat
       i_default                = 'X'
       i_save                   = 'X'
     TABLES
       t_outtab                 = gt_itab[]
     EXCEPTIONS
       program_error            = 1
       others                   = 2.
   if sy-subrc <> 0.
     message id sy-msgid type sy-msgty number sy-msgno
          with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
   endif.
 ENDFORM.



*---------------------------------------------------------------------*
 *       FORM fRM_user_command                                         *
 *---------------------------------------------------------------------*
 *       ........                                                      *
 *---------------------------------------------------------------------*
 *  -->  pv_ucomm                                                       *
 *  -->  ps_rs_selfield                                                 *
 *---------------------------------------------------------------------*


FORM frm_user_command USING pv_ucomm TYPE sy-ucomm
                             ps_selfield TYPE slis_selfield .
   ps_selfield-refresh = 'X'.
   data:lo_grid type ref to cl_gui_alv_grid.
   CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
     IMPORTING   "
       e_grid = lo_grid.   "
   CALL METHOD lo_grid->check_changed_data.  "

   CASE pv_ucomm.
     WHEN '&SEL'.
       PERFORM frm_select.
     WHEN '&DESEL'.
       PERFORM frm_deselect.
     WHEN '&TRANS'.
       PERFORM frm_edit .

     WHEN '&IC1'.
       check not ps_selfield-value is initial.
       case ps_selfield-fieldname.
         when 'POSID'.
           set parameter id 'CAC' field 'SINO'.
           set parameter id 'PSP' field ''.
           set parameter id 'PRO' field ps_selfield-VALUE.
           call transaction 'CJ20' and skip first screen.
       endcase.
     WHEN OTHERS.
   ENDCASE.
 endform.


*---------------------------------------------------------------------*
 *       FORM FRM_SET_STATUS                                           *
 *---------------------------------------------------------------------*
 *       ........                                                      *
 *---------------------------------------------------------------------*
 *  -->  P_EXTAB                                                       *
 *---------------------------------------------------------------------*


FORM frm_set_status USING pt_extab TYPE slis_t_extab.
   SET PF-STATUS '0100'.
 ENDFORM. "FRM_SET_STATUS


*&---------------------------------------------------------------------*
 *&      Form  FRM_SELECT
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM frm_select .
   LOOP AT gt_itab  WHERE sel = 'X'.
     gt_itab-chkbox = 'X'.
     MODIFY gt_itab  TRANSPORTING chkbox.
   ENDLOOP.
 ENDFORM. " FRM_SELECT


*&---------------------------------------------------------------------*
 *&      Form  FRM_DESELECT
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM frm_deselect .
   LOOP AT gt_itab  WHERE sel = 'X'.
     gt_itab-chkbox = ''.
     MODIFY gt_itab  TRANSPORTING chkbox.
   ENDLOOP.
 ENDFORM. " FRM_DESELECT


*&---------------------------------------------------------------------*
 *&      Form  FRM_TRANS
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM FRM_EDIT .
   data:lw_prps type prps.
   BREAK PJPAN.
   LOOP AT gt_itab WHERE chkbox = 'X'
     and ( CUSFILD40 is not INITIAL
     or  CUSFILD43 is not INITIAL
     or  CUSFILD91 is not INITIAL
     or  CUSFILD92 is not INITIAL
     or  CUSFILD94 is not INITIAL
          or XMZTZ is not INITIAL
           or EJDW is not INITIAL ).
   ENDLOOP.
   IF sy-subrc ne 0.
     MESSAGE text-e01 type 'E'.   "请先选择
    exit.
   ENDIF.


   LOOP AT gt_itab WHERE chkbox = 'X'.
     SELECT SINGLE * INTO lw_prps
       FROM prps
     where PSPNR eq gt_itab-PSPNR.

     IF sy-subrc = 0.
       IF gt_itab-CUSFILD40 is not INITIAL.
         lw_prps-CUSFILD40 = gt_itab-CUSFILD40.
       ENDIF.

       IF gt_itab-CUSFILD43 is not INITIAL.
         lw_prps-CUSFILD43 = gt_itab-CUSFILD43.
       ENDIF.

       IF gt_itab-CUSFILD91 is not INITIAL.
         lw_prps-CUSFILD91 = gt_itab-CUSFILD91.
       ENDIF.

       IF gt_itab-CUSFILD92 is not INITIAL.
         lw_prps-CUSFILD92 = gt_itab-CUSFILD92.
       ENDIF.

       IF gt_itab-CUSFILD94 is not INITIAL.
         lw_prps-CUSFILD94 = gt_itab-CUSFILD94.
       ENDIF.

       IF gt_itab-XMZTZ is not INITIAL.
         lw_prps-XMZTZ = gt_itab-XMZTZ.
       ENDIF.

       IF gt_itab-EJDW is not INITIAL.
         lw_prps-EJDW = gt_itab-EJDW.
       ENDIF.

       modify prps FROM lw_prps.
       commit WORK.   ""#EC CI_SEL_NESTED
       gt_itab-icon = ICON_GREEN_LIGHT.

     else.
       gt_itab-icon  = icon_led_red.
     ENDIF.

     modify gt_itab.
     CLEAR:gt_itab,lw_prps.
   ENDLOOP.
 ENDFORM. " FRM_TRANS


 

 

例子程序4(zqmrsk00010 ,最简单alv报表,最简单 me)



*&---------------------------------------------------------------------*
 *& PROGRAM NAME        : Quality inspection result                                *
 *& Module Name         : QM                                            *
 *& Apply Author        : ***                                      *
 *& Author              : *****                                       *
 *& Started on          : 2020-10-20                                    *
 *& Transaction         : ZQMRSK00010                               *
 *& Program type        : Interactive Report                            *
 *& SAP Release         : 46C/ECC 6.0                                   *
 *& Program ID          : ZQMRSK00010                                  *
 *& Program Description : Quality inspection result                              *
 *&---------------------------------------------------------------------*
 *& REVISION LOG                                                        *
 *&                                                                     *
 *& LOG#     DATE        AUTHOR       DESCRIPTION                       *
 *& ----   ----------  ----------   ----------------                    *
 *& 0001   2020-10-20    panjin    Initial Creation(移植)              *
 *&                                 原事务码:*****                   *
 *&---------------------------------------------------------------------*



REPORT zqmrsk00010.
 TABLES: zqmtsk00010.
 TYPE-POOLS:slis.

 DATA:BEGIN OF gt_itab OCCURS 10.
         include structure zqmtsk00010.
 DATA:werks_txt(100).
 DATA:END OF gt_itab.

 DATA: gt_exclude TYPE ui_functions .


*==alv


DATA: gt_fieldcat TYPE lvc_t_fcat, "SLIS_T_FIELDCAT_ALV .
       gs_fieldcat         TYPE lvc_s_fcat,
       gs_layout           TYPE lvc_s_layo,  "SLIS_LAYOUT_ALV ,
       gs_glay             TYPE lvc_s_glay.
 DATA: gt_events TYPE slis_t_event,
       gt_event_exit       TYPE slis_t_event_exit,
       gt_list_comments    TYPE slis_t_listheader,
       gt_excluding        TYPE slis_t_extab.
 DATA: gs_events LIKE LINE OF gt_events,
       gs_event_exit       LIKE LINE OF gt_event_exit,
       gs_list_comments    LIKE LINE OF gt_list_comments,
       gs_excluding        LIKE LINE OF gt_excluding.
 DATA: g_repid LIKE sy-repid ,
       g_title TYPE lvc_title,
       g_html_top_of_page TYPE  slis_formname.

 SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-001.


*SELECT-OPTIONS s_werks FOR zqmtsk00010-werks MEMORY ID wrk.
 *SELECT-OPTIONS s_charg FOR zqmtsk00010-charg .
 *SELECT-OPTIONS s_budat FOR zqmtsk00010-budat.
 *SELECT-OPTIONS s_crdat FOR zqmtsk00010-crdat.



SELECT-OPTIONS: s_cbeln FOR zqmtsk00010-cbeln,
                 s_werks FOR zqmtsk00010-werks DEFAULT 'SKH1' MEMORY ID wrk,
                 s_charg FOR zqmtsk00010-charg,
                 s_atnam FOR zqmtsk00010-atnam,
                 s_pmtnr FOR zqmtsk00010-pmtnr,
                 s_atwrt FOR zqmtsk00010-atwrt,
                 s_inval FOR zqmtsk00010-inval,
                 s_budat FOR zqmtsk00010-budat,
                 s_uzeit FOR zqmtsk00010-uzeit,
                 s_crdat FOR zqmtsk00010-crdat DEFAULT sy-datum,
                 s_crtim FOR zqmtsk00010-crtim.
 SELECTION-SCREEN SKIP.

 PARAMETERS: p_lines TYPE i DEFAULT 500.

 SELECTION-SCREEN END OF BLOCK bl1.

 START-OF-SELECTION.

   PERFORM frm_get_data.
   PERFORM frm_process_data.
   PERFORM frm_alv.



*&---------------------------------------------------------------------*
 *&      Form  frm_get_data
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*


FORM frm_get_data .


************
 ************
 ** 获取数据


  SELECT *
     FROM zqmtsk00010
     UP TO p_lines ROWS
     INTO CORRESPONDING FIELDS OF TABLE gt_itab
   WHERE cbeln IN s_cbeln
     AND werks IN s_werks
     AND charg IN s_charg
     AND atnam IN s_atnam
     AND pmtnr IN s_pmtnr
     AND atwrt IN s_atwrt
     AND inval IN s_inval
     AND budat IN s_budat
     AND uzeit IN s_uzeit
     AND crdat IN s_crdat
     AND crtim IN s_crtim.

   SORT gt_itab BY cbeln.
 ENDFORM. "frm_get_data


*&---------------------------------------------------------------------*
 *&      Form  FRM_PROCESS_DATA
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*
 *  -->  p1        text
 *  <--  p2        text
 *----------------------------------------------------------------------*


FORM frm_process_data .
   LOOP AT gt_itab.
     SELECT SINGLE name1
       INTO gt_itab-werks_txt
     FROM t001w
      WHERE werks EQ gt_itab-werks.
     MODIFY gt_itab.
     CLEAR:gt_itab.
   ENDLOOP.
 ENDFORM. "FRM_PROCESS_DATA



*&---------------------------------------------------------------------*
 *&      Form  frm_alv
 *&---------------------------------------------------------------------*
 *       text
 *----------------------------------------------------------------------*


FORM frm_alv.
   DEFINE  alv_field.
     clear gs_fieldcat.
     gs_fieldcat-fieldname = &1.
     gs_fieldcat-coltext = &2.
     gs_fieldcat-fix_column = &3.
     gs_fieldcat-emphasize  = &4.
     gs_fieldcat-edit_mask  = &5.
     gs_fieldcat-no_zero    = &6.
     append gs_fieldcat to gt_fieldcat.
   END-OF-DEFINITION.

   REFRESH gt_events.
   REFRESH gt_fieldcat.
   alv_field 'WERKS'     text-t01  ''  ''  ''  '' .    "
   alv_field 'WERKS_TXT' text-t02  ''  ''  ''  '' .   "
   alv_field 'CBELN'     text-t03  ''  ''  ''  '' .   "
   alv_field 'ATNAM'     text-t04  ''  ''  ''  '' .
   alv_field 'PMTNR'     text-t05  ''  ''  ''  '' .
   alv_field 'CHARG'     text-t06  ''  ''  ''  '' .
   alv_field 'ATWRT'     text-t07  ''  ''  ''  '' .
   alv_field 'INVAL'     text-t08  ''  ''  ''  '' .
   alv_field 'BUDAT'     text-t09  ''  ''  ''  '' .
   alv_field 'UZEIT'     text-t10  ''  ''  ''  '' .
   alv_field 'CRDAT'     text-t11  ''  ''  ''  '' .
   alv_field 'CRTIM'     text-t12  ''  ''  ''  '' .

   g_repid = sy-repid.
   gs_layout-cwidth_opt = 'X'.
   gs_layout-sel_mode = 'A'.

   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
     EXPORTING
       i_callback_pf_status_set = 'FRM_SET_STATUS'
       i_callback_program       = g_repid
       i_callback_user_command  = 'FRM_USER_COMMAND'


*     I_GRID_TITLE             = G_TITLE


      i_grid_settings          = gs_glay
       is_layout_lvc            = gs_layout
       it_fieldcat_lvc          = gt_fieldcat
       i_default                = 'X'
       i_save                   = 'X'
     TABLES
       t_outtab                 = gt_itab[]
     EXCEPTIONS
       program_error            = 1
       OTHERS                   = 2.
   IF sy-subrc <> 0.
     MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
   ENDIF.

 ENDFORM. "frm_alv



*---------------------------------------------------------------------*
 *       FORM fRM_user_command                                         *
 *---------------------------------------------------------------------*
 *       ........                                                      *
 *---------------------------------------------------------------------*
 *  -->  pv_ucomm                                                       *
 *  -->  ps_rs_selfield                                                 *
 *---------------------------------------------------------------------*


FORM frm_user_command USING pv_ucomm TYPE sy-ucomm
                           ps_rs_selfield TYPE slis_selfield .
   ps_rs_selfield-refresh = 'X' .
   ps_rs_selfield-col_stable = 'X'."基于行的稳定刷新
  ps_rs_selfield-row_stable = 'X'." 基于列稳定刷新

  CASE pv_ucomm.
     WHEN '&IC1'.
     WHEN OTHERS.
   ENDCASE.
 ENDFORM. "FRM_USER_COMMAND


*---------------------------------------------------------------------*
 *       FORM FRM_SET_STATUS                                           *
 *---------------------------------------------------------------------*
 *       ........                                                      *
 *---------------------------------------------------------------------*
 *  -->  P_EXTAB                                                       *
 *---------------------------------------------------------------------*


FORM frm_set_status USING pt_extab TYPE slis_t_extab.
   SET PF-STATUS '0100'.
 ENDFORM. "FRM_SET_STATUS

 

Supongo que te gusta

Origin blog.csdn.net/lianxiangpanjin/article/details/117488456
Recomendado
Clasificación