ABAPer日記

プログラム言語ではマイナーなABAPを扱える人が、解説記事に憧れてはじめてみました

ABAPの内部テーブルとは

簡単に説明したいと思います。

内部テーブルは、構造を持っていて、1行ずつメモリに保存します。
基本は、データベーステーブルのデータを保存することが目的です。
ABAPでは内部テーブルが配列の役割を果たします。


テーブルから格納したデータを、条件を絞ったりして更にロジックに沿った内部テーブルに移し替えたりします。

 

結局アドオンだとテーブルから取得したデータを内部テーブルに格納して、
内部テーブルをループしながらアウトプットに沿った内部テーブルを作成し、
結果のリストやダウンロードやサーバーにファイルを作成したりする流れになります。

 

経験から、ABAPerの仕事は内部テーブルの理解しないと出来ないといってもいいと思います。トラブルも多いですし、デバッグで内部テーブルの中身を見たり、時にはダウンロードしてエクセルで加工してR/3の標準テーブルのデータとにらめっこすることもあります。レスポンスの問題も内部テーブルの定義や格納方法によって起こる事がほとんどです。この辺りの対処方法は、いつか書いていきたいですね。

 

あとがき

絵とかソースとかなくてすみません。

なるべく経験したことを思ったままに、書いていこうかなと思ってます。

 

ABAPの質問や悩みにスピーディーに答えます ABAP開発の初心者、トラブルだらけのSEにオススメ!

 

ABAPの登竜門!構造タイプを理解する

ゴルフ場予約サイト:楽天GORA

目次

ABAPといえば内部テーブルの操作

ABAPのアドオン開発では、内部テーブルを使用しないなんてありえないというくらい重要です。内部テーブルはデータベースのSQLの結果の格納から、結果を使った様々なロジック、リストの作成、用途は様々によって扱い方など違うのでで、初心者はハマりやすいポイントですので、基本を押さえるのはとても重要です。

今回は内部テーブルを宣言する為に必要な項目定義で必要になってくる構造タイプについて説明したいと思います。

構造タイプ

構造は複数の連続した項目の連続体です。
書く項目のデータ型は、基本タイプ、参照タイプ、など定義でき、構造の中に構造を定義しネスト化させることもできます。
良く言われるののは、TYPEで宣言した構造は、内部テーブルの設計図で、データを格納することはできません。
構造を変数で扱う為には、下記のようにDATA宣言する必要があります。

  • DATAで宣言し、変数として扱う
  • 内部テーブルの構造の型として宣言する

構造タイプの記述例

基本定義方法は下記になりますが、
わかりにくいので、ほとんどのケースは
次の記述方法を使います。

  TYPES BEGIN OF ITAB.
  TYPE WK1 TYPE C LENGTH 1.
  TYPE WK2 TYPE I.
  TYPE WK3 TYPE P.
  TYPES END OF ITAB.

チェーン命令を使った、下記の記述が多いです。
:を使って宣言しているので、スッキリしますね。

  TYPES: BEGIN OF ITAB,
           WK1 TYPE C LENGTH 1,
           WK2 TYPE I,
           WK3 TYPE P,
         END OF ITAB.

こういうのも多いです

  TYPES:
   BEGIN OF ITAB2,
     WK1 TYPE C LENGTH 1,
     WK2 TYPE I,
     WK3 TYPE P,
   END OF ITAB2.
  • 内部テーブルの項目を決定する為に定義する

アドオンは圧倒的にこのパターンで定義れていることが多いです。内部テーブルは参照する構造が必要なので、必ず定義します。*1

  • 変数が乱立しないように、ロジック用に変数をまとめる

処理結果のカウントやメッセージをグローバル変数にした場合など、用途は様々ですが、内部テーブル化しない構造も結構出てきます。


ABAPの質問や悩みにスピーディーに答えます ABAP開発の初心者、トラブルだらけのSEにオススメ!



*1:内部テーブルの宣言方法で、構造を必要としない場合もあります

とりあえず覚えておかないといけない基本タイプ 

