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.

 

posted @ 2021-11-22 22:58  zzwvv  阅读(43)  评论(0)    收藏  举报