Problema clássico, tenho um campo de tela que pode receber um valor do cliente ou fornecedor (KNA1 e LFA1), os campos das 2 tabelas são idênticos. No meu caso preciso de um matchcode que identifique os valores a serem exibidos, na tela eu tenho um radio buttton para escolha entre o cliente e o fornecedor e 1 campo para receber o código de 1 ou outro.
No código eu tenho o PROCESS ON VALUE-REQUEST para chamada do match code.
TYPES: BEGIN OF tp_parceiro,
line TYPE char50,
END OF tp_parceiro.
DATA: lt_parceiro TYPE TABLE OF tp_parceiro,
lt_rettab TYPE TABLE OF ddshretval,
lt_dfies TYPE TABLE OF dfies,
lt_dfies_aux TYPE TABLE OF dfies,
lt_dselc TYPE TABLE OF dselc.
DATA: lw_parceiro TYPE tp_parceiro,
lw_cli TYPE z_mestre_cliente,
lw_for TYPE z_mestre_fornecedor,
lw_rettab TYPE ddshretval,
lw_dfies TYPE dfies,
lw_dselc TYPE dselc.
DATA: l_tabname TYPE tabname,
l_fieldname TYPE fieldname.
DEFINE lm_ddget.
CALL FUNCTION 'DDIF_FIELDINFO_GET'
EXPORTING
tabname = &1
fieldname = &2
TABLES
dfies_tab = lt_dfies_aux
EXCEPTIONS
not_found = 1
internal_error = 2
OTHERS = 3.
IF sy-subrc = 0.
APPEND LINES OF lt_dfies_aux TO lt_dfies.
ENDIF.
END-OF-DEFINITION.
"Z_LOTE = estrutura do paraâmetro de tela
"Radio button da tela com o cliente/fornecedor
IF ( z_lote-partyp_t = c_partyp_cli AND
t_cliente[] IS INITIAL ).
l_tabname = 'Z_MESTRE_CLIENTE'.
l_fieldname = 'KUNNR'.
SELECT *
INTO lw_cli
FROM kna1
WHERE EXISTS ( SELECT *
FROM knb1
WHERE bukrs EQ z_lote-bukrs
AND kunnr EQ kna1~kunnr ).
CLEAR lw_parceiro.
lw_parceiro-line = lw_cli-land1.
APPEND lw_parceiro TO lt_parceiro.
lw_parceiro-line = lw_cli-kunnr.
APPEND lw_parceiro TO lt_parceiro.
lw_parceiro-line = lw_cli-name1.
APPEND lw_parceiro TO lt_parceiro.
lw_parceiro-line = lw_cli-regio.
APPEND lw_parceiro TO lt_parceiro.
ENDSELECT.
ELSEIF ( z_lote-partyp_t = c_partyp_for AND
t_fornecedor[] IS INITIAL ).
l_tabname = 'Z_MESTRE_FORNECEDOR'.
l_fieldname = 'LIFNR'.
SELECT *
INTO lw_for
FROM lfa1
WHERE EXISTS ( SELECT *
FROM lfb1
WHERE bukrs EQ z_lote-bukrs
AND lifnr EQ kna1~lifnr ).
CLEAR lw_parceiro.
lw_parceiro-line = lw_for-land1.
APPEND lw_parceiro TO lt_parceiro.
lw_parceiro-line = lw_for-lifnr.
APPEND lw_parceiro TO lt_parceiro.
lw_parceiro-line = lw_for-name1.
APPEND lw_parceiro TO lt_parceiro.
lw_parceiro-line = lw_for-regio.
APPEND lw_parceiro TO lt_parceiro.
ENDSELECT.
ENDIF.
lm_ddget l_tabname l_fieldname.
lm_ddget l_tabname 'NAME1'.
lm_ddget l_tabname 'REGIO'.
CLEAR lw_dselc.
lw_dselc-fldname = l_fieldname.
lw_dselc-dyfldname = 'Z_LOTE-TFRNR'.
APPEND lw_dselc TO lt_dselc.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = l_fieldname
dynpprog = sy-repid
dynpnr = '1000'
dynprofield = 'Z_LOTE-TFRNR'
TABLES
value_tab = lt_parceiro
field_tab = lt_dfies
return_tab = lt_rettab
dynpfld_mapping = lt_dselc
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Nenhum comentário:
Postar um comentário