!--a11y-->

データオブジェクト <f1> の値を変数<f2> に代入するには、以下の命令を使用します。
MOVE <f1> TO <f2>.
または、以下の命令でも同じ意味になります。
<f2> = <f1>.
<f1> の内容は変更されません。<f1> は変数でなくても構いません。リテラル、テキストシンボル、または定数にすることもできます。小数点は、ユーザの個人設定とは無関係に、常にピリオド (.) で指定する必要があります。
以下の書式で複数の値を代入することもできます。
<f4> = <f3> = <f2> = <f1>.
ABAP では、この書式を以下のように右から左へ処理します。
MOVE <f1> TO <f2>.
MOVE <f2> TO
<f3>.
MOVE <f3> TO
<f4>.
MOVE 命令 では ( または、ある値を等号によって別の値に代入するときは) 、他の項目の内容として項目名を動的に指定することはできません。このように動的に指定する場合は、フィールドシンボルを使用する必要があります。
<f1> を <f2> に代入する結果として、以下の 3 通りが考えられます。
...
1. データオブジェクト <f1> と <f2> には、完全な互換性があります。つまり、データ型、項目長、および小数点以下桁数が同一です。ソース項目<f1> は 1 バイトずつ対象項目<f2> に転送され、それ以上の操作は行われません。このケースのときに、MOVE 命令が最も効率的になります。
2. データオブジェクト <f1> と <f2> は非互換です。たとえばこれは、2 つの項目のデータ型は同じでも、長さが異なる場合です。ソース項目 <f1> の内容は、<f2> のデータ型と互換性があるように変換されてから転送されます。この処理は、<f1> と <f2> のデータ型の間に変換ルールがある場合のみ実行されます。データ型変換で MOVE 命令の効率は悪くなります。どの程度効率が悪くなるかは、それぞれの変換によって異なります。
3. データオブジェクト <f1> と <f2> は非互換であり、変換することはできません。代入は不可能です。この状況が静的に認識されると、構文エラーが発生します。プログラムの実行前に認識されないと、実行時エラーが発生します。
ソース項目と対象項目で、異なるデータ型にすることができます。異なるデータ型間の代入が少数の組合せに限定される他のプログラム言語とは違い、ABAP では多様な自動データ型変換を実行することができます。
たとえば、基本データ型のソース項目の内容を、他のどんなデータ型の対象項目にも代入することができます。このルールの唯一の例外は、型 D および T の項目間で値を代入できないことです。ABAP では、構造と基本項目の間、または 2 つの構造間でも代入がサポートされています。

DATA: T(10) TYPE C,
NUMBER TYPE P DECIMALS 2,
COUNT TYPE I.
T = 1111.
MOVE '5.75' TO NUMBER.
COUNT = NUMBER.
これらの代入により、T 、NUMBER 、および COUNT の各項目値は、それぞれ‘1111 ’ 、5.75 、および 6 になります。数字リテラル 1111 を T に代入すると、このリテラルは長さ 10 の文字項目に変換されます。NUMBER を COUNT に代入すると、小数は整数に丸められます ( プログラム属性固定小数点演算を設定してある場合) 。
構造のコンポーネント間で値を移動するには、以下の命令を使用します。
MOVE-CORRESPONDING <struct1> TO <struct2>.
この命令により、構造<struct1> のコンポーネントの内容が、構造 <struct2> の同一名称のコンポーネントに移されます。
この命令はその実行時に、以下のように同一名の項目ペアごとに一連の MOVE 命令に分解されます。
MOVE STRUCT1-<ci> TO STRUCT2-<ci>.
必要なデータ型変換は、すべてこのレベルで行われます。この処理は、構造の変換ルールが適用される、MOVE 命令によって構造全体を代入する際の処理とは異なります。

DATA: BEGIN OF ADDRESS,
FIRSTNAME(20) VALUE
'Fred',
SURNAME(20) VALUE
'Flintstone',
INITIALS(4) VALUE
'FF',
STREET(20) VALUE 'Cave
Avenue,
NUMBER TYPE I VALUE
'11'.
POSTCODE
TYPE N VALUE '98765'.
CITY(20)
VALUE 'Bedrock',
END OF ADDRESS.
DATA: BEGIN OF NAME,
SURNAME(20),
FIRSTNAME(20),
INITIALS(4),
TITLE(10) VALUE
'Mister',
END OF NAME.
MOVE-CORRESPONDING ADDRESS TO NAME.
この例では、NAME-SURNAME 、NAME-FIRSTNAME 、および NAME-INITIALS の値が、それぞれ 'Flintstone’ 、‘Fred’ 、'FF' に設定されます。NAME-TITLE には値 'Mister' が保持されます。
