segunda-feira, 21 de outubro de 2013

Programas Sem Objetos de textos


*  Na maioria das vezes que vamos trabalhar com os textos entramos no
* tradicional menu conforme imagem abaixo.


 
 
*  Mas como somos pessoas ousadas, queremos incluir esses textos na raça,
* sem precisar criar qualquer tipo de objeto de texto, hoje esse post vou
* mostrar como fazer isso, não sei te explicar qual momento poderiamos
* usar isso, mas o mais importante é saber que é possível e que não é
* dificil o quanto parece. Como sempre, o segredo é estar familiarizado com
* com a cara de Debugger, vamos começar
*&---------------------------------------------------------------------*
REPORT z_text_in_selection_screen.

TYPES :
 
BEGIN OF ty_name,
   name     
TYPE screen-name,
   
text(30TYPE c,
 
END OF   ty_name
 
.

DATA :
  st_name 
TYPE ty_name,
  it_name 
TYPE TABLE OF ty_name
  
.

* Declaração pra criar o Select-option.
DATA :
 vso_default 
TYPE c.

FIELD-SYMBOLS :
 <name> 
TYPE ANY.

* Tela de seleção
SELECTION-SCREEN BEGIN OF BLOCK b1.
PARAMETERS :
  p_field1
(3TYPE c,
  p_field2
(5TYPE c,
  p_field3    
TYPE p,
  p_field4    
TYPE i
  
.
SELECT-OPTIONS :
  s_field5  
FOR vso_default.
.
SELECTION-SCREEN END OF BLOCK   b1.

* Processo inicial ( PBO )
AT SELECTION-SCREEN OUTPUT.



* Percebam as informações da imagem abaixo.



  
LOOP AT SCREEN.

*  Existem algumas regras pra encontrar os textos o mais importante
* é que o campo grupo 3 estará alimentado com 'TXT' e a outra regra que
* uso é que o nome do campo referente àquele texto fica na posição+2(8).
    
IF screen-group3 'TXT'.

      
MOVE screen-name TO st_name-name.
        
BREAK-POINT.
      
CASE st_name-name+2(8).
        
WHEN 'P_FIELD1'.
          st_name
-text 'Material'.
        
WHEN 'P_FIELD2'.
          st_name
-text 'Descrição'.
        
WHEN 'P_FIELD3'.
          st_name
-text 'Campo 3'.
        
WHEN 'P_FIELD4'.
          st_name
-text 'Campo 4'.
        
WHEN 'S_FIELD5'.
          st_name
-text 'Campo 5'.
        
WHEN OTHERS.
      
ENDCASE.

      
APPEND st_name TO it_name.
      
CLEAR st_name.

    
ENDIF.

  
ENDLOOP.

* Atualiza o campo conforme os textos colocados na tabela de campos/texts
  
LOOP AT SCREEN.

    
READ TABLE it_name INTO st_name
      
with key name screen-name.

* Feed Dinamico.
    
IF sy-subrc is INITIAL.
        
BREAK-POINT.
      
ASSIGN (st_name-nameto <name>.
      <name> 
st_name-text.
      
MODIFY SCREEN.
    
ENDIF.


  
ENDLOOP.

START-OF-SELECTION.
Comentários
0 Comentários

Nenhum comentário:

Postar um comentário