O que é a cláusula NESTING LEVEL no comando SELECTION-SCREEN?
No caso de programas executáveis (ou do tipo relatório ou report), temos muitos recursos para contruir uma tela de seleção de maneira programática, ou seja, usando código ABAP e não o Screen Painter.
Para fazer telas com tabs é necessário contruí-las com subcreens, usando o comando SELECTION-SCREEN BEGIN OF SCREEN.
Uma das cláusulas muito específicas é a chamada NESTED LEVEL, usada para redimensionar frames dentro de uma tab.
Veja esse exemplo, sem o uso da cláusula NESTED LEVEL:
Figura 1 – Selection screen sem NESTED LEVEL.
Essa tela de seleção é resultado do código abaixo:
*&---------------------------------------------------------------------*
*& Report ZFURLAN04
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zfurlan04.
DATA: wa_spfli TYPE spfli.
SELECTION-SCREEN BEGIN OF SCREEN 101 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK limit WITH FRAME TITLE text-001.
SELECTION-SCREEN BEGIN OF BLOCK limit1 WITH FRAME TITLE text-002.
PARAMETERS: pa_car TYPE spfli-carrid,
pa_car3 TYPE spfli-carrid,
pa_car4 TYPE spfli-carrid,
pa_car5 TYPE spfli-carrid,
pa_car6 TYPE spfli-carrid,
pa_car7 TYPE spfli-carrid,
pa_car8 TYPE spfli-carrid,
pa_car9 TYPE spfli-carrid,
pa_car10 TYPE spfli-carrid,
pa_car11 TYPE spfli-carrid.
SELECTION-SCREEN END OF BLOCK limit1.
SELECTION-SCREEN END OF BLOCK limit.
SELECTION-SCREEN END OF SCREEN 101.
SELECTION-SCREEN BEGIN OF SCREEN 102 AS SUBSCREEN NESTING LEVEL 0.
PARAMETERS: pa_car1 TYPE spfli-carrid.
SELECTION-SCREEN END OF SCREEN 102.
SELECTION-SCREEN BEGIN OF SCREEN 103 AS SUBSCREEN NESTING LEVEL 0.
PARAMETERS: pa_car2 TYPE spfli-carrid.
SELECTION-SCREEN END OF SCREEN 103.
SELECTION-SCREEN BEGIN OF TABBED BLOCK tab_block FOR 5 LINES.
SELECTION-SCREEN TAB (10) tab1 USER-COMMAND comm1 DEFAULT SCREEN 101.
SELECTION-SCREEN TAB (10) tab2 USER-COMMAND comm2 DEFAULT SCREEN 102.
SELECTION-SCREEN TAB (10) tab3 USER-COMMAND comm3 DEFAULT SCREEN 103.
SELECTION-SCREEN END OF BLOCK tab_block.
INITIALIZATION.
tab1 = 'Tab1'.
tab2 = 'Tab2'.
tab3 = 'Tab3'.
START-OF-SELECTION.
Agora, usando NESTED LEVEL, a tela de seleção fica assim:
Figura 2 – Selection screen com NESTED LEVEL.
Isso é resultado do código abaixo:
*&---------------------------------------------------------------------*
*& Report ZFURLAN04
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zfurlan04.
DATA: wa_spfli TYPE spfli.
SELECTION-SCREEN BEGIN OF SCREEN 101 AS SUBSCREEN NESTING LEVEL 1.
SELECTION-SCREEN BEGIN OF BLOCK limit WITH FRAME TITLE text-001.
SELECTION-SCREEN BEGIN OF BLOCK limit1 WITH FRAME TITLE text-002.
PARAMETERS: pa_car TYPE spfli-carrid,
pa_car3 TYPE spfli-carrid,
pa_car4 TYPE spfli-carrid,
pa_car5 TYPE spfli-carrid,
pa_car6 TYPE spfli-carrid,
pa_car7 TYPE spfli-carrid,
pa_car8 TYPE spfli-carrid,
pa_car9 TYPE spfli-carrid,
pa_car10 TYPE spfli-carrid,
pa_car11 TYPE spfli-carrid.
SELECTION-SCREEN END OF BLOCK limit1.
SELECTION-SCREEN END OF BLOCK limit.
SELECTION-SCREEN END OF SCREEN 101.
SELECTION-SCREEN BEGIN OF SCREEN 102 AS SUBSCREEN NESTING LEVEL 0.
PARAMETERS: pa_car1 TYPE spfli-carrid.
SELECTION-SCREEN END OF SCREEN 102.
SELECTION-SCREEN BEGIN OF SCREEN 103 AS SUBSCREEN NESTING LEVEL 0.
PARAMETERS: pa_car2 TYPE spfli-carrid.
SELECTION-SCREEN END OF SCREEN 103.
SELECTION-SCREEN BEGIN OF TABBED BLOCK tab_block FOR 5 LINES.
SELECTION-SCREEN TAB (10) tab1 USER-COMMAND comm1 DEFAULT SCREEN 101.
SELECTION-SCREEN TAB (10) tab2 USER-COMMAND comm2 DEFAULT SCREEN 102.
SELECTION-SCREEN TAB (10) tab3 USER-COMMAND comm3 DEFAULT SCREEN 103.
SELECTION-SCREEN END OF BLOCK tab_block.
INITIALIZATION.
tab1 = 'Tab1'.
tab2 = 'Tab2'.
tab3 = 'Tab3'.
START-OF-SELECTION.
Conclusão
Quando usamos o comando NESTED LEVEL, o screen processor redesenha a os frames para evitar a barra de rolagem horizontal.
O número que vem após o NESTED LEVEL é o nível de ajuste do frame e vai até 4.