alv练习


  1 *&---------------------------------------------------------------------*
  2 *& Report ZALV_SY11
  3 *&---------------------------------------------------------------------*
  4 *&
  5 *&---------------------------------------------------------------------*
  6 REPORT ZALV_SY11.
  7 
  8 *&---------------------------------------------------------------------*
  9 *&  TYPES定義
 10 *&---------------------------------------------------------------------*
 11 *ALV出力データ
 12 TYPES: BEGIN OF typ_out.
 13 
 14 TYPES: sel TYPE char1.                              "選択
 15     INCLUDE STRUCTURE ZTB002_CINEMA_ALV.
 16 
 17 TYPES:END OF typ_out.
 18 
 19 *&---------------------------------------------------------------------*
 20 *&  変数定義
 21 *&---------------------------------------------------------------------*
 22 DATA:
 23   GIT_OUT TYPE STANDARD TABLE OF typ_out.             "ALV出力データ
 24 
 25 *&---------------------------------------------------------------------*
 26 *&  定数定義
 27 *&---------------------------------------------------------------------*
 28 CONSTANTS:
 29   CNS_SEL TYPE slis_fieldname VALUE 'SEL',
 30   CNS_MTY TYPE syst_msgty     VALUE 'E',
 31   CNS_STR TYPE tabname        VALUE 'ZTB002_CINEMA_alv',  "ALV構造名
 32   CNS_ON  TYPE char1          VALUE 'X'.                  "アン
 33 
 34 *&---------------------------------------------------------------------*
 35 *&  INITIALIZATION
 36 *&---------------------------------------------------------------------*
 37 INITIALIZATION.
 38 
 39 * 初期化
 40   PERFORM f_clear_data.
 41 
 42 *&---------------------------------------------------------------------*
 43 *&  START-OF-SELECTION
 44 *&---------------------------------------------------------------------*
 45 START-OF-SELECTION.
 46 
 47 * 主処理
 48   PERFORM f_main_syori.
 49 *&---------------------------------------------------------------------*
 50 *& Form F_CLEAR_DATA
 51 *&---------------------------------------------------------------------*
 52 *& INITIALIZATION
 53 *&---------------------------------------------------------------------*
 54 FORM F_CLEAR_DATA .
 55   CLEAR:
 56     GIT_OUT.                                          "ALV出力データ
 57 
 58 ENDFORM.
 59 *&---------------------------------------------------------------------*
 60 *& Form F_MAIN_SYORI
 61 *&---------------------------------------------------------------------*
 62 *& START-OF-SELECTION
 63 *&---------------------------------------------------------------------*
 64 *& -->  p1        text
 65 *& <--  p2        text
 66 *&---------------------------------------------------------------------*
 67 FORM F_MAIN_SYORI .
 68 
 69 * データの取得処理
 70   PERFORM f_get_data.
 71 
 72 * ALV出力
 73   PERFORM f_alv_out.
 74 
 75 ENDFORM.
 76 *&---------------------------------------------------------------------*
 77 *& Form F_GET_DATA
 78 *&---------------------------------------------------------------------*
 79 *& データの取得処理
 80 *&---------------------------------------------------------------------*
 81 
 82 FORM F_GET_DATA .
 83 
 84   DATA:
 85     LW_OUT TYPE TYP_OUT,
 86     LIT_CINEMA TYPE STANDARD TABLE OF ZTB002_CINEMA_ALV.
 87 
 88   FIELD-SYMBOLS:
 89      TYPE ZTB002_CINEMA_ALV.
 90 
 91   SELECT NAME
 92          ADDRESS
 93     FROM ZTB002_CINEMA
 94     INTO TABLE LIT_CINEMA.
 95 
 96   IF sy-subrc = 0.
 97 
 98     LOOP AT LIT_CINEMA ASSIGNING .
 99 
