0

2つのテーブルから1つのオブジェクトにデータをプルする必要があります。両方のテーブルは機器番号を共有しており、テーブルEQKTから対応する説明を取得し、EQUZから所有者IDを取得する必要があります。

DATA: BEGIN OF t_report OCCURS 3,
matnr LIKE eqkt-equnr,
mtart LIKE eqkt-eqktx,
maktx LIKE equz-J_3GEIGNER,
END OF t_report.*-
DATA: d_repid LIKE sy-repid.

*-----------------------------------------
*--Selection Screen
SELECT-OPTIONS: s_matnr FOR eqkt-equnr.

*-----------------------------------------
START-OF-SELECTION.
*-Read data
  SELECT * FROM eqkt
  WHERE equnr IN s_matnr.
    CLEAR makt.
    SELECT SINGLE *
    FROM makt
    WHERE matnr = eqkt-equnr AND
    spras = sy-langu.
    MOVE: eqkt-equnr TO t_report-matnr,
    eqkt-eqktx TO t_report-mtart.
    APPEND t_report.
  ENDSELECT.

*This is where it stops working.
  SELECT * FROM EQUZ
  WHERE equnr IN s_matnr.
    MOVE: EQUZ-J_3GEIGNER TO t_report-maktx.
    APPEND t_report.
  ENDSELECT.

コードがコンパイルされ、それを表示するALVでは、テーブルの上部に「所有者」が正しく表示されますが、所有者のデータは入力されません(機器番号と説明が正しく表示されます)

4

2 に答える 2

4

あなたがする必要があるのは参加です:

SELECT T~EQUNR T~EQKTX Z~J_3GEIGNER 
  INTO TABLE T_REPORT
  FROM EQKT AS T
  JOIN EQUZ AS Z
    ON T~EQUNR = Z~EQUNR
  WHERE T~EQUNR IN S_MATNR
    AND T~SPRAS = SY-LANGU.

(この例MTARTでは、テーブルにフィールドが定義されていませんが、コード内でフィールドを移動します。もちろん、必要に応じてこの例を調整することもできます)。

于 2012-11-30T14:51:27.370 に答える
2

2番目のループはテーブルに新しいエントリを追加するべきではありませんが、基本的に最初のループで入力されたテーブルの3番目の列を埋める必要があります。

MAKTその場合は、2番目の選択を最初の選択に移動し、テーブルで行うのと同じ方法で行います。

SELECT SINGLE J_3GEIGNER  
    FROM EQUZ
    INTO T_REPORT-MAKTX
    WHERE equnr = eqkt-equnr.

ただし、実際に2つのループを保持したい場合は、次のように2番目のループでフィールドシンボルを使用する必要があります。

FIELD-SYMBOLS: <T_REPORT> LIKE LINE OF T_REPORT.
SELECT * FROM EQUZ WHERE equnr IN s_matnr.
  READ TABLE T_REPORT ASSIGNING <T_REPORT>
         WITH KEY MATNR = EQUZ-EQUNR.
  CHECK SY-SUBRC EQ 0.  " skip unknown material numbers
  <T_REPORT>-MAKTX = EQUZ-J_3GEIGNER.
ENDSELECT.

このようにして、テーブルの値EQUZが内部テーブルの適切なレコードに追加されますT_RECORD

ところで、もう1つのヒント:を使用せずOCCURS、テーブルを明示的に宣言してください。あなたの場合、それはこのようになるはずです:

DATA: BEGIN OF S_report,
        matnr LIKE eqkt-equnr,
        mtart LIKE eqkt-eqktx,
        maktx LIKE equz-J_3GEIGNER,
      END OF S_report,
      T_REPORT like standard table of S_REPORT.

もちろん、ヘッダー行を使用することはできませんがS_REPORT、作業領域として使用し、たとえばAPPEND S_RECORD TO T_RECORD代わり​​に書き込みを使用しますAPPEND T_RECORD(ただし、コードの読み取りと保守がより簡単になります)。

于 2012-11-30T00:07:05.267 に答える