sexta-feira, 7 de junho de 2013

Função - F4IF_INT_TABLE_VALUE_REQUEST


*  Um jeito usado frenquentemente pelos ABAP's para ver informações 
* sobre o campo e apertando o 'F1' no campo e assim vemos informações
* técnicas sobre o mesmo, só que os Key-user ( e o funcionais também )
* gostam de ir direto para os possíveis valores daquele campo, são
* os famosos Match Codes, que é só apertar aquele botão que fica no 
* limite do campo ou apertar o 'F4', o Problema é que as vezes no
* o elemento de dados usado naquele campo da tela de seleção não tem 
* ajuda de pesquisa, ou as vezes não vem a informação que precisa, ou,
* na minha opinião é a pior que é vir informações a mais que podem 
* confundir o Key-user, para resolver esse problema do Match Code, 
* podemos usar a função abaixo que é praticamente a mesma coisa só que
* aqui podemos manipular os campos que serão mostrados e os valores
* iremos adotar.
* T+ e bons estudos.

REPORT F4IF_INT_TABLE_VALUE_REQUEST.

* Declarações
DATA :
  it_scarr  
TYPE TABLE OF scarr,
  it_return 
TYPE TABLE OF ddshretval,
  st_return 
LIKE LINE OF  it_return.

* Tela de seleção
SELECTION-
SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
  p_carrid 
TYPE scarr-carrid.
SELECTION-
SCREEN END OF BLOCK b1.

*  Processo Inicial para o parametro da tela.
*  Pra ficar legal, comente as duas linha abaixo depois que você ver como 
* funciona, pra vocês verem a diferença entre o match code já existente 
* com o que criamos agora.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_carrid.
  
PERFORM z_select_scarr.

START-
OF-SELECTION.

*&---------------------------------------------------------------------*
*&      Form  Z_SELECT_SCARR
*&---------------------------------------------------------------------*
FORM z_select_scarr .

  
BREAK-POINT.
*  Seleção simples para trazer os dados que serão mostrados no match Code.
 
  
SELECT *
    
FROM scarr
    
INTO TABLE it_scarr.

*  Função Marota Abaixo.
*  Reparem nas informações que passei na função, e reparem também nos 
* outros parametros que não passei também pois se quiser deixar mais de um
* campo como retorno ( FIELD_TAB ) ou mais de uma linha também
* ( MULTIPLE_CHOICE ) é só querer , lembrando que os valores selecionados 
* no Match Code retornam na Tabela 'Return_tab',... Eu sei, meio Obvio mas
* não custa nada informar.

  
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    
EXPORTING
*   DDIC_STRUCTURE         = ' '
      retfield               = 
'CARRID'
*   PVALKEY                = ' '
*   DYNPPROG               = ' '
*   DYNPNR                 = ' '
*   DYNPROFIELD            = ' '
*   STEPL                  = 0
   window_title           = 
'Título da tela'
*   VALUE                  = ' '
   value_org              = 
'S'
*   MULTIPLE_CHOICE        = ' '
*   DISPLAY                = ' '
*   CALLBACK_PROGRAM       = ' '
*   CALLBACK_FORM          = ' '
*   MARK_TAB               =
* IMPORTING
*   USER_RESET             =
    
TABLES
      value_tab              = it_scarr
*   FIELD_TAB              =
   return_tab             = it_return
*   DYNPFLD_MAPPING        =
   
EXCEPTIONS
     parameter_error        = 
1
     no_values_found        = 
2
     
OTHERS                 = 3
            .

*  Aqui eu alimento o campo da tela de seleção com referencia ao
* registro selecionado no Match Code. Estou pegando o Index 1 pois
* esta sendo selecionada pelo User somente um registro.
  
IF sy-subrc = 0.
    
READ TABLE it_return INTO st_return
      
INDEX 1.
    p_carrid = st_return-fieldval.
  
ELSE.
    
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  
ENDIF.

ENDFORM.                    " Z_SELECT_SPFLI

2 comentários:

  1. Caaaara, mais um post que salvou minha pele haha
    Vocês realmente são ótimos!
    Parabéns por esse trabalho!

    ResponderExcluir
  2. E se eu precisar de todos os campos da linha selecionada e não apenas 1 campo? Abs.

    ResponderExcluir