Ver Mensaje Individual
  #6  
Viejo 30/03/06, 14:30:12
Avatar de tracer
tracer tracer is offline
Administrator
 
Fecha de Ingreso: feb 2006
Localización: España (Madrid)
Mensajes: 503
y el otro es:

************************************************************************
*
* INCLUDE ZIALV
*
* DESCRIPCIÓN: Tipos, variables, constantes y forms para trabajo
* con ALV's
*
* INSTRUCCIONES: Sera obligatorio para un correcto funcionamiento de la
* libreria añadir al codigo del report un form llamado USER_COMMAND
* creado con la estructura del existente comentado al final de este
* include.
*
* Además será obligatorio tambien añadir al codigo del report un form
* llamado LAYOUT creado con la estructura del existente comentado al
* final de este include.
*
* Si se cumple todo esto, simplemente habra que llamar al form
* ALV_MOSTRAR_INFORME pasandole como parametros la tabla a mostrar y el
* nombre de la estructura de dicha tabla, estructura que debera ser del
* diccionario de datos, no definida en el codigo del listado, ademas se
* le pasará una constante que podrá tener dos valores.
* - C_TIPO_ALV <- Si queremos modo grid
* - C_TIPO_LIST <- Si queremos modo listado
*
* Si se prefiere podrá crearse el catalogo de campos manualmente
* rellenando la estructura GT_FIELDCAT aunque es la opción menos
* recomendada, en este caso el parametro P_STRUCT de
* ALV_MOSTRAR_INFORME se pasará en blanco.
*
* Permite añadir lineas a la cabecera mediante el uso del form
* ALV_RELLENAR_CABECERA pasandole los textos y los tres modos de
* texto en la cabecera, a saber: (SOLO FUNCIONA EN MODO GRID)
* - C_TIPO_GRANDE
* - C_TIPO_MEDIANO
* - C_TIPO_PEQUEÑO
*
* Ademas es posible mostrar un logo por pantalla, para ello es
* necesario usar el form ALV_ASIGNAR_LOGO pasandole el nombre del
* logo que previamente se habrá creado siguiendo lo siguientes pasos:
* (SOLO FUNCIONA EN MODO GRID)
* PASOS PARA SUBIR LOGO:
*
* 1. Ir a la transcción OAER
*
* 2. En el nombre de clase, pon 'PICTURES'
*
* 3. El tipo de clase es 'OT'
*
* 4. En el "object key" introduce el nombre que le quieres dar al
* logo.
*
* 5. Ejecuta
*
* 6. En la siguiente pantalla seleciona documento standard. Pincha
* sobre el incono de pantalla y entonces te preguntará por el
* nombre del fichero que vas a subir.
*
* La librería tambien permite añadir rutinas a los distintos eventos que
* el programador desee asignandole al nombre del evento el nombre de una
* form mediante la funcion ALV_EVENTS.
*
* EJEMPLO DE USO:
*
* END-OF-SELECTION.
*
** Preparamos los eventos:
* PERFORM alv_events.
*
** Excluimos codigos para status
* PERFORM alv_excluir_codigo USING 'CODE'.
** Con esta linea activaremos nuestro status personal, caso de no
** reellenar esta linea o rellenarla con el status en blanco mostraria
** el status standar
* PERFORM alv_aniadir_status USING 'STANDARD_FULLSCREEN'.*
** Se pueden insertar tantas lineas como se deseen en el encabezado.
* PERFORM alv_rellenar_cabecera USING 'TITULO 1'
* 'TITULO 2'
* c_tipo_grande.
*
** Asignamos codigo a los eventos que queramos ejecutar (TOP-OF-PAGE)
* PERFORM alv_rellenar_eventos
* USING
* 'USER_COMMAND' <-Nombre evento
* 'USER_COMMAND'. <-Nombre form para evento
* PERFORM alv_rellenar_eventos
* USING
* 'TOP-OF-PAGE'
* c_form_cabecera.
* PERFORM alv_asignar_logo
* USING
* 'ZLOGOSUBIDO'.
*
** Mostramos el listado
* PERFORM alv_mostrar_informe TABLES i_listado
* USING 'ZSTR_LISTADO'
* c_tipo_alv.
*
* AUTOR: Ignacio Arnaiz Piorno FECHA: 06-03-2005
* CONTACTO:
*
* ----------------------------------------------------------------------
* CONTROL DE MODIFICACIONES
* AUTOR EMPRESA FECHA MOTIVO
* .......... ....... DD/MM/AA ................................
* .......... ....... DD/MM/AA ................................
*-----------------------------------------------------------------------
************************************************************************

