CODE領域では、どのような変数を使用できますか?
私が見ることができるものから、結合条件で定義した選択テーブルのヘッダー行のみがコーディングブロックで利用可能です。IE ITOB join ANLAから選択する場合は、ITOBとANLAの両方のヘッダー行を使用できます。(これは、RECORD PROCESSINGブロックにのみ関連します)。ただし、DATAブロックで独自の変数を定義できます。
データセットにアクセスし、選択後にレコードを制限する方法:
免責事項:これはハックのように感じます。すべての出力タイプで機能するわけではありませんが、データセットにアクセスする方法を示しています。
コードブロックINITIALIZATIONに、次のステートメントを追加します。
* Dummy comment to force generation
* of END-OF-SELECTION Block
コメントは何でもかまいません-これはすべて、プログラムジェネレータにデータセットにアクセスするために必要なEND-OF-SELECTIONブロックを生成させることです。
コードブロックEND-OF-SELECTIONに、以下を追加します。
data: lv_table type char100 value '%G00[]'.
field-symbols: <table> type any table.
assign (lv_table) to <table>.
if <table> is assigned.
sort <table>.
delete adjacent duplicates from <table>.
endif.
%G00は、生成されたプログラムの結果セットの変数名です(ヘッダー行だけでなく、[]を使用してテーブルにアクセスします)。生成されたプログラム変数はインフォセットで使用できないため、変数にアクセスするにはフィールドシンボルを使用する必要があります。変数が存在しない場合、割り当てのチェックにより実行時エラーが回避されます。
制限: 「ABAPリストモード」でクエリを実行する場合、このコードは効果がありません。これは、この場合、データが選択されているときにリストが書き込まれるため、事後の操作が遅すぎるためです。
私がやったこと:
ITOBの関連する個々のテーブルを手動で結合し(EQUI-> EQUZ-> ILOA)、IFLOTとIFLOTXをミックスから除外しました。これにより、終了日に追加の制限を設けるだけで済みました。ほとんどの場合、正しいWHERE句を使用することで、重複を回避できるレベルまでデータを分解することが可能だと思います。本当にオープンなままでいる必要があるときにSELECTDISTINCTを実行する方法の問題...