Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Colocar Matchcode Estandar y No Estandar en ALV OO
Colocar Matchcode Estandar y No Estandar en ALV OO
Supongamos que tengo un ALV donde tengo un matchcode estndar para el campo
LIFNR y un matchcode para el campo CHARG que no es estndar.
Esta es mi estructura de datos del ALV:
TYPES:
BEGIN OF t_datos,
lifnr TYPE mseg-lifnr, " Proveedor
* LGC - Inicio Modificacin - 24/09/2010 - Mejoras GMM07
name1 TYPE lfa1-name1, " Nombre Proveedor
* LGC - Fin Modificacin - 24/09/2010 - Mejoras GMM07
matnr TYPE mseg-matnr, " Material
* LGC - Inicio Modificacin - 24/09/2010 - Mejoras GMM07
maktx TYPE makt-maktx, " Descripcin Material
bismt TYPE mara-bismt, " Nombre antiguo material
* LGC - Fin Modificacin - 24/09/2010 - Mejoras GMM07
erfmg TYPE char17,
" Cantidad
charg TYPE mseg-charg, " Lote
kostl TYPE mseg-kostl, " Centro de Coste
* LGC - Inicio Modificacin - 21/10/2010 - GMM10
aufnr TYPE mseg-aufnr, " Orden
* LGC - Fin Modificacin - 21/10/2010 - GMM10
bktxt TYPE mkpf-bktxt, " Texto
slabs TYPE mkol-slabs, " Stock especial K de libre utilizacin
END OF t_datos,
Primero debo setear mi mtodo con lo que se debe cargar en la ayuda de bsqueda
no estndar:
CLASS lcl_event_handler DEFINITION.
PUBLIC SECTION.
METHODS:
on_f4
FOR EVENT onf4 OF cl_gui_alv_grid
IMPORTING e_fieldname
es_row_no
er_event_data
et_bad_cells
e_display,
handle_data_changed
FOR EVENT data_changed OF cl_gui_alv_grid
IMPORTING er_data_changed.
ENDCLASS.
"lcl_event_handler DEFINITION
"ON_F4
METHOD handle_data_changed.
PERFORM f_handle_data_changed USING er_data_changed.
ENDMETHOD.
"handle_data_changed
ENDCLASS.
"lcl_event_handler IMPLEMENTATION
*&---------------------------------------------------------------------*
*&
Form ON_F4
*&---------------------------------------------------------------------*
*
Realiza las acciones de F4 para CHARG
*----------------------------------------------------------------------*
*
-->P_E_FIELDNAME text
*
-->P_ES_ROW_NO_ROW_ID text
*
-->P_ER_EVENT_DATA text
*
-->P_ET_BAD_CELLS text
*
-->P_E_DISPLAY text
*
-->P_ER_DATA_CHANGED text
*----------------------------------------------------------------------*
FORM on_f4 USING
p_e_fieldname
pe_row_id
p_er_event_data TYPE REF TO cl_alv_event_data
p_et_bad_cells
p_e_display.
*
p_er_data_changed
*
TYPE REF TO cl_alv_changed_data_protocol.
" ON_F4
Y para el campo CHARG que NO es standard: (no debo colocarle la tabla y campo
referencia ya que va a tomar los datos segn mi matchcode estndar)
*** Lote
CLEAR le_fieldcat.
le_fieldcat-col_pos = '7'.
le_fieldcat-fieldname = 'CHARG'.
le_fieldcat-tabname
= 'I_DATOS'.
le_fieldcat-outputlen = 10.
le_fieldcat-no_zero = c_check.
le_fieldcat-f4availabl = 'X'.
le_fieldcat-seltext = text-a04.
le_fieldcat-scrtext_l = text-a04.
le_fieldcat-edit = c_check.
APPEND le_fieldcat TO i_fieldcat.
Luego antes de la llamada del ALV debo completer esta table de la siguiente
manera:
La tabla i_f4 es de tipo:
i_f4 TYPE lvc_t_f4.
*** Carga tabla de matchcodes para campos
PERFORM f_cargar_f4.
*&---------------------------------------------------------------------*
*&
Form F_CARGAR_F4
*&---------------------------------------------------------------------*
*
Carga la tabla con los campos que van a tener F4
*----------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM f_cargar_f4 .
DATA: le_f4 TYPE lvc_s_f4.
*** Hay que cargarlos en orden alfabetico por nombre
* LGC - Inicio Modificacin - 21/10/2010 - GMM10
* Se agrega la ayuda de bsqueda para la orden
CLEAR le_f4.
le_f4-fieldname = 'AUFNR'.
le_f4-register = 'X'.
APPEND le_f4 TO i_f4.
* LGC - Fin Modificacin - 21/10/2010 - GMM10
CLEAR le_f4.
le_f4-fieldname = 'CHARG'.
le_f4-register = 'X'.
APPEND le_f4 TO i_f4.
CLEAR le_f4.
le_f4-fieldname = 'KOSTL'.
le_f4-register = 'X'.
APPEND le_f4 TO i_f4.
CLEAR le_f4.
le_f4-fieldname = 'LIFNR'.
le_f4-register = 'X'.
APPEND le_f4 TO i_f4.
CLEAR le_f4.
le_f4-fieldname = 'MATNR'.
le_f4-register = 'X'.
APPEND le_f4 TO i_f4.
ENDFORM.
" F_CARGAR_F4
Tambien antes de la llamada al ALV debo registrar esos botones como F4 llamando
a este metodo:
*** Llamo al mtodo para el F4
CALL METHOD d_grid->register_f4_for_fields
EXPORTING
it_f4 = i_f4.
Adjunto va un ejemplo de un programa que hace esto para un ALV que tiene lineas
que se pueden agregar y que tiene campos con matchcode standard y no standard.
Programa con F4
estandard y NO estandard en ALV OO