************************************************************************
* Definición de tipos
************************************************************************
TYPE-POOLS: slis.

************************************************************************
* Definición de constantes
************************************************************************
CONSTANTS:
c_click LIKE sy-ucomm VALUE '&IC1', " Codigo del doble click
c_struct(50) TYPE c VALUE '',
c_pf_status_set TYPE slis_formname VALUE 'ALV_SET_STATUS',
c_user_command TYPE slis_formname VALUE 'USER_COMMAND',
c_layout TYPE slis_formname VALUE 'LAYOUT',
c_a(1) TYPE c VALUE 'A',
c_xselp(5) TYPE c VALUE 'XSELP',
c_marked TYPE c VALUE 'X',
c_form_cabecera TYPE slis_formname VALUE 'ALV_CABECERA',
c_tipo_grande TYPE c VALUE 'H',
c_tipo_mediano TYPE c VALUE 'S',
c_tipo_pequeno TYPE c VALUE 'A',
c_tipo_alv TYPE c VALUE '1',
c_tipo_list TYPE c VALUE '2'.

************************************************************************
* Definición de variables
************************************************************************

************************************************************************
* Definición de estructuras
************************************************************************
DATA: x_structure LIKE dd02l-tabname. "SAP Table
DATA: x_header LIKE dd02l-tabname. "SAP Table
DATA: x_item LIKE dd02l-tabname. "SAP Table
DATA: gt_layout TYPE slis_layout_alv.
DATA: gt_variant LIKE disvariant.
DATA: gt_list_top_of_page TYPE slis_t_listheader.
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv.
DATA: gt_fieldcat_hd LIKE LINE OF gt_fieldcat.
DATA: gt_events TYPE slis_t_event .
DATA: gt_okcodes_a_excluir TYPE slis_extab OCCURS 0 WITH HEADER LINE.
DATA: d_logo(1000) TYPE c.
DATA: d_status LIKE c_pf_status_set.
* Relacion entre los datos de cabecera y posicion
DATA: gt_key TYPE slis_keyinfo_alv.

DATA d_alv_status LIKE c_pf_status_set.


************************************************************************
*
* FORMS ADICIONALES
*
************************************************************************
*---------------------------------------------------------------------*
* FORM alv_excluir_codigo *
*---------------------------------------------------------------------*
* Una vez que se lance el ALV con un STATUS cualquiera definido
* por el usuario (o bien el standar) el codigo P_CODIGO será
* omitido, y por tanto no se dibujará el botón asociado a él.
*---------------------------------------------------------------------*
FORM alv_excluir_codigo USING p_codigo.

DATA lt_okcodes_a_excluir TYPE slis_extab.

lt_okcodes_a_excluir-fcode = p_codigo.
APPEND lt_okcodes_a_excluir TO gt_okcodes_a_excluir.

SORT gt_okcodes_a_excluir.
DELETE ADJACENT DUPLICATES FROM gt_okcodes_a_excluir.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form alv_mostrar_informe
*&---------------------------------------------------------------------*
* Se utilizará en el programa una vez que se haya rellenado todo
* lo necesario para lanzar el listado de la tabla P_OUTPUT.
* P_TIPO será igual a C_TIPO_ALV si se quiere lanzar el ALV en
* modo GRID en caso de preferirlo en modo lista se pasará este
* parametro igual a C_TIPO_LIST.
* P_STRUCT será el nombre de una estructura del diccionario de
* la que tomar la estructura de salida del listado. En caso de
* pasarlo en blanco habrá que haber creado con anterioridad un
* catalogo de campos bien con el perform ALV_CATALOGO o bien
* añadiendo directamente los campos al catalogo gt_fieldcat[].
*----------------------------------------------------------------------*
FORM alv_mostrar_informe TABLES p_output
USING p_struct
p_tipo.

