* 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
* 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
Caaaara, mais um post que salvou minha pele haha
ResponderExcluirVocês realmente são ótimos!
Parabéns por esse trabalho!
E se eu precisar de todos os campos da linha selecionada e não apenas 1 campo? Abs.
ResponderExcluir