1
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SAP ABAPサンプルプログラム(コピーペースト利用可)

Posted at

典型的なSAP ERP ABAPサンプルレポートプログラムを共有しようと思います。通常簡略化される入門の「Hello World」ではなくて、本物ののプロジェクトで利用可能なサンプルコードです。コメント(概要説明、改修履歴)、タイプ宣言、固定値宣言、グロバール変数宣言、選択画面定義、初期化処理、主処理(入力チェック、データ取得、データ更新、結果出力)、サブルーチンを含めます。
#サンプルソースコード#

&---------------------------------------------------------------------
*& PID :Y_SD_SAMPLE
*& 機能:ABAP入門講座典型的なサンプルプログラム
&---------------------------------------------------------------------
*&バージョン 日付 変更者 概要
&---------------------------------------------------------------------
*&1.0.0 2020/09/30 三思 新規作成
*&1.0.1 2020/10/01 三思 検索条件追加
&---------------------------------------------------------------------

REPORT Y_SD_SAMPLE.

&---------------------------------------------------------------------
*&タイプ宣言
&---------------------------------------------------------------------
TYPE-POOLS abap.

TYPES:
gtr_vbeln TYPE RANGE OF vbeln, "レンジテーブル:販売伝票番号

  • 受注情報
    BEGIN OF gts_vbap,
    vbeln TYPE vbeln, "販売管理伝票番号
    posnr TYPE posnr, "明細番号
    matnr TYPE matnr, "品目コード
    kwmeng TYPE kwmeng, "累積受注数量 (販売単位)
    END OF gts_vbap,
    gtt_vbap TYPE STANDARD TABLE OF gts_vbap.

&---------------------------------------------------------------------
*&コンスタント
&---------------------------------------------------------------------
CONSTANTS:

  • エラーメッセージのタイプ
    BEGIN OF gc_s_msg_type,
    error TYPE symsgty VALUE 'E', "エラー
    normal TYPE symsgty VALUE 'S', "正常
    END OF gc_s_msg_type.

&---------------------------------------------------------------------
*&データ宣言
&---------------------------------------------------------------------
DATA:
gv_vbeln TYPE vbeln, "販売管理伝票番号
gt_vbap TYPE gtt_vbap. "受注情報

&---------------------------------------------------------------------
*&選択画面
&---------------------------------------------------------------------
PARAMETERS p_bukrs TYPE bukrs OBLIGATORY.
SELECT-OPTIONS s_vbeln FOR gv_vbeln.

&---------------------------------------------------------------------
*&初期処理
&---------------------------------------------------------------------
INITIALIZATION.
PERFORM f_init.

&---------------------------------------------------------------------
*&主処理
&---------------------------------------------------------------------
START-OF-SELECTION.
PERFORM f_main.

&---------------------------------------------------------------------
*& サブルーチン
&---------------------------------------------------------------------

&---------------------------------------------------------------------
*& 初期化処理
&---------------------------------------------------------------------
*
&---------------------------------------------------------------------
FORM f_init.

CLEAR:
gv_vbeln,
gt_vbap.

ENDFORM. "f_init

&---------------------------------------------------------------------
*& データを取得し、出力する
&---------------------------------------------------------------------
*
&---------------------------------------------------------------------
FORM f_main.
DATA:
lv_chk_flg TYPE flag. "チェックフラグ

CLEAR:
gt_vbap.

*入力チェックを行う
PERFORM f_check
USING
p_bukrs
s_vbeln[]
CHANGING
lv_chk_flg.
IF lv_chk_flg IS NOT INITIAL.
LEAVE LIST-PROCESSING.
ENDIF.

  • 販売伝票情報を取得する
    PERFORM f_get_data
    USING
    p_bukrs
    s_vbeln[]
    CHANGING
    lv_chk_flg
    gt_vbap.
    IF lv_chk_flg IS NOT INITIAL.
    LEAVE LIST-PROCESSING.
    ENDIF.

  • データの更新処理を行う
    PERFORM f_update_data
    USING
    gt_vbap
    CHANGING
    lv_chk_flg.

  • 処理結果を出力する
    PERFORM f_output
    USING
    gt_vbap.

