* Um dia desses foi solicitado para que eu fizesse um programa que mostrasse
* o resultado em um ALV na mesma tela que a tela de seleção, já veio na
* cabeça, entrar no layout da Tela e desenhar todos os parametros que
* seriam necessários para o resultado correto... Mas aí eu lembrei de um
* jeito bem Maroto de resolver, que é colocando uma SubScreen na Tela e
* assim eu não precisaria desenhar nada, somente criar um selectio-screen
* normal e declarar ele como uma Subscreen, e depois na tela chamar como
* o exemplo abaixo. A vantagem disso é a velocidade de desenvolvimento, pois
* não precisará ficar desenhando cada parametro de entrada das seleções na Tela.
REPORT z_call_subscreen.
DATA :
it_spfli TYPE TABLE OF spfli,
st_layout TYPE lvc_s_layo.
DATA:
o_alv TYPE REF TO cl_gui_alv_grid,
o_container TYPE REF TO cl_gui_custom_container.
SELECTION-SCREEN BEGIN OF SCREEN 0100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
p_carrid TYPE s_carr_id.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF SCREEN 0100.
START-OF-SELECTION.
* Primeiramente vamos chamar nossa Screen.
CALL SCREEN 9000.
* Agora vamos criar os objetos desse tela.
* o resultado em um ALV na mesma tela que a tela de seleção, já veio na
* cabeça, entrar no layout da Tela e desenhar todos os parametros que
* seriam necessários para o resultado correto... Mas aí eu lembrei de um
* jeito bem Maroto de resolver, que é colocando uma SubScreen na Tela e
* assim eu não precisaria desenhar nada, somente criar um selectio-screen
* normal e declarar ele como uma Subscreen, e depois na tela chamar como
* o exemplo abaixo. A vantagem disso é a velocidade de desenvolvimento, pois
* não precisará ficar desenhando cada parametro de entrada das seleções na Tela.
REPORT z_call_subscreen.
DATA :
it_spfli TYPE TABLE OF spfli,
st_layout TYPE lvc_s_layo.
DATA:
o_alv TYPE REF TO cl_gui_alv_grid,
o_container TYPE REF TO cl_gui_custom_container.
SELECTION-SCREEN BEGIN OF SCREEN 0100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
p_carrid TYPE s_carr_id.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF SCREEN 0100.
START-OF-SELECTION.
* Primeiramente vamos chamar nossa Screen.
CALL SCREEN 9000.
* Agora vamos criar os objetos desse tela.
* Veja as configurações.
*A logica colocada na Tela será essa. Reparem na Call subscreen
*&---------------------------------------------------------------------*
*PROCESS BEFORE OUTPUT.
* MODULE STATUS_9000.
* CALL SUBSCREEN SUB INCLUDING SY-REPID '0100'.
*
*PROCESS AFTER INPUT.
* MODULE USER_COMMAND_9000.
* CALL SUBSCREEN SUB.
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
MODULE status_9000 OUTPUT.
SET PF-STATUS 'DEFAULT'.
* SET TITLEBAR 'xxx'.
* A parte do ALV orientado vcs já sabem, espero eu.... Se não sabem veja
* Link abaixo.
*http://abapjuniores.blogspot.com.br/2012/03/alv-oo-orientado-objeto.html
PERFORM alv.
ENDMODULE. " STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*& Form ALV
*&---------------------------------------------------------------------*
FORM alv .
SELECT *
FROM spfli
INTO TABLE it_spfli
WHERE carrid = p_carrid.
IF o_alv IS BOUND.
o_alv->free( ).
ENDIF.
IF o_container IS NOT BOUND.
CREATE OBJECT o_container
EXPORTING
container_name = 'CCONTAINER'.
ENDIF.
CREATE OBJECT o_alv
EXPORTING
i_parent = o_container. " Parent Container
st_layout-cwidth_opt = 'X'.
st_layout-zebra = 'X'.
CALL METHOD o_alv->set_table_for_first_display
EXPORTING
i_structure_name = 'SPFLI'
is_layout = st_layout
CHANGING
it_outtab = it_spfli.
ENDFORM. " ALV
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
MODULE user_command_9000 INPUT.
CASE sy-ucomm.
WHEN 'BACK'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE TO SCREEN 0.
WHEN 'CANCEL'.
LEAVE PROGRAM.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_9000 INPUT
Mauro tudo bem? Por favor estou estudando abap, fiz um curso e estudo em casa diariamente.
ResponderExcluirFiz um programa o qual é uma seleção de cardapio de um restaurante, quando abre o programa ele pede para definir qual o dia da semana, e queria saber como posso chamar outra tela após isto, pois voce irá processar o programa, ou seja, entendo que tenho de definir o sy-ucomm com esta info correto? Ou tem outra maneira de fazer isto?
Cria essa primeira tela como 'Modal Dialog Box' na Screen Type que fica na 'Atributos' da sua tela, na hora de chamar no programa coloque o comando 'CALL SCREEN 9zzz STARTING AT 25 15', isso fará ele abrir igual PopUp, e depois trabalhe no PAI dessa tela indicado Pelo Sy-ucomm, não deve ser dificil, mas pra trabalhar com telas, é como eu sempre digo, tem que ter bem claro a idéia de PBO e PAI.
ResponderExcluirBoa tarde,
ResponderExcluirNesse exemplo como faria para colocar uma ajuda de pesquisa no parâmetro de seleção p_carrid?? Tentei utilizando matchcode mas não funciona na subtela.