* Sabe quando o funcional te chama falando que está afim de fazer um relatorio
* muito parecido com o um relatorio standard mas cheio de 'Fru Fru',
* neste momento você já começa a pensar que terá que 'debugar' o standard
* pra saber como chegar nos dados principais do relatorio antes mesmo de
* incluir as 'Melhorias', pois seus problemas acabaram.... rs ( Sempre quis
* falar isso). Com esse post podemos processar o relatorio standard e pegar
* os dados que seriam exibidos na tela, e depois disso, com todos os dados
* base, podemos fazer os adicionais sem problema nenhum. Bora pro codigo.
* Abaixo temos um exemplo, aonde o funcional me pediu para trazer os dados
* referente a documentos financeiros usando apenas o 'Conta Razão', 'Empresa'
* e 'Data de lançamento'... Conversamos sobre os acessos na tabela e
* mostrei que não tinhamos esse Indice na tabela e que talvez sofreriamos
* com a performance do programa, teriamos que ter mais parametros para
* conseguir acessar as tabelas com as chaves e assim entregar conforme
* esperado, o funcional insastifeito depois de ter feito uma documentação
* da demanda tudo baseada nessa seleção sem chaves faz o seguinte comentario,
* - Ahhhhh, mas no standard funciona rápido quando eu coloco somente essas
* informações !!!
* Eu em choque, sem entender, pergunto. - Rápido ?!! Standard ?!!
* Depois disso o funcional complementa. - Sim, quando rodo a FBL3N
* ( Relatorio de partidas individuais - Contas do razão ) me mostra um
* relatorio no final que aparece relativamente rapido.
* Com essas informações lembrei que conversando com um amigo do trabalho,
* o mesmo me falou sobre uma classe que deixa o retorno do processo em
* memoria e assim podemos buscar essa informação e depois tratar como
* quiser.
* Segue codigo comentado abaixo como exemplo.
REPORT zrtts.
*--------------------------------------------------------------------*
TABLES :
bkpf, bseg.
TYPES :
BEGIN OF ty_bkpf,
bukrs TYPE bkpf-bukrs,
belnr TYPE bkpf-belnr,
gjahr TYPE bkpf-gjahr,
budat TYPE bkpf-budat,
END OF ty_bkpf.
DATA :
t_bkpf TYPE TABLE OF ty_bkpf,
s_bkpf TYPE ty_bkpf.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
SELECT-OPTIONS :
r_saknr FOR bseg-saknr,
r_bukrs FOR bseg-bukrs,
r_budat FOR bkpf-budat.
SELECTION-SCREEN END OF BLOCK b1.
* Definir para não mostrar ALV, Metadata
cl_salv_bs_runtime_info=>set(
EXPORTING display = abap_false
metadata = abap_false
data = abap_true ).
* Chamado do programa do FBL3N e passando os parametros de tela.
SUBMIT rfitemgl
WITH sd_saknr IN r_saknr
WITH sd_bukrs IN r_bukrs
WITH so_budat IN r_budat
WITH x_opsel EQ abap_false
WITH x_clsel EQ abap_false
WITH x_aisel EQ abap_true
WITH x_norm EQ abap_true
* WITH pa_vari EQ '/OES_EXT'
AND RETURN.
TRY.
DATA ol_pay_data TYPE REF TO data.
FIELD-SYMBOLS: <fs_pay_data> TYPE ANY TABLE,
<pay_data> TYPE ANY.
* Busca tabela do ALV em processamento do Submit
cl_salv_bs_runtime_info=>get_data_ref(
IMPORTING r_data = ol_pay_data ).
* Atribui para tabela dinâmica
ASSIGN ol_pay_data->* TO <fs_pay_data>.
CATCH cx_salv_bs_sc_runtime_info.
* #ec no_handler
ENDTRY.
* Limpa runtime
cl_salv_bs_runtime_info=>clear_all( ).
*--------------------------------------------------------------------*
* No ambiente atual que estou não consigo usar comando 'Inline' mas
* segue abaixo eu pegando o retorno e colocando na minha tabela interna.
FIELD-SYMBOLS :
<bukrs> TYPE bkpf-bukrs,
<belnr> TYPE bkpf-belnr,
<gjahr> TYPE bkpf-gjahr,
<budat> TYPE bkpf-budat.
LOOP AT <fs_pay_data> ASSIGNING <pay_data>.
ASSIGN COMPONENT 'BUKRS' OF STRUCTURE <pay_data> TO <bukrs>.
ASSIGN COMPONENT 'BELNR' OF STRUCTURE <pay_data> TO <belnr>.
ASSIGN COMPONENT 'GJAHR' OF STRUCTURE <pay_data> TO <gjahr>.
ASSIGN COMPONENT 'BUDAT' OF STRUCTURE <pay_data> TO <budat>.
s_bkpf-bukrs = <bukrs>.
s_bkpf-belnr = <belnr>.
s_bkpf-gjahr = <gjahr>.
s_bkpf-budat = <budat>.
APPEND s_bkpf TO t_bkpf.
CLEAR s_bkpf.
ENDLOOP.
*--------------------------------------------------------------------*
* Gostaria que vocês percebecem que mesmo colocando layout no relatorio
* standard quando darmos o 'Get' dos dados, ele vira toda a tabela de
* saida que seria usada no ALV da transação Standard.
* Espero ter ajudado e qualquer coisa tamo aeeeee. Vlw.