Você está na página 1de 5

;Dica de hoje… como adicionar um botão na tela de seleção?

Veja o código abaixo. Você pode também usar o velho e sempre bom CTRL+C
CTRL+V e testar num programa local num ambiente que você tenha acesso:

REPORT z_teste_botao.

* Estrutura necessária para manipulação do elemento na Tela


*----------------------------------------------------------
TABLES: sscrfields.

* Type Pools com os Ícones (duplo clique para visualiza-los)     


*----------------------------------------------------------
TYPE-POOLS: icon.

* Declaração do Botão
* Você pode utilizar da função 1 até a função 5
* O atalho será Ctrl+Fx onde X é o número da Function Key
*--------------------------------------------------------
SELECTION-SCREEN: FUNCTION KEY 1. "Declaração do Botão

* O Botão por sí só não faz uma tela de seleção.


* Outros elementos de tela devem existir, e o botão irá aparecer ao
lado
* do botão executar.
*---------------------------------------------------------------------
--
PARAMETERS: p_dummy TYPE char10.

* Descrevendo o botão no evento Initialization


*---------------------------------------------
INITIALIZATION.

PERFORM cria_botao.

* Manipualação do Botão
*----------------------
AT SELECTION-SCREEN.

IF sy-ucomm = 'FC01'.
BREAK-POINT.
ENDIF.

*&--------------------------------------------------------------------
-*
*&      Form  cria_botao
*&--------------------------------------------------------------------
-*
FORM cria_botao .

*  Estrutura para descrever o botão


DATA: wa_button TYPE smp_dyntxt.

*  Nome do Botão
wa_button-text      = 'Botao Log de Erros'.

*  Ícone do Botão
wa_button-icon_id   = icon_error_protocol.

*  Texto que aparecerá ao lado do ícone (pode ser vazio)


wa_button-icon_text = 'Log de Erros'.

*  Quickinfo (aparece quando o user passar o mouse sobre o botao)


wa_button-quickinfo = 'Visualizar Log de Erros'.

*  Associa essas propriedades com a função 1


sscrfields-functxt_01 = wa_button.

ENDFORM.                    " cria_botao

Tela de Seleção Turbinada – Parte 3 –


Esconder Elementos
Essa dica é mais para aquele Consultor que curte uma tela bonita. Eu sei que muita
gente acha que o correto é simplesmente “fazer funcionar”, mas eu sempre penso que
“se é pra fazer, tem que fazer direito“!

O código abaixo possue a explicação de como fazer para esconder e mostrar objetos
numa tela de seleção de acordo com a ação do usuário. É meu, fica muito style a tela
hehe. Vamos ao código:

REPORT z_mudatela_zombie.

TABLES: mara.

* Vamos controlar a mudança de tela através de dois radiobuttons


*---------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME.

* É importante colocar o user-command aqui, pois sem ele o report não


