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.