2017-01-13 18 views
1

問題は次のとおりです。
Y5000112というレポートが1つあります。
私の同僚は常に選択画面バリアントV1で一度手動で実行し、バリアントV2を選択する最初の実行の結果を加えることでそれをもう一度実行します。
この場合の結果はPERNRです。ABAPで以前に実行されたレポートの結果を指定したレポート

私の目標:
これを自動化 - 1回のクリックで2回クエリを実行し、2回目の実行のPERNR選択に最初の実行のPERNR結果を自動的に入力します。

私はレポートの実行をトリガする方法を見つけ出しました。その後、別の方法でそれを特定のバリアントに設定する方法を知りました。これは最初の回答の後に[編集]しました。私の結果をループして次のレポートに入れる方法を教えてください。submit:

DATA: t_list TYPE TABLE OF abaplist. 
*  lt_seltab TYPE TABLE OF rsparams, 
*  ls_selline LIKE LINE OF lt_seltab. 

SUBMIT Y5000114 
USING SELECTION-SET 'MA OPLAN TEST' 
EXPORTING LIST TO MEMORY 
AND RETURN. 

CALL FUNCTION 'LIST_FROM_MEMORY' 
TABLES 
    listobject = t_list 
EXCEPTIONS 
    not_found = 1 
    OTHERS = 2. 
IF sy-subrc <> 0. 
    WRITE 'Unable to get list from memory'. 
ELSE. 
* I want to fill ls_seltab here with all pernr (table pa0020) but I haven't got a clue how to do this 
* LOOP AT t_list. 
* WRITE /t_list. 
* ENDLOOP. 

    SUBMIT Y5000114 
* WITH-SELECTION-TABLE ls_seltab 
    USING SELECTION-SET 'MA OPLAN TEST2' 
    AND RETURN. 
ENDIF. 

PS
私はABAPについてよく知らないので、十分な情報を提供していない場合は、コメントに私に知らせてください。これを解決するために知る必要がある情報を見つけようとします。

これは、私が達成しようとしているものを非常に一般的に表現できる想像上のJSコードです。

function submitAndReturnExport(Reportname,VariantName,OptionalPernrSelection) 
{...return resultObject;} 

var t_list = submitAndReturnExport("Y5000114","MA OPLAN TEST"); 
var pernrArr = []; 
for (var i in t_list) 
{ 
pernrArr.push(t_list[i]["pernr"]); 
} 
submitAndReturnExport("Y5000114","MA OPLAN TEST2",pernrArr); 

答えて

3

これはそう簡単ではないので、1行のスニペットはありません。
レポートから結果を取得する標準的な方法はありません。 EXPORTING LIST TO MEMORY句を試してみてください、しかし、報告書を適合させる必要があるかもしれないことを考慮してください。

MEMORY
AND RETURN TO LISTを輸出
[rspar_tab] SELECTION-TABLE WITH [REPORT_NAME]
を提出します。

上記のステートメントの結果をメモリから読み出して出力するように適合されるべきである:

call function 'LIST_FROM_MEMORY' 
    TABLES 
    listobject  = t_list 
    EXCEPTIONS 
    not_found  = 1 
    others   = 2. 

if sy-subrc <> 0. 
    message 'Unable to get list from memory' type 'E'. 
endif. 

call function 'WRITE_LIST' 
    TABLES 
    listobject  = t_list 
    EXCEPTIONS 
    EMPTY_LIST  = 1 
    OTHERS   = 2 
     . 
if sy-subrc <> 0. 
    message 'Unable to write list' type 'E'. 
endif. 

別の(そしてより効率的なアプローチ、私見)クラスcl_salv_bs_runtime_infoを介してグリッドを得へのアクセスを獲得することです。例を参照してください。here

P.S. 同じを実行すると、相互に依存する異なるパラメータ(第1の反復の出力パーズ=第2の入力パーズ)は、確かにであり、悪いデザインであり、これらの操作は内部で実行する必要があります。
私にとっては、報告書全体のアーキテクチャーをよりよく考え直すことができます。

+1

t_listを2番目のレポート選択に戻すにはどうすればよいですか? –

+2

通常通り:それをループし、必要なフィールドを抽出して、2回目のサブミットのためにseltabを構築します。誰もあなたに、パイのように簡単ではないと言った。 – Suncatcher

+1

すべての情報についてtrue、thx - 私はあなたの答えを受け入れるでしょう:) –

関連する問題