web-dev-qa-db-ja.com

読み取りテーブルTRANSPORTINGを使用してitabから1つのフィールドを取得します

私は次のように内部テーブルから1つのフィールドを取得しようとしています:

READ TABLE tbl_peps TRANSPORTING ususap INTO lv_responsable WITH KEY usr03 = wa_tbl_prps-usr03.

この文は間違っています、それは私にエラーを与えます

tbl_pepsとlv_responsableは互換性がありません

「輸送フィールド」を使用してそれを達成する方法はありますか?

6
funkeeiads

READ TABLEの-​​ ABAPドキュメント によると、トランスポートオプションを使用する場合、データを受信する作業領域は、読み取り元のテーブルの行タイプと互換性がある必要があります。宣言された変数lv_responsabletbl_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.
4
Dirk Trilsbeek

新しい構文(少なくともABAP 7.40)を使用すると、ワークエリアは不要になります。あなたの例のコーディングは次のようになります。

try.
    lv_responsable = tbl_peps[ usr03 = wa_tbl_prps-usr03 ]-ususap.
catch CX_SY_ITAB_LINE_NOT_FOUND.
endtry.

新しいテーブル式の詳細については、 ここ を参照してください。

14
jaegli

根本的な問題の解決

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.
3
András

道はない。 Lv_responsableは次のように定義する必要があります。

DATA: lv_responsable LIKE LINE OF tbl_peps.

そうして初めて、項目lv_responsable-ususapの値を項目タイプの別の変数に割り当てることができます。

0
Jagger