* irá passar pelo evento AT SELECTION SCREEN OUTPUT quando o user
* clicar em qualquer um dos radio buttons. É um pseudo-gato ;)
* Também tem que deixar o DEFAULT, senão o radio button não chega
* com o X marcado na primeira visualização da tela! :(
*---------------------------------------------------------------------
PARAMETERS: rb_tela1 RADIOBUTTON GROUP rb01 USER-COMMAND muda_tela
DEFAULT 'X',
rb_tela2 RADIOBUTTON GROUP rb01.

SELECTION-SCREEN END OF BLOCK bl01.

* Tela com Select Options.


* O MODIF ID deve ser o MESMO para todos os elementos da tela
*------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK bl02 WITH FRAME.

SELECT-OPTIONS: s_matnr FOR mara-matnr MODIF ID t1,


s_mtart FOR mara-mtart MODIF ID t1.
SELECTION-SCREEN END OF BLOCK bl02.

* Tela com Parameters.


* O MODIF ID deve ser o MESMO para todos os elementos da tela
*------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK bl03 WITH FRAME.

PARAMETERS: p_matnr TYPE mara-matnr MODIF ID t2,


p_mtart TYPE mara-mtart MODIF ID t2.

SELECTION-SCREEN END OF BLOCK bl03.

* Evento que irá controlar a mudança da tela. Lembre-se que


* é necessário o USER-COMMAND nos RadioButtons para o Report passar
* por aqui!
*------------------------------------------------------------------
AT SELECTION-SCREEN OUTPUT.

PERFORM modifica_tela.

*&---------------------------------------------------------------*
*& Form MODIFICA_TELA
*&---------------------------------------------------------------*
FORM modifica_tela .

* O MODIF ID deixa o objeto "Modificavel" na tela de seleção.


* Vamos usar um Loop at Screen para modificá-la.
*------------------------------------------------------------
LOOP AT SCREEN.

* Se o user quiser telas com parametros


*------------------------------------------------------------------
IF rb_tela1 = 'X'.

* Dentro do campo GROUP1 vai ficar o valor do MODIF ID.


* Daí é só tratar os atributos do elemento como necessário

* Esconde Tela com Parameters


*--------------------------------
IF screen-group1 = 'T2'.
screen-invisible = 1.
screen-input = 0.
screen-active = 0.
MODIFY SCREEN.
CONTINUE.
ENDIF.

* Mostra tela com Select Options


*-----------------------------------
IF screen-group1 = 'T1'.
screen-invisible = 0.
screen-input = 1.
screen-active = 1.
MODIFY SCREEN.
CONTINUE.
ENDIF.

ELSE.

* Esconde tela com Select Options


*-------------------------------------
IF screen-group1 = 'T1'.
screen-invisible = 1.
screen-input = 0.
screen-active = 0.
MODIFY SCREEN.
CONTINUE.
ENDIF.

* Mostra tela com Parameters


*--------------------------------
IF screen-group1 = 'T2'.
screen-invisible = 0.
screen-input = 1.
screen-active = 1.
MODIFY SCREEN.
CONTINUE.
ENDIF.

ENDIF.
ENDLOOP.

ENDFORM. "

Tela de Seleção Turbinada – Parte 5 –


Parafernálias para sua Tela

by Mauricio CruzJanuary 4, 2011

Agora que eu já expliquei com mais detalhes algumas partes mais trabalhosas para
deixar sua tela de seleção mais, ahm, divertida ( 😛 ), vou mostrar algumas coisas
simples que você pode inserir na sua tela.

São eles: Listbox, Comentários, Botões, Linhas, Espaços e Inclusão de elementos de


uma tela em outra. Código:

REPORT z_adicionais_zombie.

* Vamos começar a nos divertir hehe :D


* Ah, e boa parte dessas coisas você vê no HELP (F1).
*----------------------------------------------

SELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME.


*------> Pular Linhas
PARAMETER: p_pula TYPE char10.
SELECTION-SCREEN SKIP 1. "Podem ser X linhas
PARAMETER: p_pulou TYPE char10.
SELECTION-SCREEN SKIP 2.

*-------> Comentário
SELECTION-SCREEN COMMENT /1(50) comment.
SELECTION-SCREEN SKIP 1.

*-------> Botão para apertar (apertar = clicar hehe)


SELECTION-SCREEN PUSHBUTTON /2(13) botao USER-COMMAND click.
SELECTION-SCREEN SKIP 1.

*-------> Linha Horizontal


SELECTION-SCREEN ULINE. "mesmo esquema do WRITE
SELECTION-SCREEN SKIP 1.

*-------> ListBox (ele puxa os valores do domínio)


PARAMETERS: p_listb TYPE MARA-MTART
AS LISTBOX VISIBLE LENGTH 10.

SELECTION-SCREEN END OF BLOCK bl01.

*----------------------------------------------------------
* Vou criar outra tela de seleção, igual a de cima!
* Escrever tudo denovo? Pra que?
SELECTION-SCREEN BEGIN OF SCREEN 9000 AS WINDOW.

*-------> Incluir uma tela de seleção em outras


SELECTION-SCREEN INCLUDE BLOCKS bl01.
* Dá pra fazer só com parameters ou só com select-options
* aperte F1 no INCLUDE ali pra ver!

SELECTION-SCREEN END OF SCREEN 9000.

*--------------------------------------
INITIALIZATION.

* Texto do Comentário
comment = 'Eu sou um comentário, duh'.
* Texto do Botão
botao = 'Click Me!'.

*--------------------------------------
AT SELECTION-SCREEN.

* Clicou no botao!
IF sy-ucomm = 'CLICK'.
* E com isso, você pode chamar a mesma tela como pop-up X vezes
* (até o sap não aguentar e dar uns problemas malucos!).
CALL SELECTION-SCREEN 9000 STARTING AT 5 5.
ENDIF.

Você também pode gostar