"
Apoiado por

Mete botões no ecrã de selecção

Quando num relatório é preciso criar botões para os utilizadores carregarem, normalmente recorre-se ao Screen Painter para criar um ecrã que depois é invocado pelo report com CALL SCREEN. Mas, a não ser que o ecrã a desenhar tenha já alguma complexidade, não é preciso apanhar a valente seca de fazer um ecrã que depois fica para lá. Ecrãs sempre me irritaram.

Mostro aquí um exemplo de utilização de botões num normalíssimo ecrã de selecção recorrendo a um botão chamado PUSHBUTTON e a um truque muito esperto chamado ONLI.

Vamos então por partes, como de costume. Primeiro a declaração do ecrã:


REPORT zbotoes.

TABLES: sscrfields.
DATA: g_ucomm TYPE syucomm.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-200.
SELECTION-SCREEN PUSHBUTTON /1(35) p_but1 USER-COMMAND but1.
SELECTION-SCREEN PUSHBUTTON /1(35) p_but2 USER-COMMAND but2.
SELECTION-SCREEN PUSHBUTTON /1(35) p_but3 USER-COMMAND but3.
SELECTION-SCREEN END OF BLOCK b1.

Usamos os botões tipo PUSHBUTTON e definimos o USER-COMMAND por forma a que ao serem carregados invoquem imediatamente o PAI do ecrã (vulgo AT SELECTION-SCREEN) sem ter de se carregar em ENTER nem em F8.

Nota a declaração da tabela SSCRFIELDS. Esta será necessária mais tarde no PAI para obter o código do botão carregado.

Os nomes dos botões P_BUT1, P_BUT2 e P_BUT3 são na verdade variáveis que deverão conter o texto que aparece no botão. Isto é no mínimo bizarro e só revela que os gajos que inventaram o ABAP deviam estar bêbedos. Mas enfim, definamos então os textos:


INITIALIZATION.
  p_but1 = 'Carrega aqui'(001).
  p_but2 = 'Ou aqui'(002).
  p_but3 = 'Ou então aqui'(003).

Assim definimos o texto dos botões de forma a que possa ser traduzido conforme já se explicou aqui. A seguir implementa-se o PAI:


AT SELECTION-SCREEN.
* Se se carregou num dos botões, guarda o seu código e continua  
  IF sscrfields-ucomm EQ 'BUT1' OR 
      sscrfields-ucomm EQ 'BUT2' OR 
      sscrfields-ucomm EQ 'BUT3'.    
    g_ucomm = sscrfields-ucomm.    
    sscrfields-ucomm = 'ONLI'. " Finge que carregou em F8. Belo truque ;)
  ENDIF.

Ao redefinir o UCOMM com ‘ONLI’ fingimos que se carregou no F8 o que faz com que o programa avance para o START-OF-SELECTION. Aí continuamos a vidinha:


START-OF-SELECTION.  
  CASE g_ucomm.    
    WHEN 'BUT1'.      
      WRITE 'Carregaste no botão de cima'.
    WHEN 'BUT2'.
      WRITE 'Carregaste no botão do meio'.
    WHEN 'BUT3'.  
      WRITE 'Carregaste no botão de baixo'.
ENDCASE.

E o resultado é este:

Percebeste? É invulgar e requer uns truques meio manhosos, mas não é nada de especial. Faz bom proveito.

O Abapinho saúda-vos.

2 comentários a “Mete botões no ecrã de selecção”

  1. Custodio Diz:

    Muito bom. Lembrando que podemos deixar os botoes mais bonitos, usando a mesma dica do post anterior.

    initialization.
    p_but1 = ‘@G1@ qualquer texto'(001).

    Abraco!

  2. Onofre Diz:

    simples e direto, foi uma excelente ajuda.

Deixe um comentário


Acerca do Abapinho
O Abapinho é suportado pelo WordPress
Artigos (RSS) e Comentários (RSS).