ENDFORM. "f_main

&---------------------------------------------------------------------
*& 入力チェックを行う
&---------------------------------------------------------------------

  • --> u_bukrs 会社コード

  • --> u_r_vbeln 販売管理伝票番号

  • <-- ch_chk_flg エラーフラグ
    &---------------------------------------------------------------------
    FORM f_check
    USING
    u_bukrs TYPE bukrs
    u_r_vbeln TYPE gtr_vbeln
    CHANGING
    ch_chk_flg TYPE flag.

    CLEAR:
    ch_chk_flg.

    IF u_r_vbeln IS INITIAL.

  • 有効な値を入力してください
    MESSAGE s002(00) DISPLAY LIKE gc_s_msg_type-error.
    ch_chk_flg = abap_on.
    ENDIF.
    CHECK ch_chk_flg IS INITIAL.

ENDFORM. "f_check

&---------------------------------------------------------------------
*& 販売伝票情報を取得する
&---------------------------------------------------------------------

  • --> u_bukrs 会社コード

  • --> u_r_vbeln 販売管理伝票番号

  • <-- ch_chk_flg エラーフラグ

  • <-- ch_t_vbap 販売明細情報
    &---------------------------------------------------------------------
    FORM f_get_data
    USING
    u_bukrs TYPE bukrs
    u_r_vbeln TYPE gtr_vbeln
    CHANGING
    ch_chk_flg TYPE flag
    ch_t_vbap TYPE gtt_vbap.

    CHECK ch_chk_flg IS INITIAL.

    SELECT
    p~vbeln "販売管理伝票番号
    p~posnr "明細番号
    p~matnr "品目コード
    p~kwmeng "累積受注数量 (販売単位)
    FROM vbak AS k
    INNER JOIN vbap AS p
    ON k~vbeln = p~vbeln
    INTO TABLE ch_t_vbap
    WHERE k~bukrs_vf = u_bukrs "会社コード
    AND k~vbeln IN u_r_vbeln. "販売管理伝票番号

    IF sy-subrc <> 0.
    ch_chk_flg = abap_on.

  • データを取得できませんでした
    MESSAGE s001(y01) DISPLAY LIKE gc_s_msg_type-error.
    ENDIF.
    CHECK ch_chk_flg IS INITIAL.

ENDFORM. "f_get_data

&---------------------------------------------------------------------
*& データの更新処理を行う
&---------------------------------------------------------------------

  • --> u_t_vbap 販売明細情報

  • <-- ch_chk_flg エラーフラグ
    &---------------------------------------------------------------------
    FORM f_update_data
    USING
    u_t_vbap TYPE gtt_vbap
    CHANGING
    ch_chk_flg TYPE flag.

    CHECK ch_chk_flg IS INITIAL.

  • ここで更新処理を追加する

ENDFORM. "f_update_data

&---------------------------------------------------------------------
*& 処理結果を出力する
&---------------------------------------------------------------------

  • --> u_t_vbap 販売明細情報
    &---------------------------------------------------------------------
    FORM f_output
    USING
    u_t_vbap TYPE gtt_vbap.

    DATA:
    ls_vbap TYPE gts_vbap.

    LOOP AT u_t_vbap INTO ls_vbap.
    WRITE:
    /5(10) ls_vbap-vbeln,
    17(6) ls_vbap-posnr,
    25(40) ls_vbap-matnr,
    67(15) ls_vbap-kwmeng.
    ENDLOOP.

ENDFORM. "f_output

#補足
1、チェックが発生した場合、画面遷移しない。「LEAVE LIST-PROCESSING.」によって制御します。
2、テーブルからデータを取得できなかった場合、画面遷移しない。「LEAVE LIST-PROCESSING.」によって制御します。データがなくても結果画面へ遷移する仕様であれば、上記コマンドを削除してください。

1
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?