100         LW_OUT-NAME    =  -NAME.
101         LW_OUT-ADDRESS =  -ADDRESS.
102 
103         APPEND LW_OUT TO GIT_OUT.
104         CLEAR  LW_OUT.
105 
106     ENDLOOP.
107 
108   ELSE.
109 
110     MESSAGE 'NO DATA FOUNT' TYPE 'S' DISPLAY LIKE CNS_MTY.
111     "DB(&1)にデータがありません。
112     LEAVE TO LIST-PROCESSING.
113 
114   ENDIF.
115 
116 ENDFORM.
117 *&---------------------------------------------------------------------*
118 *& Form F_ALV_OUT
119 *&---------------------------------------------------------------------*
120 *& ALV出力
121 *&---------------------------------------------------------------------*
122 FORM F_ALV_OUT.
123 
124   DATA:
125         LW_LAYOUT TYPE slis_layout_alv,
126         LIT_FIELD TYPE slis_t_fieldcat_alv.
127 
128 * 項目カタログの取得処理
129   PERFORM f_get_fieldcat
130     CHANGING
131       LIT_FIELD.
132 
133 * layout
134   LW_LAYOUT-colwidth_optimize = CNS_ON.
135   LW_LAYOUT-zebra             = CNS_ON.
136   LW_LAYOUT-edit              = CNS_ON.
137 
138 * ALV DISPLAY
139   CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
140    EXPORTING
141      i_callback_program                = sy-repid
142      i_callback_pf_status_set          = 'F_SET_STATUS'
143      i_callback_user_command           = 'F_USER_COMMAND'
144      is_layout                         = LW_LAYOUT
145      it_fieldcat                       = LIT_FIELD
146     TABLES
147       t_outtab                          = GIT_OUT
148    EXCEPTIONS
149      program_error                     = 1
150      OTHERS                            = 2
151             .
152 
153   IF sy-subrc <> 0.
154 * 処理なし
155   ELSE.
156 
157     MESSAGE 'FAILED' TYPE 'S' DISPLAY LIKE CNS_MTY.
158     "ALV出力失敗。
159     LEAVE LIST-PROCESSING.
160 
161   ENDIF.
162 ENDFORM.
163 *&---------------------------------------------------------------------*
164 *& Form F_GET_FIELDCAT
165 *&---------------------------------------------------------------------*
166 *& 項目カタログの取得処理
167 *&---------------------------------------------------------------------*
168 FORM F_GET_FIELDCAT
169   CHANGING
170     C_LIT_FIELD TYPE slis_t_fieldcat_alv.
171 
172   DATA:
173     LW_FIELD TYPE slis_fieldcat_alv.
174 
175   CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
176    EXPORTING
177      i_program_name               = sy-repid        "項目カタログ
178      i_structure_name             = CNS_STR
179    CHANGING
180       ct_fieldcat                 = C_LIT_FIELD        "項目カタログ
181    EXCEPTIONS
182      inconsistent_interface       = 1
183      program_error                = 2
184      OTHERS                       = 3
185             .
186   IF sy-subrc = 0.
187 
188     LW_FIELD-col_pos = 1.                           "position
189     LW_FIELD-fieldname = CNS_SEL.                     "选择
190 *    LW_FIELD-seltext_s = TEXT-003.                  "short
191 *    LW_FIELD-seltext_m = TEXT-003.                  "middle
192 *    LW_FIELD-seltext_l = TEXT-003.                  "long
193     LW_FIELD-checkbox  = CNS_ON.                      "checkbox
194 
195     INSERT LW_FIELD INTO C_LIT_FIELD INDEX 1.
196 
197   ELSE.
198     MESSAGE 'FAILED' TYPE 'S' DISPLAY LIKE CNS_MTY.
199     "項目カタログ失败
200     LEAVE TO LIST-PROCESSING.
201 
202   ENDIF.
203 
204 
205 ENDFORM.
206 *----------------------------------------------------------------------*
207 *    FORM F_SET_STAUTS
208 *----------------------------------------------------------------------*
209 FORM f_set_status USING extab TYPE slis_t_extab.
210 
211   SET PF-STATUS  'ZSTATUS_SY' EXCLUDING extab.
212 
213 ENDFORM.
214 *----------------------------------------------------------------------*
215 *    FORM f_user_command
216 *----------------------------------------------------------------------*
217 FORM f_user_command  USING u_ucomm LIKE sy-ucomm
218                            u_selfield TYPE slis_selfield.
219 
220   DATA:
221     LV_ALV     TYPE REF TO cl_gui_alv_grid,             "ALVデータ変更チェック用
222     LW_CINEMA  TYPE ZTB002_CINEMA,
223     LIT_CINEMA TYPE STANDARD TABLE OF ZTB002_CINEMA,
224     LW_OUT     TYPE typ_out.                            "ALV出力
225 
226 
227 * ALVデータ変更チェック用
228   CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
229        IMPORTING
230          E_GRID  = LV_ALV.
231 
232   CALL METHOD LV_ALV->check_changed_data.
233 
234       LOOP AT GIT_OUT into LW_OUT
235          where sel = CNS_ON.
236 
237       LW_CINEMA-NAME    = LW_OUT-NAME.               "影院名称
238       LW_CINEMA-ADDRESS = LW_OUT-ADDRESS.            "影院地址
239 
240       APPEND LW_CINEMA to LIT_CINEMA.
241       CLEAR LW_CINEMA.
242 
243       ENDLOOP.
244 ENDFORM.

相关