私は次のように内部テーブルから1つのフィールドを取得しようとしています:
READ TABLE tbl_peps TRANSPORTING ususap INTO lv_responsable WITH KEY usr03 = wa_tbl_prps-usr03.
この文は間違っています、それは私にエラーを与えます
tbl_pepsとlv_responsableは互換性がありません
。
「輸送フィールド」を使用してそれを達成する方法はありますか?
READ TABLE
の- ABAPドキュメント によると、トランスポートオプションを使用する場合、データを受信する作業領域は、読み取り元のテーブルの行タイプと互換性がある必要があります。宣言された変数lv_responsable
はtbl_peps
と互換性がないようです。したがって、コードをチェックするときにエラーが発生します。
これは機能するはずです:
DATA:
wa_peps like line of tbl_peps.
READ TABLE tbl_peps TRANSPORTING ususap INTO wa_peps WITH KEY usr03 = wa_tbl_prps-usr03.
move wa_peps-ususap to lv_responsable.
新しい構文(少なくともABAP 7.40)を使用すると、ワークエリアは不要になります。あなたの例のコーディングは次のようになります。
try.
lv_responsable = tbl_peps[ usr03 = wa_tbl_prps-usr03 ]-ususap.
catch CX_SY_ITAB_LINE_NOT_FOUND.
endtry.
新しいテーブル式の詳細については、 ここ を参照してください。
1つのフィールドのみを転送する理由は、メモリを節約し、処理を高速化するためです。これを行うためのより良い方法があります。フィールドシンボルを使用します。
READ TABLE tbl_peps
ASSIGNING FIELD-SYMBOL(<fs_responsable>)
WITH KEY usr03 = wa_tbl_prps-usr03.
インライン定義はABAP740以降でのみ機能しますが、以前のバージョンではこれを行うことができます。
FIELD-SYMBOLS: <fs_responsable> LIKE LINE OF tbl_peps.
READ TABLE tbl_peps
ASSIGNING <fs_responsable>
WITH KEY usr03 = wa_tbl_prps-usr03.
道はない。 Lv_responsable
は次のように定義する必要があります。
DATA: lv_responsable LIKE LINE OF tbl_peps.
そうして初めて、項目lv_responsable-ususap
の値を項目タイプの別の変数に割り当てることができます。