DATA l_struct LIKE c_struct.

l_struct = p_struct.

* Damos forma al informe
PERFORM (c_layout) IN PROGRAM (sy-cprog).

PERFORM alv_show_report TABLES p_output
USING l_struct
p_tipo.

ENDFORM. " alv_mostrar_informe
*

*&--------------------------------------------------------------------*
*& Form alv_mostrar_informe_jerarquico
*&--------------------------------------------------------------------*
* REDEFINIR CUANDO SE USE
*---------------------------------------------------------------------*
FORM alv_mostrar_informe_jerarquico TABLES i_header
i_item
USING p_header
p_item1
p_key1
p_key2
p_key3
p_key4
p_key5.


ENDFORM. " alv_mostrar_informe_jerarquico

*&---------------------------------------------------------------------*
*& Form alv_catalogo
*&---------------------------------------------------------------------*
* Inicializa el catalogo de campos gt_fieldcat[] añadiendole
* todos los campos de la estructura del diccionario P_ESTRUCTURA
*----------------------------------------------------------------------*
* -->P_C_ESTRUCTURA_LISTADO text
*----------------------------------------------------------------------*
FORM alv_catalogo USING p_estructura.

REFRESH gt_fieldcat.

DATA l_estructura LIKE dd02l-tabname.

l_estructura = p_estructura.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = l_estructura
i_client_never_display = 'X'
CHANGING
ct_fieldcat = gt_fieldcat[].

LOOP AT gt_fieldcat INTO gt_fieldcat_hd
WHERE seltext_l IS initial
AND seltext_m IS initial
AND seltext_s IS initial.

SELECT SINGLE ddtext
INTO gt_fieldcat_hd-seltext_l
FROM dd03t
WHERE tabname = l_estructura
AND ddlanguage = sy-langu
AND fieldname = gt_fieldcat_hd-fieldname.

gt_fieldcat_hd-seltext_m = gt_fieldcat_hd-seltext_l.
gt_fieldcat_hd-seltext_s = gt_fieldcat_hd-seltext_l.

MODIFY gt_fieldcat FROM gt_fieldcat_hd.
ENDLOOP.

ENDFORM. " alv_catalogo

*&---------------------------------------------------------------------*
*& Form alv_set_status
*&---------------------------------------------------------------------*
* Inicializa el status
*----------------------------------------------------------------------*
* -->P_C_ESTRUCTURA_LISTADO text
*----------------------------------------------------------------------*
FORM alv_set_status USING p_estructura.

SET PF-STATUS d_alv_status EXCLUDING gt_okcodes_a_excluir.

ENDFORM. " alv_set_status

*&---------------------------------------------------------------------*
*& Form alv_show_report
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM alv_show_report TABLES p_output
USING p_struct LIKE c_struct
p_tipo.

* Define local data
DATA: v_repid LIKE sy-repid.
DATA l_form_cabecera LIKE c_form_cabecera.
v_repid = sy-repid.
x_structure = p_struct.

* Check that our selection retrieves any result
IF p_output[] IS INITIAL.
MESSAGE i038(001) WITH 'No se mostrara la tabla porque esta vacia'.
ELSE.

IF NOT p_struct IS INITIAL.
PERFORM alv_catalogo USING p_struct.
ENDIF.

IF NOT gt_layout-box_fieldname IS INITIAL.
DELETE gt_fieldcat WHERE fieldname = gt_layout-box_fieldname.
ENDIF.

IF NOT d_alv_status IS INITIAL
AND NOT gt_events[] IS INITIAL.
PERFORM alv_rellenar_eventos
USING
'PF_STATUS_SET'
c_pf_status_set.
ENDIF.

IF gt_list_top_of_page[] IS INITIAL.
CLEAR l_form_cabecera.
ELSE.
l_form_cabecera = c_form_cabecera.
ENDIF.

