1

例:テーブルITOBを使用します。EQUNRとANLNRを選択すると、複数のエントリが表示されます(主に、一意でないILOAN、TPLNR、およびDATBIレコードが原因です)。どうすれば次と同等のことができますか?

select distinct equnr anlnr from itob into (itob-equnr, itob-anlnr)
  where (some_wherclause).

個別のエントリのみを切り替えるチェックボックスまたはラジオボタンが欠落している場所にありますか?

また

CODE領域では、どのような変数を使用できますか?結果セットにアクセスできれば、そこで重複を削除できます。生成されたプログラムで使用されている%dtabにアクセスしようとしましたが、うまくいきませんでした。

4

1 に答える 1

2

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を実行する方法の問題...

于 2010-09-23T00:12:40.397 に答える