2017-01-13 15 views
1

Моя проблема заключается в следующем:
У меня есть один отчет под названием Y5000112.
Мои коллеги всегда выполнять его вручную один раз выбора варианта экранаV1, а затем выполнить его во второй раз с вариантV2 добавив результаты первого исполнения на выбор.
Эти результаты в этом случае: PERNR.Как выполнить отчет, учитывая результаты ранее выполненного отчета в ABAP

Моя цель:
Автоматизировать это - выполнить этот запрос дважды одним щелчком мыши и автоматически заполнить выбор PERNR второго исполнения результатами PERNR первого выполнения.

Я узнал, как вызвать выполнение отчета, а после этого еще один, как установить его в определенном варианте и получить до сих пор - [EDIT] после первого ответа я получил немного дальше, но я до сих пор не знаю как заполнить мои результаты и поместить их в следующий отчет. Отправить:

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

Это не так просто, как предполагалось, поэтому не будет никакого однострочного фрагмента.
Нет стандартного способа получения результатов из отчета. Попробуйте EXPORTING LIST TO MEMORY положение, но считают, что в докладе может необходимость адаптировать:

ВВЕСТИ [report_name]
С ВЫБОРА СТОЛ [rspar_tab]
ЭКСПОРТ СПИСОК В ПАМЯТЬ
И ВОЗВРАТ.

В результате вышеуказанного заявления должны быть считаны из памяти и приспособленный для вывода:

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-й итерации = входные парсы для второго), безусловно, плохой дизайн, и эти манипуляции должны выполняться внутренне.
Что касается меня, лучше переосмыслить всю архитектуру отчета.

+1

И как мне поместить этот t_list во второй выбор отчета? –

+2

Как обычно: зацикливание через него, извлечение необходимого поля и построение seltab для второго представления. Никто не сказал вам, что будет легко, как пирог. – Suncatcher

+1

true, thx для всей информации - как только я был успешным с этим, я согласен с ответом :) –