ABAPのタイプとオブジェクト

ABAPのタイプは公式のヘルプなど見ると、
階層化になっているということになっていますが、
なんだかわかりづらいので、即実践で必要になるタイプの解説をしたいと思います。

基本的にABAPにはデータ型と参照タイプと2種類あります。
絶対覚えておかないといけないのは、データ型になります。
最初は参照タイプは置いておきます。

データ型

基本タイプ(これ覚えておけば、なんとかなります)

固定長 文字タイプ
  • TYPE C テキスト

     これが一番使うかな
     文字列の格納から、フラグの変数もTYPE Cが多いです

  • TYPE N 数値テキスト

     ゼロ埋めしたい数値を扱う場合に使います。
     例)000010

  • TYPE D 日付

     日付型といえばこれで、
     R/3の標準テーブルの日付に多いです
     timestampも扱えますが、あまり使わない印象
     (標準でも突然timestampもでてくるので注意が必要だが、
      後々解説したいです)

  • TYPE T 時刻

     日付と同じで時刻といえばこれで、
     R/3の標準テーブルの時刻に多いです

  • TYPE X 16進数

     バイナリデータ扱う場合に使いますが、
     あまり使わない印象
     古いバージョンのR/3だと、改行コードなど制御コードを
     テキストに入れる場合とか使ってました。

固定長 数値タイプ
  • TYPE P パック数値

    パックの説明は省きます。
    ABAPの計算では、P型で行うことが多いです

  • TYPE I 整数

    整数型なので、扱える桁が10桁で範囲が決まっていますので、
    数量、金額の計算では使用しません。
    アドオンプログラムでは結構な頻度で出てきます。
    カウンタや、件数取得など幅広く使います。

    私が携わったプロジェクトでは、あまり使いませんでした

可変長
  • TYPE STRING 文字列順序

    可変なので文字列を格納する際使いますが、
    標準のテーブル、汎用モジュールなどSTRINGで受け渡しする
    ことが少ない印象。
    アドオンでは、TYPE C でやることが多いです。
    R/3はテーブル項目でSTRINGが少なく、
    TYPE Cの項目が多いからでしょうね。
    使える時は使っていくと便利ですよ。

  • TYPE XSTRING バイト文字列順序

    あまり使いません。
    バイナリファイルを扱ったりする場合使いますが、
    今までに要件的にあまりなかったです。
    pdfファイル作るとかで、使ったかな・・・。

まとめ

基本データの上記をさらっと覚えておくだけで良いかなと思います。
次は内部テーブルなどの、複合タイプの説明をします。

ABAPの質問や悩みにスピーディーに答えます ABAP開発の初心者、トラブルだらけのSEにオススメ!

ABAP構文

ABAPの構文はピリオドで終了

各命令はキーワードで始まり、ピリオドで終了します。
慣れないと、ピリオドよく忘れますよ。

WRITE 'My First Program'.

ABAP書式のお作法

公式には、ABAPの書式には制限が無いとされていますが、
大抵ソースコードは見やすくしたいという、現場がほとんどです。一般的な記述方法を紹介します。
1行に複数の命令を記述できますが、ほとんどやりません。

DATA STR(20) TYPE C. STR = 'My First Program'. WRITE STR.

見やすい書き方

DATA STR(20) TYPE C. 
STR = 'My First Program'.
WRITE STR.

コメントの記述方法

行頭に*で1行全てがコメント行として認識されます。
任意の位置でのコメントは"でそれ以降がコメントとして認識されます。
プログラムのヘッダなどでよくあるコメント

************************************
* PROGRAM
* 処理概要
* 作成者
* 更新日
************************************

処理中のロジックの説明

* 品目マスタ取得
SELECT * FROM MARA.