CASE p_tipo.
WHEN c_tipo_alv.
* Visualice the list with a standard function
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = v_repid
* i_callback_pf_status_set = d_alv_status
* i_callback_user_command = c_user_command
i_callback_top_of_page = l_form_cabecera
* i_structure_name = x_structure
is_layout = gt_layout
i_save = c_a
it_events = gt_events
it_fieldcat = gt_fieldcat
TABLES
t_outtab = p_output.
WHEN c_tipo_list.
* Visualice the list with a standard function
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = v_repid
* i_callback_pf_status_set = d_alv_status
* i_callback_user_command = c_user_command
* i_callback_top_of_page = l_form_cabecera
* i_structure_name = x_structure
is_layout = gt_layout
i_save = c_a
it_events = gt_events
it_fieldcat = gt_fieldcat
TABLES
t_outtab = p_output.
ENDCASE.

ENDIF.
ENDFORM. " alv_show_report


*---------------------------------------------------------------------*
* FORM ALV_ANIADIR_STATUS *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> P_STATUS *
*---------------------------------------------------------------------*
FORM alv_aniadir_status USING p_status.

d_alv_status = p_status.

ENDFORM.

*&---------------------------------------------------------------------*
*& Form alv_cabecera
*&---------------------------------------------------------------------*
* MUESTRA LA CABECERA
*----------------------------------------------------------------------*
FORM alv_cabecera.
IF NOT gt_list_top_of_page IS INITIAL
OR NOT d_logo IS INITIAL.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = gt_list_top_of_page
i_logo = d_logo
i_end_of_list_grid = ''.
ENDIF.
ENDFORM. " alv_cabecera

*&---------------------------------------------------------------------*
*& Form alv_rellenar_eventos
*&---------------------------------------------------------------------*
* ASIGNA UN FORM A UN EVENTO A EJECUTAR
*----------------------------------------------------------------------*
* --> NOMBRE DEL EVENTO
* --> NOMBRE DEL FORM PARA DICHO EVENTO
*----------------------------------------------------------------------*
FORM alv_rellenar_eventos USING p_nombre_evento
p_form_para_evento.

DATA: ls_event TYPE slis_alv_event.

* Rutina que controlará el status GUI
READ TABLE gt_events WITH KEY name = p_nombre_evento
INTO ls_event.
IF sy-subrc = 0.
MOVE p_form_para_evento TO ls_event-form.
MODIFY gt_events FROM ls_event TRANSPORTING form
WHERE name = p_nombre_evento.
ELSE.
MESSAGE e000(01) WITH 'Error en el form alv_rellenar_eventos.'
'No existe el evento'
p_nombre_evento
'.'.
ENDIF.

ENDFORM. " rellenar_eventos

*&---------------------------------------------------------------------*
*& Form ALV_RELLENAR_CABECERA
*&---------------------------------------------------------------------*
* Rellena una linea de la cabecera
*----------------------------------------------------------------------*
* -->P_GT_LIST_TOP_OF_PAGE text
*----------------------------------------------------------------------*
FORM alv_rellenar_cabecera USING p_texto_negrita
p_texto_normal
p_tipo.

DATA: ls_line TYPE slis_listheader.

CLEAR:ls_line.

ls_line-key = p_texto_negrita.
ls_line-typ = p_tipo.
ls_line-info = p_texto_normal.

APPEND ls_line TO gt_list_top_of_page.

ENDFORM. " ALV_RELLENAR_CABECERA


*---------------------------------------------------------------------*
* FORM alv_asignar_logo *
*---------------------------------------------------------------------*
* Rellena el logo que queremos que se muestre por pantalla *
*---------------------------------------------------------------------*
* --> P_LOGO Logo a cargar *
*---------------------------------------------------------------------*
FORM alv_asignar_logo USING p_logo.

d_logo = p_logo.

ENDFORM. " alv_asignar_logo

*&---------------------------------------------------------------------*
*& Form alv_events
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM alv_events.

DATA: le_event TYPE slis_alv_event.
REFRESH gt_events.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = gt_events.

ENDFORM. " alv_alv_events
__________________
Si precisas una mano, recuerda que yo tengo dos.

Úlima edición por tracer fecha: 30/03/06 a las 15:28:55.
Responder Con Cita