PDA

Ver la Versión Completa : Matchcodes


eduardomendo
06/05/08, 10:03:08
Hola a tod@s. Tengo un pequeño problema. Tengo 2 campos de entradas con matchcode. En el primero eligo una clave de una tabla. En el segundo tengo que elegir otro campo de otra tabla que tiene como campo clave el que elijo y el mismo que en el matchcode de la tabla del campo anterior. Necesito que al dar al matchcode del segundo campo, solo me aparezcan los registros que tengan como una de sus claves la que elegí en el campo anterior.
Creo que es un poco lioso explicado asi, pero a ver si alguien me ha entendido.
Muchas gracias

zonanet
06/05/08, 13:57:33
Qué tal Eduardo!

Chécate este reporte, tal vez te pueda servir

demo_dynpro_f4_help_module



Saludos

Claudia Valdespino
06/05/08, 22:42:37
Hola Eduardo, puedes emplear una ayuda de búsqueda programada para tu desarrollo. Te explico con un ejemplo de creación de distritos:

1. Tienes tu pantalla 0150 con los campos departamento, provincia, distrito, descripción del distrito y los botones grabar y cancelar. En la lógica de proceso de la pantalla tienes:

process before output.
module status_0150. (vacío)

process after input.
module grabar. (lógica para grabar el registro en una tabla)

process on value-request.
field w_codprov module f4_provincias.
field w_coddis module f4_distritos.

2. El código del module f4_provincias es el siguiente:

* Obtienes el valor del campo departamento mediante la función GET_DYNP_VALUE:
DATA: w(4) TYPE c.
CALL FUNCTION 'GET_DYNP_VALUE'
EXPORTING
i_field = 'W_CODDEP2' (nombre del campo)
i_repid = 'ZPS_MNT_TAB_LOCAL' (nombre del programa)
i_dynnr = '0150' (número de la pantalla)
CHANGING
o_value = w. (valor del campo solicitado)

* Selecciona todas las provincias que pertenecen al departamento seleccionado:
REFRESH itab_prov_dep. CLEAR v_depa.
CONCATENATE '%' w '%' INTO v_depa.
SELECT codprov desprov INTO TABLE itab_prov_dep
FROM zamprovincia
WHERE coddep LIKE v_depa.

* Tabla de campos a mostrar
REFRESH h_field_tab.

* Código de provincia
CLEAR h_field_tab.
h_field_tab-tabname = 'ITAB_PROV_DEP'.
h_field_tab-fieldname = 'CODPROV'.
h_field_tab-scrtext_s = 'Cód. Prov.'.
h_field_tab-scrtext_m = 'Cód. Provincia'.
h_field_tab-scrtext_l = 'Código Provincia'.
h_field_tab-position = '1'.
h_field_tab-offset = '0'.
h_field_tab-leng = '2'.
h_field_tab-outputlen = '2'.
h_field_tab-intlen = '2'.
APPEND h_field_tab.

* Descripción de provincia
CLEAR h_field_tab.
h_field_tab-tabname = 'ITAB_PROV_DEP'.
h_field_tab-fieldname = 'DESPROV'.
h_field_tab-scrtext_s = 'Descripción Provincia'.
h_field_tab-scrtext_m = 'Descripción Provincia'.
h_field_tab-scrtext_l = 'Descripción Provincia'.
h_field_tab-position = '2'.
h_field_tab-offset = '2'.
h_field_tab-leng = '22'.
h_field_tab-outputlen = '22'.
h_field_tab-intlen = '22'.
APPEND h_field_tab.

* Se llama a la función para mostrar la ventana (pop-up) con los valores de la provincias por departamento:
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'CODPROV' (Campo a recuperar)
dynpprog = 'ZPS_MNT_TAB_LOCAL' (Nombre del programa)
dynpnr = '0150' (Número de la pantalla)
dynprofield = 'W_CODDEP2' (Nombre del campo origen)
value_org = 'S'
TABLES
value_tab = itab_prov_dep (Tabla interna de valores propuestos)
field_tab = h_field_tab (Tabla interna de campos mostrar)
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.

IF sy-subrc NE 0.
MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

3. El código del module f4_distritos para obtener los distritos por departamento tiene la misma lógica que el module f4_provincias, solo que para llenar la tabla interna ahora consultas la tabla de distritos.

Espero el código te sea de ayuda. Suerte!!! ;)