最初に、選択データを含む構造を定義する必要があります。要件の構造の例は次のようになります。

構造をアクティブにして、エラーが含まれていないことを確認することを忘れないでください。
次に、選択レポートを作成します。レポートをデータ選択方法として使用するには、2 つのコメントを追加する必要があり*<QUERY_HEAD>
ます*<QUERY_BODY>
。選択した行を SE11 で定義した構造と同じ名前の内部テーブルに入れるループ内で、*<QUERY_HEAD>
selecton の開始が通常行く場所に配置する必要があります。*<QUERY_BODY>
これがどのように機能するかを示すために、レポートの例を作成しました。
REPORT ZSTACK_RBKP_INFOSET_QUERY.
tables:
rbkp,
ZSTACK_RBKP_INFOSET_STR.
select-OPTIONS:
so_belnr for rbkp-belnr,
so_gjahr for rbkp-gjahr.
data:
itab type standard table of ZSTACK_RBKP_INFOSET_STR,
wa_itab type ZSTACK_RBKP_INFOSET_STR.
data:
lv_diff type dmbtr.
*here your selection starts.
*<QUERY_HEAD>
select rbkp~belnr
rbkp~gjahr
rbkp~rmwwr
rbkp~waers
sum( RBDRSEG~DMBTR ) as DMBTR
from RBKP left outer join RBDRSEG
on RBDRSEG~RBLNR eq RBKP~BELNR and
RBDRSEG~RJAHR eq RBKP~GJAHR
into corresponding fields of table itab
where rbkp~belnr in so_belnr and
rbkp~gjahr in so_gjahr
group by rbkp~belnr rbkp~gjahr rbkp~rmwwr rbkp~waers.
loop at itab into wa_itab.
lv_diff = wa_itab-dmbtr - wa_itab-rmwwr.
move lv_diff to wa_itab-diff.
modify itab from wa_itab.
endloop.
* this is the part that forwards your result set to the infoset
LOOP AT itab INTO ZSTACK_RBKP_INFOSET_STR.
*<QUERY_BODY>
ENDLOOP.
サンプル レポートでは、最初に の各ドキュメントRBKP
の合計とともに行が選択されます。その後、 は、選択した列との差で列を更新します。RBDRSEG-DMBTR
RBKP
loop
DIFF
RMWWR
DMBTR
残念ながら、私たちの SAP システムではテーブルRBDRSEG
が空なので、レポートのその部分をテストできません。ただし、最初のブレーク ポイントの前にブレーク ポイントを追加しloop
てレポートを開始するだけで、システムでレポートをテストできます。次に、内部テーブルで選択した行を見て、選択が期待どおりに機能するかどうかを確認できるはずITAB
です。
サンプル レポートの注意事項: と の両方が異なる通貨フィールドRBKP
を参照しています。したがって、値が異なる通貨RBDRSEG
である可能性がありますRMWWR
(ドキュメントの通貨であり、デフォルトの会社の通貨のようです)。その場合は、差額を計算する前に適切な通貨に換算する必要があります。/の文書番号と/の年の両方を使用して、必ず参加してください( のフィールドはであり、 にも存在します)。DMBTR
RMWWR
DMBTR
RBKP
RBDRSEG
BELNR
RBLNR
GJAHR
RJAHR
RBDRSEG
RJAHR
GJAHR
GJAHR
RBDRSEG
レポートが期待どおりに機能したら、レポートに基づいて情報セットを作成します。その後、他の情報セットと同じように情報セットを使用できます。
更新: ABAP を初めて使用することについて書いたので、情報セットのレポートを作成する必要があるとすぐに思いました。実際の要件によっては、これが当てはまらない場合があります。テーブル RBKP に対して単純な infoset クエリを作成し、infoset エディターを使用して行の合計と差の 2 つのフィールドを追加し、RBDRSEG 内の対応するすべての行の合計を選択して RMWWR の差を計算する abap コードを追加します。そしてその合算。これは、RBKP の行ごとに選択を繰り返す必要があるため、カスタマイズされた abap レポートよりもおそらく遅くなります。そのため、ユーザーがクエリしようとしているデータの量に大きく依存します。カスタマイズされた ABAP レポートは問題ありません。
infoset デザイナーを使用したバリアントに関する追加情報
最初に、テーブル RBKP のみを読み取る単純な infoset を作成します (そのため、infoset 定義にテーブル結合はありません)。次に、アプリケーション固有の機能強化に進みます。

私の例では、すでに 2 つのフィールドLINETOTAL
とDIFFERENCE
. どちらも と同じプロパティを持っていますRBDRSEG-DMBTR
。RBDRSEG-DMBTR
の合計を含むフィールドが、差を含むフィールドよりも低いシーケンス (ここでは「1」) であることを確認してください。順序によって、最初に計算されるフィールドが決まります。
最初のフィールドのコーディング ボタンをクリックし、コーディングを追加して、1 つのRBKP
エントリの合計を選択します。

次に、difference フィールドに対して同じ操作を行います。

フィールド リストで両方のフィールドを使用できるようになったので、右側のフィールド グループに追加できます。

前述のように、入力したコードは RBKP の各行に対して処理されます。そのため、最初の結果セットのサイズによっては、実行時のパフォーマンスに大きな影響を与える可能性があります。