任意の位置でのコメント("以降がコメントになる)

* 品目マスタ取得
SELECT * FROM MARA
  WHERE MATNR IN SO_MATNR.  "品目コード
あとがき

今回はABAP構文についての、初歩の初歩について説明しました。コメントの書き方や、文字下げや、ネストなどは、現場にルールがありますが、他のプログラム言語と同じで、見やすければいいでしょと思って私はやってます。(現場のルールを守りましょうね)


ABAPの質問や悩みにスピーディーに答えます ABAP開発の初心者、トラブルだらけのSEにオススメ!

ざっくりABAPを説明

ABAPって何?

SAP社ERPパッケージ専用のプログラム言語がABAPです。
世界中で展開されていて、有名企業もたくさん導入しています。

日本国内では若干マイナー感ありますが、ERPといえば真っ先にSAP社のR/3が浮かぶくらい実は有名です。今だとオンメモリーで動作するSAP S4 HANAが巷では流行ってます。R/3からS4 HANAにマイグレーションする案件って現在多いんじゃないかな。主に基幹系のシステムに使われていて、R/3とかECCとかS4などあります。他にもBI系のパッケージとか、外部システム連携系に使うパッケージとかあります。

導入は大規模なプロジェクトで導入など行います。

パッケージなので、導入企業の要件でカスタマイズを行なっていく感じになりますが、標準機能が要件に合ってない、存在しない場合、別途アドオンプログラムを作成します。その時に使うのが専用言語のABAPなのです。(Java版もありますが、私はあまりみたことないです)

R/3が有名ですが、このあたり需要があればアップグレードも結構やってきたので、そのうち書こうかな、苦労した話とか・・・。

SAP関連はABAPと違って書籍が結構ありますよ。

 

ゴルフ場予約サイト:楽天GORA

ABAPerと呼ばれてしまった人達へ

筆者について

ABAPを20年くらい携わってます(進行形)。

R/3から離れられないので、結果20年くらいABAPと格闘してます。

アドオン開発なら、考えられる事例は全て実装してきた自負があります。

その経験を生かして、プログラム言語としては、マイナーなABAPのブログを書いてみようと思ってます。

かなりレアな人扱いされていますよ・・・。

 

目的はなんだ

望まずにABAPを覚えないと行けなくなった人達と仲間になりたい。

ありとあらゆる修羅場を乗り越えてきたので、何かアドバイスしたと思ってます。

ABAPの解説本って少ないですよね。

あってもよくわからない、現場の資料もわかりにくい。

結局スペシャリストに聞くのが一番なんでだけど、近くにいない、聞きにくいって多々あると思うのです。

そんな悩みを解消できたらいいなを、ブログで実現していきたいです。

 

解説記事を書くの?

当面、ABAPの構文とか解説していきます。

私が、よく使うロジックとかも解説していきます。

要望いただければ、可能な限り答えようかなと思います。

 

基本的に図などは無いです・・・

コードの例は書くかも

 

どうやってABAPを身につけたの?

一般的はプログラム言語は、入門書とかありますよね?

ABAPの場合は、昔は現場の誰かが、SAP社に勉強に行って、

その時もらう参考書を持ち帰る。その人から習うというのが習得方法でした。

もちろん参考書は、書店で売っているわけでは無いので買えません。

 

なので、習うより慣れろで、私は覚えました・・。

そりゃ苦労しましたよ、聞く人もいないしね。

そんな経験を生かして、ABAPを解説できたらいいですね。

 

一応、下記のような公式の参考書もありますが、高いです・・

2万くらいするので、個人で誰が買うんだって値段ですね。

会社におねだりしてください。

私の現場にもありましたが、あると安心する人もいますが、

私は使った記憶はありません・・、実践的じゃなかったと思います。

勉強するにはいいのかな、興味があれば、会社におねだりしてくださいね。

かなり重いので持ち運びは覚悟してください。

 

 

英語の参考書もありますね。

こちらもお値段的に会社におねだりですね。

英語が得意な人はチャレンジしてもいいかも。

私は読んだことないし、英語できないのでパスです。

 

 

書籍は、 Amazonで見てみましたが、どれも古くないか?

って感想です。構文は古くてもいいけどね。

ABAPってたまに廃止命令ですよ、ってあるけど使えますからね。

この辺りも今後ネタにしようかな。

 

こんな感じですが、よろしくお願いします。