標準機能でALV出力用の共通部品が用意されており、単純なレポート表示なら作りこまなくても共通部品がそれなりのもの出してくれるので知っておいて損はありません。
今回はデータを表示するだけの単純なALVレポートの作り方を説明しているので、経験者にとっては物足りない内容かもしれません。ですが、ここの内容をベースに、ALVでできる様々な機能を今後見ていきたいと思っていますのでご了承ください。
それでは説明していきます。
ALVレポート作成手順
表示レポートの構造作成(SE11)
まずは一覧画面に表示する項目を構造として定義します。
構造は作らなくてもできますが、表示名称や桁数などの属性情報を全部プログラムとして実装する必要があって無駄な工数がかかるので、ALVレポートに出力する項目は構造として定義することをおすすめします。
例として、BPマスタの一部項目を表示するレポートを作っていきます。
トライアル環境には会計やロジなどのトランザクションデータの登録機能は削除されているのですが、BPマスタは用意されていたので使ってみます。後々ALVからのコールトランザクションも試してみたいので。
サンプルなので項目数はパートナ、名称、登録者、の3項目だけに絞って作ります。
プログラムの実装(SE38)
フィールドカタログ作成
上で作った構造を標準の汎用モジュールに渡すことによって、ALVの各セルに表示する項目の桁数や名称、データ型などの各種属性情報を認識させてあげます。
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_structure_name = 'YTEST0004'
CHANGING
ct_fieldcat = it_fcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
これだけです。プログラムIDと構造名を渡して、ct_fieldcatを返してもらうだけです。
上の構造定義のところで、構造を作らなくてもできると書きましたが、これはct_fieldcatにプログラム内で必要な情報を全部設定すればできるからです。
では、ct_fieldcatを手作りする場合はどれくらい大変なのでしょうか。ちょっと見てみましょう。
まず、表示位置と項目ID。3項目なら大したことないですが、50個、100個とかになると結構面倒です。
こちらはデータエレメントやドメインに設定されている属性情報。
これらをct_fieldcatに設定すれば、構造定義しなくてもALVレポートを作れますが、こんな面倒なことはおすすめしません。表示項目数に比例してステップ数も多くなり、プログラムの可読性が悪くなるので、無駄なバグを発生させかねませんね。
標準の汎用モジュールと構造を使うことで、何項目出力しようが10ステップくらいで実装できてしまいます。
ALVレポート出力
あとはレポートを出すだけです。とても簡単です。
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = it_fcat
TABLES
t_outtab = it_main 表示データ
EXCEPTIONS
program_error = 1
OTHERS = 2.
最低限のALVレポート出力はこれだけです。
サンプルコード
上の説明では汎用モジュール部分を切り出していましたが、ここで全体のサンプルコードを載せます。
*&---------------------------------------------------------------------*
*& Report YTEST0004
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ytest0004.
DATA: it_main TYPE TABLE OF ytest0004.
DATA: it_fcat TYPE slis_t_fieldcat_alv.
SELECT * FROM but000 INTO CORRESPONDING FIELDS OF TABLE it_main.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_structure_name = 'YTEST0004'
CHANGING
ct_fieldcat = it_fcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = it_fcat
TABLES
t_outtab = it_main
EXCEPTIONS
program_error = 1
OTHERS = 2.
上記コードで表示されるALVレポートの画面はこんな感じです。
- 行選択ボタンがない
- 名称の表示幅が必要以上に長い
- ALVレイアウトの保存ボタンがない
など気になる点があるかと思います。
今回載せたサンプルコードの汎用モジュールには多数のパラメータを渡すことができるのですが、それらの中に行選択ボタンや表示幅の最適化、ALVレイアウトの保存ボタンを出すためのパラメータが用意されていますので、別の機会に載せていきます。
まとめ
今回載せたサンプルコードは基本中の基本のみです。これをベースに今後いろいろな機能を紹介していくので是非参考にしてください。