ABAPと一言で言っても、そのプログラムにもいろいろな種類があることは知っているでしょうか。
この記事では、ABAPプログラミングの主要な4つのカテゴリー、すなわち「REPORT」、「Dynpro」、「Function Module」、そして「Object-Oriented ABAP」について初心者向けにわかりやすく解説します。
これらの理解と適切な使用は、開発者がSAPシステムの機能を最大限に引き出す上で欠かせない重要なポイントです。

これら各種類のABAPプログラムは、異なる目的と機能を持っており、それぞれがSAPの中で特定の役割を果たす点をご説明します。
最終的には、これらのプログラム種別を理解し、適切に使用できるようになることを目指します。
SAPエンジニアやABAPerを目指す方であれば知らないと恥ずかしい超・基本知識の1つ。是非最後までご覧ください。
参考 ABAPの基本構文ルール
ABAP REPORT

まず「REPORT」について解説します。これは、ABAPにおいて最も基本となるプログラムで、おそらくほとんどの人が初めてABAPに触れる時に対象となるはずのプログラムタイプです。
「REPORT」はABAPプログラミングの基礎とも言えるもので、一般的にデータベースから情報を取得し、指定された形式で結果を表示するために使用されます。その名の通り、このプログラムタイプは主に、ビジネスデータの報告や分析のための各種レポートを作成する際に利用されます。

レポートプログラムと言われたら、そのプログラムはデータを取得して一覧表示するプログラムのことだ、と理解しておけば問題ないでしょう。
業務的な観点から考えるとわかりやすいのですが、普段行っている業務の約半数ぐらいはデータの取得や照会に基づいたものです。例えば、社員の給与計算レポート、在庫管理レポート、販売レポートなど、特定の期間にわたる情報を要約し、ビジネスの意思決定をサポートするための各種レポートを生成するなど。
これらを実現しているのが「レポート(REPORT)」と呼ばれるプログラムです。

以下に、非常にシンプルなABAP REPORTプログラムの例を示します。
REPORT ZMY_REPORT. TYPES: BEGIN OF ty_sflight, carrid TYPE sflight-carrid, connid TYPE sflight-connid, fldate TYPE sflight-fldate, price TYPE sflight-price, END OF ty_sflight. DATA: lt_sflight TYPE TABLE OF ty_sflight, wa_sflight TYPE ty_sflight. START-OF-SELECTION. SELECT carrid connid fldate price FROM sflight INTO TABLE lt_sflight UP TO 10 ROWS. LOOP AT lt_sflight INTO wa_sflight. WRITE: / 'Airline:', wa_sflight-carrid, 'Connection Id:', wa_sflight-connid, 'Flight Date:', wa_sflight-fldate, 'Price:', wa_sflight-price. ENDLOOP.
参考 TYPES命令 / START-OF-SELECTION
LOOP命令 / WRITE命令
このプログラムは、SFLIGHTテーブルから10行のデータを取得し、それをコンソールに表示します。各行は、航空便の航空会社コード (CARRID)、接続ID (CONNID)、フライトの日付 (FLDATE)、および価格 (PRICE) を表示します。
Dynpro(ディンプロ)
Dynproとは「Dynamic programming」の略称。
そのまま日本語に訳すと「動的プログラミング」となりますが、これはユーザーとSAPとのインタラクティブなコミュニケーションを可能にするUI(画面)を作成するためのABAPプログラムタイプ。
例えば、ユーザーが直接データを入力するためのフォームやダイアログ、情報を表示するためのダッシュボードやウィジェットなどがDynproの代表例。製品の詳細を入力し、保存するためのカスタムフォームや、特定のビジネスデータを表示するカスタムダッシュボードを作成する際にDynproを活用することができます。

ざっくり「画面」と「画面の制御」の諸々を行うプログラムがDynproだと理解しておけばとりあえずはOKです。
以下に、基本的なDynproプログラムの一部を示します。この例では、単純なダイアログ画面が作成され、ユーザーからの入力を受け付けることができます。
MODULE pool. INCLUDE db_include. "データベーステーブル操作のためのインクルード TABLES: sflight. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. PARAMETERS: carrid LIKE sflight-carrid, connid LIKE sflight-connid, fldate LIKE sflight-fldate. SELECTION-SCREEN END OF BLOCK b1. START-OF-SELECTION. SELECT * FROM sflight WHERE carrid = carrid AND connid = connid AND fldate = fldate. WRITE: / sflight-carrid, sflight-connid, sflight-fldate. ENDSELECT.
参考 INCLUDE / SELECTION-SCREEN / PARAMETERS
このプログラムは、ユーザーに航空会社ID、接続ID、フライト日付の入力を求め、指定された条件に一致するフライト情報をデータベースから取得し、表示します。
Dynpro (Module Pool) プログラムは、一般的には他のプログラムから呼び出される形で使用されます。
ユーザが対話的にデータを入力する画面や結果を表示する画面など、ユーザインターフェース部分だけを担当するので、それ単独で用いられる場面はほとんどありません。

