!--a11y-->

内部テーブルをコンポーネントとして持たない構造に対しては、ABAP 変換ルールが適用されます。内部テーブルのある構造には、変換ルールはありません。互換性のある構造間でしか割当を行うことはできません。
以下の組み合わせで、変換可能な構造を変換することができます。
キ 構造を互換性のない構造に変換
キ 基本項目を構造に変換
キ 構造を基本項目に変換
どの場合も、まずデータ型 C 項目に関する構造がすべて変換され、その結果生成された基本項目間で変換が行われます。データ型が C の項目の長さは、構造コンポーネントの長さの和となります。このルールは、内部テーブルを持たない構造を使用したすべての操作に適用されます。
構造が整列させられる場合は、データ型が C の項目の長さは、フィラー項目も含めて計算されます。

元より短い構造に変換すると、元の構造は切り詰められます。元より長い構造に変換すると、最後の部分はデータ型に応じて初期化されず、空白が書き込まれます。
たとえば、ターゲット構造がソースよりも短く、構成が両方の構造で同じ場合、ある構造を互換性のない構造に割り当てる操作には、意味があります。ただし、互換性なし割当で書き込まれた構造の数値コンポーネントは、実行時エラーの原因となることもある無意味な値や無効な値を含む場合があります。

DATA: BEGIN OF FS1,
INT
TYPE I
VALUE 5,
PACK
TYPE P DECIMALS 2 VALUE ‘2.26’,
TEXT(10) TYPE C
VALUE ‘Fine text’,
FLOAT TYPE F
VALUE ‘1.234e+05’,
DATA
TYPE D
VALUE ‘19950916’,
END OF
FS1.
DATA: BEGIN OF FS2,
INT
TYPE I
VALUE 3,
PACK
TYPE P DECIMALS 2 VALUE ‘72.34’,
TEXT(5) TYPE C
VALUE ‘Hello’,
END OF
FS2.
WRITE: / FS1-INT, FS1-PACK; FS1-TEXT, FS1-FLOAT,
FS1-DATE.
WRITE: / FS2-INT, FS2-PACK,
FS2-TEXT.
MOVE FS1 TO FS2.
WRITE: / FS2-INT, FS2-PACK,
FS2-TEXT.
出力:
5 2.26 Fine text 1.234000000000000E+05 09161995
3 72.34 Hello
5 2.26 Fine
この例では、FS1 と FS2 いう 2 つの構造が定義されています。どちらの場合も、最初の 2 つのコンポーネントのデータ型は同じです。FS1 を FS2 に割り当てた後、最初の 2 つのコンポーネントは、1 つずつ移動されたときと同じ状態になります。FS2-TEXT には、FS1-TEXT の最初の 5 文字が書き込まれます。他の FS1 ポジションは、すべて省略されます。
