新規記事の投稿を行うことで、非表示にすることが可能です。
2020年02月20日
【SAP】SAP用語集3
SAP用語集3
HCM用語
・論理データベース
データの読み込みと処理を行うためのツール。
・マクロ
汎用モジュールのような機能。
標準プログラムで使われている。
現場では可読性重視によりあまり使われない模様。
・権限プロファイル
システムに登録されているユーザIDに対し、SAP内の各機能の権限を管理する。
トランザクションコードSU01にて権限を設定することができる。
・PNP
論理データベースの1つ。
従業員データを読み込む。
・PNPCE
論理データベースの1つ。
CE=コンカレントエンプロイメント。
PNPより仕様が少し変わる。
・給与計算期間ユニット
給与計算を行う単位。
ユニットごとに月例給与の支払い日、対象期間を定義する。
・処理制御レコード
給与計算を実行するための年月を設定する。
・ウェイジタイプ
従業員の各金額項目における金額単位を「/」始まりの番号で管理する給与管理、人材管理のオブジェクト。
・給与計算ドライバ
実際に給与計算を行う機能。
・PCLファイル
人事管理に関するデータを複数のPCLファイルによって管理する。
1つのPCLファイルに複数のデータクラスを保有する。
・データクラスタ
複数の内部テーブルを管理しているオブジェクト。
・インフォタイプ
4桁の番号で管理される、従業員のデータを管理するデータベース群。
・サブタイプ
1つのインフォタイプを区分けする。
・履歴管理区分
インフォタイプのレコード登録時に開始日付と終了日付の期間を区分によってチェックする。
区分'1' レコード間の日付の空白期間、重複期間ともになし
区分'2' レコード間の日付の空白期間のみ許可、重複期間なし
区分'3' レコード間の日付の空白期間、重複期間ともに許可
・スクリーンぺインタ
画面を作成するエディタ。
2020年02月19日
【SAP】SAP用語集2
SAP用語集2
ABAP用語
イベント
・REPORT
プログラムID、桁数、列数、メッセージクラスIDなどの定義。
・INITIALIZATION
デフォルトの値の設定。
・AT SELECTION-SCREEN
プログラム実行時の選択画面の入力値チェックする処理。
・START-OF-SELECTION
プログラムが実行されたときに1度だけ処理するイベント。
メインの処理を記述する。
・END-OF-SELECTION
1番最後に処理されるイベント。
出力処理などを記述する。
・TOP-OF-PAGE
画面ヘッダーの出力。
・END-OF-PAGE
画面フッダーの出力。
データ定義
・変数
単一の項目。
・作業領域
複数の項目、1レコードのみ格納可能。
・内部テーブル
複数の項目、2レコード以上格納可能。
・ヘッダ付き内部テーブル
作業領域と内部テーブルがセットで定義される。
・レンジテーブル
SELECT-OPTIONSによって定義されたヘッダ付き内部テーブル。
構造が’SIGN’’OPTION’’LOW’’HIGH’の項目で構成されている。
定義すると選択画面に範囲入力できるパラメータが表示される。
画面定義
・PARAMETER
単一の入力項目。
・SELECT-OPTIONS
範囲指定および複数の入力ができる入力項目。
命令
・SELECT文
DBテーブルからレコードを抽出する処理。
・IF文
判定処理。
・LOOP処理
内部テーブルから複数レコードを処理する。
・READ処理
内部テーブルから1レコードのみ抽出する処理。
・CLEAR
データの値を初期化する。
・APPEND
作業領域のデータを内部テーブルに格納する処理。
・WRITE
データの出力。
・INSERT
内部テーブルもしくはDBテーブルへのレコード登録。
・MODIFY
内部テーブルもしくはDBテーブルへのレコード登録および更新。
・UPDATE
内部テーブルもしくはDBテーブルへのレコード更新。
・DELETE
内部テーブルもしくはDBテーブルへのレコード削除。
【SAP】SAP用語集1
SAP用語集1
モジュール共通用語
・ヘルプ
調べたい命令文や機能にカーソルを合わせた状態で「F1」を押すと、
ABAPの機能についての解説が表示される。
・検索ヘルプ
入力するパラメータに対し「F4」押下時に、入力候補が表示される。
・バリアント
選択画面の入力する値を保存する。
・リフレッシュ
画面の更新。
・データ型
数値、文字、日付などの設定。
・データエレメント
ドメインと項目ラベルを定義する。
・ドメイン
データ型および桁数の定義。
・項目
テーブルおよび構造の構成要素。
・テーブル
DB項目やDB間の関係、特性などの定義。
有効化されると、この定義を元にDBが自動生成される。
SAPシステムによりデータが一元管理される。
・構造(データ型)
項目を決められた順序で定義した、複数の項目からなるデータ型。
・チェックテーブル
パラメータ入力時に、指定したテーブルの項目に存在する値のみ入力可とする。
・外部キーテーブル
チェックテーブルによってチェックされる側のテーブル。
・キー項目
キーになっている項目は、レコード間の値が登録時に重複しないようになる。
・更新ビュー
DBテーブルでのレコードの登録・更新・削除をすることができる。
・システム項目
ABAPプログラム内で既に定義されている項目。
構造はSYST、ABAPで使用する際はSY-項目ID。
・汎用モジュール
中央機能ライブラリに保管されるABAPのルーチン。
アプリケーション固有ではなく、システム全体を通じて利用可能。
・汎用グループ
複数の汎用モジュールをグループ化したもの。
・ファイルセレクタ
ファイルのパスを指定するポップアップ画面。
・バッチインプット
画面にデータを設定する機能。
・セッション
バッチ処理の入力データファイル。
・BDCDATA
セッションファイルを作成するのに必要な構造。
内部テーブルにBDCDATAを型としてBDCテーブルとする。
・CALL TRANSACTION
セッションファイルを作成しないで直接バッチインプットする処理。
・移送
クライアント内に存在するデータを別のクライアントやサーバにコピーする。
・移送オーガナイザ
作成したプログラムやオブジェクトなどを管理する。
・ディンプロ
画面の制御プログラム。
ウィンドウに表示されるメニュー、ボタン、および項目を配置したもの。
1つのABAPアプリケーションにつきDynproが複数ある場合もある。
・オブジェクトナビゲータ
トランザクションコードSE80。
開発オブジェクトの一覧をナビゲートすることができる。
・PBO
ディンプロ制御ロジックの1つ。
画面出力前の処理。
・PAI
ディンプロ制御ロジックの1つ。
画面入力後の処理。
・モジュールプール
トランザクションを実行するためのABAPモジュール、プログラムをすべて含んでいる。
・インクルード
プログラムを呼び出す命令。
・GUIステータス
メニューバー、アプリケーションツールバー、機能キーを設定するエディタ。
・ALV
画面の出力するデータを一覧として表示するSAP標準ツール。
汎用モジュールとマクロの2通りの処理がある。
・オンライン処理
プログラム実行方法の1つ。
プログラム実行後、即時に処理結果を出力する。
・バックグラウンド処理
プログラムの実行方法の1つ。
プログラム実行後、プログラム画面にて処理結果を出力しないで処理を実行する。
トランザクションコードSM37にてログが出るため、処理結果を確認することができる。
タグ:SAP
2020年02月17日
【保険】保険を検討する前に。
保険の加入を検討する前に確認しておくべきことをお話しします。
@そもそも必要なのか
保険ってそもそも必要なのか、考えてみましょう。
まずあなたがどういう環境にいるのか。
・一人暮らし
・実家
・結婚している
・共働き
まずはここです。
あなたにもしものことがあったとき、
助けてくれる人がいるのか、ここがポイントになります。
もし、あなたが一人暮らしで、親の助けを当てにできない環境にいたとします。
そのとき、事故に合い、働けなくなってしまったら。。
病院での治療費、入院費、今後の生活費はどうしたらよいでしょう。
保険でカバーするのか、考えてみてください。
Aどのタイプ
保険にはいくつかタイプがあります。
・医療保険
・生命保険
・損害保険
・介護保険
・学資保険
など
あなたがどういう状況になった時にどんな風に助けてほしいのか、
具体的に考えてみましょう。
全ての状況に対応している保険はありません。
あなたが本当に必要と思うときに、助けてくれる保険でないと
せっかく入ったのに意味がありません。
もしあなたがいま何かの保険に入っていたなら、
どういったときに助けてくれるのか理解できていますか?
もし複数個の保険にはいっているなら、
重複している部分があるかもしれません。
一度確認する事をおすすめします。
B会社または組合の保障
あなたは自分の会社の健康保険組合を知っていますか?
答えは健康保険証に書いてあります。
なぜ健康保険組合が出てくるのかというと、
組合によって保障が違うからなんです。
大手の組合であればあるほど保障が多いかと思います。
なので、保険検討の前に健康保険組合を確認するのも大事です。
必要以上に保険をかけてしまうのを防ぐためにも、確認してみてください。
まとめ
簡単にですが、保険を検討する前に確認してほしいポイントをお話しさせて頂きました。
@Aは良くある話だと思うのですが、Bは意外と盲点なので覚えていると、
役に立つことがあるかもしれません。
あとは、保険の相談はやはりプロにお願いするのが良いかと思います。
保険のことで分からなければ、保険ショップに相談に行けば、
無料で教えてくれます。
最近ではたくさんの保険ショップがありますので。。
タグ:保険
2020年02月13日
【ABAP】CONCATENATE命令―文字列結合
CONCATENATE命令は、文字列を結合する命令です。
基本的にはExcelの「concatenate」関数と同じような働きをするため難しい内容ではありません。
目次
構文ルール:CONCATENATE命令
SEPARATEDオプション構文ルール:SEPARATED BY
構文ルール:CONCATENATE命令
SEPARATEDオプション構文ルール:SEPARATED BY
構文ルール:CONCATENATE命令
CONCATENATE a1 a2 a3 ・・・・ INTO (変数).
a1、a2、a3については変数などのデータオブジェクトか、文字列を直接指定します。
Excelのconcatenate命令とは異なり、各オブジェクト/文字列の間のカンマは不要です。
スペースの扱いなど基本的なルールは、他の命令と同様です。
CONCATENATE命令の処理内容
CONCATENATE命令は、a1、a2、a3・・・と指定した順番に文字列を連結し、 "INTO" の後に指定した変数に格納する命令です。
CONCATENATE命令利用時の留意事項
1.データ型の制限
2.データ長(桁長)の制限
1.データ型の制限
2.データ長(桁長)の制限
留意事項@:データ型の制限
CONCATENATE命令で扱えるデータ型は以下の5つに限定されます。
C・・・文字列
N・・・数値
D・・・日付(YYYYMMDD)
T・・・時刻(HHMMSS)
STRING・・・文字列(可変長)
これ以外のデータ型についてCONCATENATE命令を行うと構文エラー、もしくはプログラム実行エラーになるため注意が必要です。
留意事項A:データ長(桁長)の制限
CONCATENATE a1 a2 a3 a4 INTO (変数).
とした場合、変数に文字列が収まりきらない場合があることを考慮する必要があります。
入りきらない分は全て切捨てされるため注意が必要です。
もし、CONCATENATE命令を利用してデータ長の桁溢れが発生した場合(格納先の変数に入りきらない場合)、SY-SUBRCには4がセットされます。
逆に、余った分はブランクとして処理されます。
SEPARATEDオプション
構文ルール:SEPARATED BY
CONCATENATE a1 a2 a3 ・・・・ INTO (変数)
SEPARATED BY (変数 or 文字列).
SEPARATEというのは、日本語で「分ける」「別れる」「分離する」といった意味になります。
「SEPARATED」オプションを利用すると、指定した変数 or 文字で格納する文字列を区切ることができます。
タグ:ABAP
【ABAP】CONDENSE命令
ABAPにおける文字列操作命令「CONDENSE」の使い方、「NO-GAPS」オプションについて解説します。
CONDENSEを日本語に直すと「濃縮する」「凝縮する」といった意味となり、ABAPのCONDENSE命令では変数(データオブジェクト)に含まれるブランクを削除し、文字列だけを残す処理を行います。
目次
1 CONDENSE命令とは
2NO-GAPSオプション
3CONDENSE命令の注意点
1 CONDENSE命令とは
2NO-GAPSオプション
3CONDENSE命令の注意点
1 CONDENSE命令とは
CONDENSE命令とは、ABAPにおける文字列の処理命令です。
冒頭でも解説した通り「CONDENSE」とは日本語で「凝縮する」という意味で、その意味の通り文字列を凝縮(縮める)処理を行います。
構文ルール:CONDENSE命令
CONDENSE (変数).
対象の文字列が格納されている変数をオペランドに指定するだけで、変数に含まれる文字列の@先頭と末尾に存在する空白と、Aその他の「連続するブランク」が消去され、ブランクが1つだけに変更されます。
データオブジェクトがstring型の場合には、変数の長さも合わせて圧縮してくれます。
string型でなければ、右側にブランクが格納されます。
2文字以上のブランクのみを消去するのがCONDENSE命令で理解が難しい点ですので、以下の通りきちんと整理して理解しておきましょう。
•ブランクが連続で存在する場合 ⇒ 連続するブランクを削除し1つのブランクに変更する
•ブランクが連続で存在しない場合 ⇒ 何もしない
CONDENSE命令は、MESSAGE命令を用いてテキストを動的に表示したい場合などに用いる場合などに応用できます。
2 NO-GAPSオプション
CONDENSE (変数) NO-GAPS.
「NO-GAPS」オプションを指定すると、すべてのブランクを削除するようになります。
NO-GAPSオプションを利用しない
⇒ 2文字以上のブランクが削除され、1つのブランクになる
NO-GAPSオプションを利用する
⇒ すべてのブランクが削除される
⇒ 2文字以上のブランクが削除され、1つのブランクになる
NO-GAPSオプションを利用する
⇒ すべてのブランクが削除される
つまり、NO-GAPSオプションを利用するとすべてのブランクが削除され文字列が左詰めされることになります。
3 CONDENSE命令の注意点
CONDENSE命令で指定する変数(データオブジェクト)は、文字型でなければいけません。
文字型以外の場合は、おそらく構文チェックにひっかかるはずです。
その場合は、変数のデータ型を変換して解決します。
タグ:ABAP
【ABAP】オフセットーデータ読込・書込
目次
1 オフセットとは?
2 ABAPでのオフセット利用方法
1 オフセットとは?
2 ABAPでのオフセット利用方法
オフセットとは?
オフセットとは、ざっくり説明するとデータの位置と長さを表したものです。
つまり、データの「どこから」「どれぐらいの長さ」を一度に表現するのが、オフセットです。
例として、「あいうえお」という文字列データを考えてみましょう。
実際のオフセットの利用例として「文字列からある特定の部分を切り取って利用したい!」みたいな場合を想像してみます。
例えば、「あいうえお」から、「うえお」というデータを切り取ります。
この場合、オフセットでは「2(3)」というように表します。
「2(3)」というのは、「どこから」の位置情報と「どれぐらいの長さ」というデータ長情報を一度に表現した形です。
「あいうえお」の3文字目(※0番目から3つ移動)から3文字分の長さを指定しているという意味になります。
「オフセット」の最初の数字は、0番目になる点に注意が必要です。
2 ABAPでのオフセット利用方法
変数名+2(4)
変数名の直後に「どこから」「どれぐらいの長さ」かを指定します。
先ほど解説したものと同一の書き方です。
上記では、指定した変数名の2文字目から4文字分を指定していることになります。
例えば、変数名に「123456789」が格納されている場合、「3456」が切り取られます。
オフセットで指定した値を逆に格納することもできます。
オフセットは、ABAPにだけ関わる概念ではありませんので、他言語を学ぶ際にも役立ちますので是非覚えておいてください。
タグ:ABAP
【ABAP】WRITE命令
WRITE命令の構文ルール、利用方法、各種オプションについて解説しています。
WRITE命令は、内容自体は理解しやすく構文も簡単ですが、出力位置の指定方法などに独特なコツとツボが存在します。
また、WRITE命令1つで一覧画面を作ることができる分、出力位置の指定や書式の設定方法など、かなり詳細なプログラミング知識が必要になってきます。
「WRITE命令の基本」に観点を絞って整理していきたいと思います。
目次
1 構文ルール:WRITE命令
2 WRITE AT
3 WRITE /
1 構文ルール:WRITE命令
2 WRITE AT
3 WRITE /
1 構文ルール:WRITE命令
WRITE (データオブジェクト or リテラル).
もっとも基本的な形です。
WRITE命令は、(データオブジェクト or リテラル)の内容を、一覧ページに書き込みます。
ここで指定するデータオブジェクトは基本どのデータ型でもOKです。
フィールドシンボルも指定することができます。
重要なのは、WRITE命令をこれから解説するオプションを利用しない場合(デフォルトで利用する場合)、出力形式や表示位置が自動的に指定されてしまうという点です。
したがって、実際のプログラムでWRITE命令がオプションなしで利用されるのはかなりのレアケースといっても過言ではないでしょう。
2 WRITE AT
WRITE AT 位置(長さ) データオブジェクト.
「AT」オプションにより、出力位置を指定することができます。
どこから、どれぐらいの桁長で出力するかを指定します。
WRITE AT命令では、この位置を探すのが結構難しいのです。
帳票系のプログラムは、この点に気を付けて細かくテストしてあげるのが重要であるといえます。
3 WRITE /
WRITE /(データオブジェクト).
WRITEの直後にスラッシュ "/" を入れると、次の行に出力されます。
改行前が空白文字の場合
"/" を用いる場合の注意点は、改行をする前の行がブランクの場合です。
改行をする前の行がブランクの場合は、"/" を記述しても改行されません。
"/" は、「改行する」というよりも「ブランクの行に出力する」という意味でとらえておくとよいでしょう。
タグ:ABAP
2020年02月10日
【ABAP】CLEAR命令
このページでは、データオブジェクト(変数・構造・内部テーブル)の初期化を行うCLEAR命令について解説します。
CLEAR命令以外の、初期化に関する命令であるREFRESH命令やFREE命令についても本ページで解説を加えておりますので、是非最後までご覧ください。
目次
1 構文ルール:CLEAR命令
1.1 CLEAR命令の処理内容
1.2 WITHオプション
2 REFRESH命令/FREE命令
2.1 REFRESH命令
2.2 FREE命令
3 基本はCLEAR命令を利用する
1 構文ルール:CLEAR命令
1.1 CLEAR命令の処理内容
1.2 WITHオプション
2 REFRESH命令/FREE命令
2.1 REFRESH命令
2.2 FREE命令
3 基本はCLEAR命令を利用する
1 構文ルール:CLEAR命令
CLEAR (データオブジェクト).
CLEAR命令は、指定したデータオブジェクトを初期化します。
1.1 CLEAR命令の処理内容
CLEAR命令は、指定したデータオブジェクトが変数であろうが、構造であろうが内部テーブルであろうが関係なく、データオブジェクトの内容を初期化します。
初期化というのは、簡単に言えばブランク化するということです。
対象のデータオブジェクトにVALUEオプションで "開始値" を与えていたとしても、関係ありません。
CLEAR命令では必ず対象のデータオブジェクトをブランクにする点に注意しましょう。
内部テーブルを指定した場合は、全ての行がクリアされ同時にメモリも開放されます。
1.2 WITHオプション
これはあまり知られていませんが、CLEAR命令には初期値を指定するWITHオプションが存在します。
CLEAR (データオブジェクト) WITH(初期値).
(初期値)の部分には、変数を指定することができます。
指定したデータオブジェクトに、(初期値)の値が設定されます。
2 REFRESH命令/FREE命令
CLEAR命令と似た命令に「REFRESH命令」「FREE」命令があります。
この章では、CLEAR命令と比較してREFRESH命令とFREE命令がどのような役割を果たすかを確認したいと思います。
まず結論から整理すると、3つの命令は、簡単に言うと以下のような違いがあります。
CLEAR命令 ⇒ 変数・構造・内部テーブルの初期化
REFRESH命令 ⇒ 内部テーブルの初期化
FREE命令 ⇒ 変数・構造・内部テーブルの初期化
REFRESH命令 ⇒ 内部テーブルの初期化
FREE命令 ⇒ 変数・構造・内部テーブルの初期化
なので、基本的にはCLEAR命令だけ覚えておけば初期化に関する処理はOKなのですが、古いソースコードではREFRESH命令やFREE命令が出てくる場合があります。
2.1 REFRESH命令
REFRESH命令は、内部テーブルを初期化する際に利用します。
基本的には、CLEAR命令と全く同じ働きをする命令です。
ただし、変数・構造には使えないという差異があります。
CLEAR命令と異なるのは「ヘッダー付き内部テーブル」に対する処理です。
ヘッダー付き内部テーブルというのは、内部テーブル+構造(作業エリア)が合体したテーブルです。
REFRESH命令では、このヘッダー付き内部テーブルの「内部テーブル」部分を初期化するのに対して、CLEAR命令では「構造(作業エリア)」部分を初期化します。
ただし、今はヘッダー付き内部テーブルは使わない方針となっているため、両者の区別は必ずしも必須の知識ではありません。
2.2 FREE命令
FREE命令は、変数・構造・内部テーブルの初期化を行います。
変数・構造に対してはCLEAR命令と同じ処理を行います。
内部テーブルに対しては、REFRESH命令と同じ処理になります。
ただし、FREE命令はCLEARとREFRESHと異なり、初期化と同時に「メモリの開放」を行います。
メモリの開放―。
すなわち、データオブジェクトを宣言したタイミングで割り当てられていた「プログラムの作業領域を削除する」ということです。
つまり、FREE命令を利用すると、宣言した「変数」「構造」「内部テーブル」の宣言を取り消す処理が行われるということです。
したがって、そのプログラム内でそれ以上そのデータオブジェクトを利用しない場合に用いるのがFREE命令といえます。
ただし、この命令はあまり利用しないはずです。
というのも、「変数」や「構造」「内部テーブル」が占有するメモリ領域は雀の涙である場合がほとんどであるためです。
3 基本はCLEAR命令を利用する
一昔前のABAPでは、CLEAR命令とREFRESH命令の違いを明確に意識する必要がありましたが今はヘッダー付き内部テーブルを用いないため、その差異を意識する必要がなくなりました。
そのため、データオブジェクトの初期化を行いたい場合は、基本CLEAR命令を利用するように心がけるようにしましょう。
タグ:ABAP
【ABAP】MOVE命令―値の代入
このページでは、MOVE命令による値の代入方法について解説します。
値の代入とは、変数に別の変数の値を入れたり、直接文字や数字などの値を入れたりして変数の値を変えることを言います。
ページ後半では、MOVE命令の応用編「MOVE-CORRESPONDING命令」についても解説しています。
目次
1 MOVE命令
1.1 構文ルール:MOVE命令
1.2 MOVEを利用しない場合:=
1.3 複数の代入(MOVE命令では不可)
1.4 データ型が異なる場合
2 MOVE-CORRESPONDING命令
2.1 構文ルール:MOVE-CORRESPONDING命令
2.2 MOVE-CORRESPONDING命令の注意点
1 MOVE命令
1.1 構文ルール:MOVE命令
1.2 MOVEを利用しない場合:=
1.3 複数の代入(MOVE命令では不可)
1.4 データ型が異なる場合
2 MOVE-CORRESPONDING命令
2.1 構文ルール:MOVE-CORRESPONDING命令
2.2 MOVE-CORRESPONDING命令の注意点
1 MOVE命令
MOVE A TO B.
構文ルールはこれだけです。
データオブジェクトAの値をデータオブジェクトBへ格納します。
Aの値を、そのままBに入れる、というイメージでOKです。
MOVE(動く、移動する)という意味につられて、データオブジェクトを移動すると誤解してしまう人がいますが、データオブジェクトをコピーするというのがMOVE命令の正しい理解です。
1.1 MOVEを利用しない場合:=
B = A.
MOVE命令を利用しなくても、”=” を用いてデータオブジェクトの代入が可能です。
注意すべきは、MOVE命令の場合とAとBが逆になることです。
ABAPではデータオブジェクトを ”=” で結んだ場合には、必ず右から左へ値がコピーされます。
1.2 複数の代入(MOVE命令では不可)
"=" を利用すれば、データオブジェクトAの値を「B」「C」「D」・・・の複数のデータオブジェクトに格納することもできます。
以下のように複数のデータオブジェクトを”=”で結んでみます。
B = C = D = A.
この処理は、以下の処理と全く同じように動きます。
すなわち、変数Aに「MOVE」という値が入っていれば、変数B・変数C・変数Dにも「MOVE」という値が格納されることになります。
D = A.
C = D.
B = C.
ただし、値の複数代入の利用頻度はそれほど高くないため、実際に利用するシーンはないかもしれません。
同じ値を格納するデータオブジェクトであれば、そもそもデータオブジェクトを分ける必要性が無いためです。
実際のコードで見かけることは恐らくない形かと思います。
MOVE命令では、上記のように一気に複数の変数に値をコピーすることができませんので注意が必要です。
1.4 データ型が異なる場合
応用知識として、データオブジェクトAとBのデータ型が異なる場合の処理について補足します。
変数Aが日付型で、変数Bが数値型の場合―。
こんな場合に、MOVE命令はどのような処理となるか?を解説します。
データ型が異なるが互換性がある場合(INTとNUMCなど)
互換性がある異なるデータ同士であれば、値の内容は代入される側のデータ型に自動的に変換されます。
A ⇒ ”2” INT2
B ⇒ ”2” NUMC
の場合に「B = A.」とすれば、値はそのまま”2”となりますが、データ型はBの「NUMC」に変換されます。
データ型の互換性がない場合
データ型の互換性がない場合には、データオブジェクトの代入は不可となります。
コンパイル時に構文エラーではじかれるか、プログラム実行時にエラーとなります。
2 MOVE-CORRESPONDING命令
ここからは、MOVE命令の派生形―。
MOVE-CORRESPONDING命令について解説します。
後から解説しますが、MOVE-CORRESPONDING命令はパフォーマンスの観点からあまり推奨されない命令ですが、知っておくべき大切な知識の1つです。
MOVE-CORRESPONDING命令を一言で説明すると、構造内の同じ名前の項目へ値を代入する命令です。
MOVE-CORRESPONDING命令では、自動的に同名の項目を参照し値を代入します。
同名の項目がない場合は、項目は無視され処理は行われません。
特に構文エラーやプログラム実行エラーにならないため、本当に値が代入されているかどうかは、デバッグをしながら注意深く確認する必要があります。
2.1 構文ルール:MOVE-CORRESPONDING命令
MOVE-CORRESPONDING (構造A) TO (構造B).
MOVE-CORRESPONDING命令では必ず構造を指定します。変数やテーブルを指定することはできません。
項目名に応じて値が自動的に代入されます。
2.2 MOVE-CORRESPONDING命令の注意点
冒頭でも説明した通り、MOVE-CORRESPONDING命令はSAP非推奨の命令です。
その大きな理由が「パフォーマンスの問題」です。
結論から言うと、MOVE-CORRESPONDING命令はパフォーマンス的に良い効果をもたらしません。
MOVE-CORRESPONDING命令は、@指定された構造の同じ名称を持つ項目を探し、A対応する項目に値を代入するという2ステップの処理が内部的に行われています。
MOVE-CORRESPONDING命令の内部処理
@同じ名称を持つ項目を探索する
A対応する項目が見つかれば値を代入する・対応する項目がなければ、何もしない
@同じ名称を持つ項目を探索する
A対応する項目が見つかれば値を代入する・対応する項目がなければ、何もしない
単なるMOVE命令と比較して処理の内容が複雑です。
基本的には、当該命令はLOOP処理の中で利用される想定(指定するのが構造であるため)ですので、対象となるレコード数が複数件存在する場合が多いです。
それが100件以上のレコードになる場合は、他の手段を検討したほうが良いでしょう。
タグ:ABAP