例えば在庫管理システムを構築する場合、在庫の追加や削減、在庫の表示など、ユーザとの対話を担当する部分をDynproで作成し、それを他のプログラムから呼び出すという形が一般的です。このように、Dynproは主にユーザインターフェース部分を担当し、ビジネスロジックは他のプログラムタイプが担当します。
Function Module(汎用モジュール)
Function Module(=汎用モジュール)はABAPの一部で、特定の機能を1つのモジュールとしてパッケージ化し、他のプログラムから繰り返し呼び出すことができるようにするものです。

Function ModuleはABAPの再利用可能な部品で、一度作成すれば他の多くのプログラムから使用することができます。これによりコードの重複を防ぎ、保守性と生産性を向上させることができます。
別のプログラミング言語の例を借りて言えば、全プログラムから利用できる「関数」のようなもの。この「関数」をパッケージ化(=塊にする)したものがFunction Moduleです。

汎用モジュールも、Dynpro同様で基本的には他のプログラムから呼び出される形で実行されます。汎用モジュールの定義方法・呼び出し方法については以下の記事で詳しく解説しておりますので、合わせてご覧ください。
Object-Oriented ABAP
Object-Oriented ABAP(略称:OO-ABAP)は、ABAPのオブジェクト指向バージョンで、クラス、オブジェクト、インターフェース、継承などのオブジェクト指向プログラミングの原則を実装するための言語拡張です。
もともとABAPは手続き型のプログラミング言語だったのですが、これを拡張してオブジェクト指向のプログラミングを可能にしました。

この拡張して誕生したプログラムが「Object-Oriented ABAP」です。
CLASS lcl_my_class DEFINITION. PUBLIC SECTION. METHODS: add_numbers IMPORTING iv_num1 TYPE i iv_num2 TYPE i RETURNING VALUE(rv_result) TYPE i. ENDCLASS. CLASS lcl_my_class IMPLEMENTATION. METHOD add_numbers. rv_result = iv_num1 + iv_num2. ENDMETHOD. ENDCLASS.
参考 ABAPのCLASS

このクラスlcl_my_class
には、メソッドadd_numbers
が定義されており、2つの数値を受け取り、それらを足し合わせた結果を返します。
様々なABAPプログラムタイプ
ここまで紹介したプログラムタイプは、一般的によく使われるものと、ABAPの基本的な概念をカバーすることを目的としてご紹介しました。
実はそれ以外にもABAPのプログラムタイプは多数存在し、それぞれが特定の目的や使用ケースに適しています。

全てのプログラムタイプを網羅的に説明すると非常に詳細になり、初心者にとっては情報過多になる可能性もありますが、以下にできるだけ網羅的にプログラムタイプを整理しましたのでご覧ください。
プログラムタイプ | 説明 |
---|---|
実行可能プログラム(Executable Program) | これは独立して実行可能なプログラムで、一般的には特定のタスクを完結させるように設計されています。 |
REPORT | 実行可能プログラムの一部で、主にデータ抽出と表示(レポート)に使用されます。 |
Include プログラム | 他のプログラム(例えば、実行可能プログラムやモジュールプールなど)に含まれる再利用可能なコード部分を提供します。 |
Module Pool(Dynpro) | ユーザインターフェース(画面)を提供するプログラムで、実行可能プログラムから呼び出されます。 |
Function Module(汎用モジュール) | 再利用可能な機能(関数)をカプセル化するプログラムで、他のプログラムから呼び出すことができます。 |
Class Pool | オブジェクト指向ABAP(OO-ABAP)のクラスやインターフェースを定義するプログラムです。 |
Interface Pool | オブジェクト指向ABAP(OO-ABAP)のインターフェースを定義するプログラムです。 |
Subroutine Pool | 他のプログラムから呼び出されるサブルーチン(手続き)を定義するプログラムです。 |
Function Group | 関連する一連のFunction Moduleをグルーピングするためのプログラムです。 |
Type Group(Type Pool) | 再利用可能なデータ型や定数を定義するプログラムです。 |

プログラムを1から新規作成しようとすると、以下の画面で「タイプ」を設定しますが、それは上記のうちどれか一番適するものを選択することになります。

ABAPのプログラムタイプのまとめ

この記事では、ABAPプログラミングにおける主要なプログラムタイプ4つ、すなわち、REPORTプログラム、Dynpro(またはModule Pool)、Function Module(または汎用モジュール)、およびObject-Oriented ABAPについて説明しました。

初めてABAPを勉強するのは結構難しいですよね。
でもその悩みを抱えているのは一人じゃありません。全てのABAP使いが同じ道を進んできました。
ABAPをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?
読者料典 【完全無料】ABAP:学習カリキュラム ←こちらから!