ooalv
************************************************************************ * プログラムID: ZALVOOTEST_S07 * 機能名 : ALV * 機能概要 : ALV * 作成者 : 孫烨 * 作成日付 : 2021/05/10 * 移送番号 : HPIK901908 ************************************************************************ REPORT zalvoo_s07. *&---------------------------------------------------------------------* *& 変数定義 *&---------------------------------------------------------------------* DATA: ok_code TYPE sy-ucomm, v_cont TYPE REF TO cl_gui_custom_container, "カスタムコントロー v_grid TYPE REF TO cl_gui_alv_grid, "ALVクラス w_marc TYPE zmarc_s07, "品目のプラントデータ w_mara TYPE zmara_s07, "品目マスタ t_marc TYPE STANDARD TABLE OF zmarc_s07, "品目のプラントデータ t_mara TYPE STANDARD TABLE OF zmara_s07, "品目マスタ t_out TYPE STANDARD TABLE OF zmara_alvs07_01, "品目マスタ w_out TYPE zmara_alvs07_01, "品目マスタ t_exc TYPE ui_functions, "標準機能 w_exc TYPE ui_func, "標準機能 t_sort TYPE lvc_t_sort, "排序 w_sort TYPE lvc_s_sort, "排序 t_filter TYPE lvc_t_filt, "フィルタ基準 w_filter TYPE lvc_s_filt, "フィルタ基準 s_lay TYPE lvc_s_layo, "レイアウト w_var TYPE disvariant, "レイアウト t_field TYPE lvc_t_fcat. "項目カタログ *&---------------------------------------------------------------------* *& INITIALIZATION *&---------------------------------------------------------------------* INITIALIZATION. * 初始化処理 PERFORM f_clear_data. *&---------------------------------------------------------------------* *& START-OF-SELECTION *&---------------------------------------------------------------------* START-OF-SELECTION. *主処理 PERFORM f_main_syori. *&---------------------------------------------------------------------* *& Form F_CLEAR_DATA *&---------------------------------------------------------------------* *& 初始化 *&---------------------------------------------------------------------* FORM f_clear_data . CLEAR: t_out, "品目マスタOOALV w_out, "品目マスタOOALV s_lay, "レイアウト t_sort, "ソート基準内表 w_sort, "ソート基準構造 t_filter, "フィルタ基準内表 w_filter, "フィルタ基準構造 t_exc, "標準機能内表 w_exc, "標準機能構造 t_mara, "品目マスタ w_mara, "品目マスタ w_marc, "品目のプラントデータ t_marc. "品目のプラントデータ ENDFORM. *&---------------------------------------------------------------------* *& Form F_MAIN_SYORI *&---------------------------------------------------------------------* *& 主処理 *&---------------------------------------------------------------------* FORM f_main_syori . * データの取得処理 PERFORM f_get_data. *データの出力処理 PERFORM f_out_data. ENDFORM. *&---------------------------------------------------------------------* *& Form F_GET_DATA *&---------------------------------------------------------------------* *& データの取得処理 *&---------------------------------------------------------------------* FORM f_get_data . DATA: tl_mara TYPE STANDARD TABLE OF zmara_s07_01, "品目マスタ wl_mara TYPE zmara_alvs07_01. "ALV出力データ FIELD-SYMBOLS: <fs_mara> TYPE zmara_s07_01. "品目マスタ SELECT a~zmatnr "品目コード a~zmaktx "品目テキスト a~zmtart "品目タイプ a~zbrgew "総重量 a~zgewei "重量単位 a~zlvorm "品目削除フラグ c~zwerks "プラント c~zvkglg "在庫販売価格 c~zwaers "通貨コード a~zcpudt "登録日付 a~zcputm "登録時刻 a~zcsnam "登録者 a~zupudt "更新日付 a~zuputm "更新時刻 a~zusnam "更新者 FROM zmara_s07 AS a INNER JOIN zmarc_s07 AS c ON a~zmatnr = c~zmatnr INTO TABLE tl_mara. IF sy-subrc = 0. LOOP AT tl_mara ASSIGNING <fs_mara>. wl_mara-zmatnr = <fs_mara>-zmatnr. "品目コード wl_mara-zmaktx = <fs_mara>-zmaktx. "品目テキスト wl_mara-zmtart = <fs_mara>-zmtart. "品目タイプ wl_mara-zbrgew = <fs_mara>-zbrgew. "総重量 wl_mara-zgewei = <fs_mara>-zgewei. "重量単位 wl_mara-zlvorm = <fs_mara>-zlvorm. "品目削除フラグ wl_mara-zwerks = <fs_mara>-zwerks. "プラント wl_mara-zvkglg = <fs_mara>-zvkglg. "在庫販売価格 wl_mara-zwaers = <fs_mara>-zwaers. "通貨コード wl_mara-zcpudt = <fs_mara>-zcpudt. "登録日付 wl_mara-zcputm = <fs_mara>-zcputm. "登録時刻 wl_mara-zcsnam = <fs_mara>-zcsnam. "登録者 wl_mara-zupudt = <fs_mara>-zupudt. "更新日付 wl_mara-zuputm = <fs_mara>-zuputm. "更新時刻 wl_mara-zusnam = <fs_mara>-zusnam. "更新者 APPEND wl_mara TO t_out. CLEAR wl_mara. ENDLOOP. ELSE. MESSAGE s004(zs07) WITH TEXT-001 DISPLAY LIKE 'E'. "DB(&1)にデータがあるません。 LEAVE LIST-PROCESSING. ENDIF. IF sy-subrc = 0. RETURN. ELSE. MESSAGE s004(zs07) WITH TEXT-001. LEAVE LIST-PROCESSING. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form F_OUT_DATA *&---------------------------------------------------------------------* *& データの出力処理 *&---------------------------------------------------------------------* FORM f_out_data . CALL SCREEN 9000. ENDFORM. *&---------------------------------------------------------------------* *& Module STATUS_9000 OUTPUT *&---------------------------------------------------------------------* *& STATUSの設定 *&---------------------------------------------------------------------* MODULE status_9000 OUTPUT. SET PF-STATUS 'ZSTATUS'. SET TITLEBAR 'ZTITLE'. ENDMODULE. *&---------------------------------------------------------------------* *& Module USER_COMMAND_9000 INPUT *&---------------------------------------------------------------------* * 機能処理 *----------------------------------------------------------------------* MODULE user_command_9000 INPUT. CLEAR: t_mara, t_marc. DATA: v_selfield TYPE slis_selfield. CALL METHOD v_grid->check_changed_data. LOOP AT t_out INTO w_out WHERE sel = 'X'. "選択 w_mara-zmatnr = w_out-zmatnr. "品目コード w_mara-zmaktx = w_out-zmaktx. "品目テキスト w_mara-zmtart = w_out-zmtart. "品目タイプ w_mara-zbrgew = w_out-zbrgew. "総重量 w_mara-zgewei = w_out-zgewei. "重量単位 w_mara-zlvorm = w_out-zlvorm. "品目削除フラグ w_marc-zmatnr = w_out-zmatnr. "品目コード w_marc-zwerks = w_out-zwerks. "プラント w_marc-zvkglg = w_out-zvkglg. "在庫販売価格 w_marc-zwaers = w_out-zwaers. "通貨コード w_mara-zcpudt = w_out-zcpudt. "登録日付 w_mara-zcputm = w_out-zcputm. "登録時刻 w_mara-zcsnam = w_out-zcsnam. "登録者 w_mara-zupudt = w_out-zupudt. "更新日付 w_mara-zuputm = w_out-zuputm. "更新時刻 w_mara-zusnam = w_out-zusnam. "更新者 APPEND w_mara TO t_mara. APPEND w_marc TO t_marc. CLEAR w_mara. CLEAR w_marc. ENDLOOP. CASE ok_code. WHEN 'BACK'. LEAVE TO SCREEN 0. WHEN 'NEW'. * NEW処理 PERFORM f_new_data. WHEN 'INSERT'. * 登録処理 PERFORM f_insert_data. WHEN 'UPDATE'. * 更新処理 PERFORM f_update_data. WHEN 'DEL'. * 削除処理 PERFORM f_del_data. WHEN OTHERS. ENDCASE. v_selfield-refresh = 'X'. "刷新 v_selfield-col_stable = 'X'. "光标不动 v_selfield-row_stable = 'X'. * alvのrefresh CALL METHOD v_grid->refresh_table_display. ENDMODULE. *&---------------------------------------------------------------------* *& Module INIT_ALV OUTPUT *&---------------------------------------------------------------------* *& ALV初期値処理 *&---------------------------------------------------------------------* MODULE init_alv OUTPUT. IF v_cont IS INITIAL. * 処理続行 ELSE. RETURN. ENDIF. * カスタムコントロールの登録 CREATE OBJECT v_cont EXPORTING container_name = 'ZALV'. * ALVクラスの登録 CREATE OBJECT v_grid EXPORTING i_parent = v_cont. ENDMODULE. *&---------------------------------------------------------------------* *& Module SHOW_ALV OUTPUT *&---------------------------------------------------------------------* *& ALVの出力処理 *&---------------------------------------------------------------------* MODULE show_alv OUTPUT. FIELD-SYMBOLS: <fs_field> TYPE lvc_s_fcat. "項目カタロ * FIELDCATE CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' EXPORTING i_structure_name = 'ZMARA_ALVS07_01' CHANGING ct_fieldcat = t_field EXCEPTIONS inconsistent_interface = 1 program_error = 2 OTHERS = 3 . SORT t_field ASCENDING BY fieldname. IF sy-subrc = 0. LOOP AT t_field ASSIGNING <fs_field>. AT FIRST. <fs_field>-checkbox = 'X'. "checkbox <fs_field>-scrtext_l = TEXT-002. "long <fs_field>-scrtext_m = TEXT-002. "m <fs_field>-scrtext_s = TEXT-002. "s ENDAT. ENDLOOP. ELSE. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. ENDIF. * layout s_lay-zebra = 'X'. s_lay-cwidth_opt = 'X'. s_lay-grid_title = 'ALV_OO'. s_lay-edit = 'X'. **sort * w_sort-fieldname = 'ZMATNR'. "品目コード * w_sort-down = 'X'. "降序排序" * w_sort-spos = '1'. "执行顺序" * APPEND w_sort TO t_sort. * IT_TOOLBAR_EXCLUDING w_exc = cl_gui_alv_grid=>mc_fc_print. APPEND w_exc TO t_exc. ** FILTER * w_filter-fieldname = 'ZGEWEI'. * w_filter-sign = 'I'. * w_filter-option = 'EQ'. * w_filter-low = 'KG'. *APPEND w_filter TO t_filter. * レイアウト CONCATENATE sy-repid sy-dynnr INTO w_var-report. w_var-variant = 'ZTESTS07'. * ALV出力 CALL METHOD v_grid->set_table_for_first_display EXPORTING * IS_VARIANT = W_VAR i_save = 'U' i_default = 'X' is_layout = s_lay it_toolbar_excluding = t_exc CHANGING it_outtab = t_out it_fieldcatalog = t_field it_sort = t_sort * it_filter = t_filter EXCEPTIONS invalid_parameter_combination = 1 program_error = 2 too_many_lines = 3 OTHERS = 4 . IF sy-subrc = 0. * 処理続行 ELSE. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. ENDIF. ENDMODULE. *&---------------------------------------------------------------------* *& Form F_NEW_DATA *&---------------------------------------------------------------------* *& NEW処理 *&---------------------------------------------------------------------* FORM f_new_data . CLEAR w_out. APPEND w_out TO t_out. ENDFORM. *&---------------------------------------------------------------------* *& Form F_INSERT_DATA *&---------------------------------------------------------------------* *& INSERT処理 *&---------------------------------------------------------------------* FORM f_insert_data . IF t_out IS INITIAL. * 処理なし ELSE. INSERT zmara_s07 FROM TABLE t_mara ACCEPTING DUPLICATE KEYS. INSERT zmarc_s07 FROM TABLE t_marc ACCEPTING DUPLICATE KEYS. IF sy-subrc = 0. COMMIT WORK AND WAIT. MESSAGE s001(zs07) WITH TEXT-001. "DB(&1)登録成功されました。 ELSE. ROLLBACK WORK. ENDIF. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form F_UPDATE_DATA *&---------------------------------------------------------------------* *& 更新处理 *&---------------------------------------------------------------------* FORM f_update_data . IF t_out IS INITIAL. * 処理なし ELSE. UPDATE zmara_s07 FROM TABLE t_mara. UPDATE zmarc_s07 FROM TABLE t_marc. IF sy-subrc = 0. COMMIT WORK AND WAIT. MESSAGE s002(zs07) WITH TEXT-001. * DB(&1)更新成功されました。 ELSE. ROLLBACK WORK. ENDIF. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form F_DEL_DATA *&---------------------------------------------------------------------* *& 削除処理 *&---------------------------------------------------------------------* FORM f_del_data . IF t_out IS INITIAL. * 処理なし ELSE. DELETE zmara_s07 FROM TABLE t_mara. DELETE zmarc_s07 FROM TABLE t_marc . IF sy-subrc = 0. COMMIT WORK AND WAIT. MESSAGE s003(zs07) WITH TEXT-001. "DB(&1)削除成功されました。 DELETE t_out WHERE sel = 'X'. ELSE. ROLLBACK WORK. ENDIF. ENDIF. ENDFORM.