Ver Mensaje Individual
  #3  
Viejo 19/05/06, 15:24:13
bono bono is offline
Junior Member
 
Fecha de Ingreso: mar 2006
Mensajes: 21
Aqui os enviuo una plantilla para crear consultas ALV

REPORT ZPLANTILLA_ALV.


* Tabla interna donde almacenar info Base Datos
data: begin of it_datos occurs 0,
<...>
end of it_datos.

* Tabla interna donde almacenar info a mostrar mediante ALV
DATA: BEGIN OF it_list OCCURS 0,
sel, "campo de selección
<...>
end of it_list.

* Objetos para ALV
TYPE-POOLS: slis, "necesario para ALV
icon. "sólo si se utilizan iconos

DATA: repid LIKE sy-repid.
* Obligatorio, estructuras para ALV grid
DATA: s_layout TYPE slis_layout_alv,
fieldcat TYPE slis_t_fieldcat_alv,
tab_sort TYPE slis_t_sortinfo_alv,
gt_list_top_of_page TYPE slis_t_listheader.

* Criterios de selección
SELECTION-SCREEN BEGIN of block b1 with frame title text-001.
PARAMETERS: p_em LIKE zdat_sgaa_zmigo-carta_porte.
SELECTION-SCREEN END of block b1.


INITIALIZATION.
repid = sy-repid.

START-OF-SELECTION.
PERFORM cargar_datos.

IF it_datos[] IS INITIAL.
MESSAGE s899(v1) WITH 'No se han seleccionado registros'.
EXIT.
ELSE.
PERFORM visualizar_info.
ENDIF.



*&---------------------------------------------------------------------*
*& Form visualizar_info
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM visualizar_info.

* Generación tabla it_tabla a partir de los datos obtenidos en la tabla
* it_datos.
PERFORM construir_tabla.
* Parámetros ALV
PERFORM parametros_alv.
* Construcción del catálogo de campos
PERFORM field_catalog_build TABLES fieldcat.
* Tabla de orden de salida (opcional)
PERFORM sorttab_build TABLES tab_sort.
* Cabecera
PERFORM comment_build USING gt_list_top_of_page[].
* MOSTRAR ALV
PERFORM mostrar_alv.
ENDFORM. " visualizar_info
*&---------------------------------------------------------------------*
*& Form parametros_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM parametros_alv.
s_layout-box_fieldname = 'SEL'. "campo de selección de it_list
s_layout-colwidth_optimize = ''.
s_layout-zebra = 'X'.
s_layout-f2code = 'DISPLAY'.
ENDFORM. " parametros_alv
*&---------------------------------------------------------------------*
*& Form field_catalog_build
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_FIELDCAT text
*----------------------------------------------------------------------*
FORM field_catalog_build TABLES p_fieldcat TYPE slis_t_fieldcat_alv.
DATA inclname LIKE trdir-name.
DATA v_text(50).

MOVE repid TO inclname.

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = repid
i_internal_tabname = 'IT_LIST'
i_inclname = inclname
CHANGING
ct_fieldcat = p_fieldcat[].

LOOP AT p_fieldcat.

p_fieldcat-key = ''. "los campos clave aparecen los primeros

CASE p_fieldcat-fieldname.
WHEN 'SEL'.
* No mostrar ni dejar incluir campo
p_fieldcat-no_out = 'X'.
p_fieldcat-tech = 'X'.
WHEN 'ERR_1'. "Cambio labels
p_fieldcat-seltext_s =
p_fieldcat-seltext_m =
p_fieldcat-seltext_l =
p_fieldcat-reptext_ddic = 'No existe en tabla AA'.
p_fieldcat-checkbox = 'X'. "Mostrar como checkbox
ENDCASE.

MODIFY p_fieldcat.

ENDLOOP.

ENDFORM. " field_catalog_build

*---------------------------------------------------------------------*
* FORM sorttab_build *
*---------------------------------------------------------------------*
FORM sorttab_build TABLES tx_sort TYPE slis_t_sortinfo_alv.
CLEAR tx_sort. REFRESH tx_sort.
ENDFORM.

*---------------------------------------------------------------------*
* FORM comment_build *
*---------------------------------------------------------------------*
FORM comment_build USING lt_top_of_page TYPE slis_t_listheader.

DATA ls_line TYPE slis_listheader.
DATA mes(50).

CLEAR lt_top_of_page. REFRESH lt_top_of_page.

* LIST HEADING LINE: TYPE H
CLEAR ls_line.
ls_line-typ = 'H'.

* LS_LINE-KEY: NOT USED FOR THIS TYPE
ls_line-info = sy-title.
APPEND ls_line TO lt_top_of_page.

* STATUS LINE: TYPE S
CLEAR ls_line.
ls_line-typ = 'S'.
ls_line-key = 'Nombre:'.
ls_line-info = sy-uname.
APPEND ls_line TO lt_top_of_page.
ls_line-key = 'Fecha:'.
WRITE sy-datum TO ls_line-info.
APPEND ls_line TO lt_top_of_page.
ls_line-key = 'Centro:'.
CONCATENATE s_werks-low '-' s_werks-high INTO ls_line-info
SEPARATED BY space.
APPEND ls_line TO lt_top_of_page.
ls_line-key = 'Almacén:'.
CONCATENATE s_lgort-low '-' s_lgort-high INTO ls_line-info
SEPARATED BY space.
APPEND ls_line TO lt_top_of_page.

* ACTION LINE: TYPE A
CLEAR ls_line.
ls_line-typ = 'A'.

* LS_LINE-KEY: NOT USED FOR THIS TYPE
ls_line-info = sy-cprog.
APPEND ls_line TO lt_top_of_page.

ENDFORM.

*---------------------------------------------------------------------*
* FORM mostrar_alv *
*---------------------------------------------------------------------*
FORM mostrar_alv.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = repid
i_callback_top_of_page = 'TOP_OF_PAGE'
i_callback_pf_status_set = 'PF_STATUS_SET'
i_callback_user_command = 'USER_COMMAND'
is_layout = s_layout
it_fieldcat = fieldcat
it_sort = tab_sort
i_save = 'A'
TABLES
t_outtab = it_list
EXCEPTIONS
program_error = 1
OTHERS = 2.

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

ENDFORM.

*---------------------------------------------------------------------*
* FORM pf_status_set *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM pf_status_set USING gt_extab TYPE slis_t_extab.

SET TITLEBAR 'ALV' WITH sy-title.
SET PF-STATUS 'ALV'.

ENDFORM.


*---------------------------------------------------------------------*
* FORM top_of_page *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM top_of_page.

* Para mostrar un logo en la cabecera hay que crearlo en:
* Transacción OAOR
* Oficina -> Documentos comerciales ->
* Documentos -> Buscar (nombre de clase: Pictures, tipo de clase: OT)

* Es un transacción un poco complicada de utlizar pero desde ahí
* se carga el logo como el del ejemplo ZLOGO_CALIER

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
* i_logo = 'ZLOGO_CALIER'
it_list_commentary = gt_list_top_of_page.

WRITE: 'Pág.:', sy-pagno LEFT-JUSTIFIED.

ENDFORM. " top_of_page

FORM user_command USING f_ucomm LIKE sy-ucomm
i_selfield TYPE slis_selfield.

* READ TABLE it_list INDEX i_selfield-tabindex.
*
* CLEAR: v_okcode, v_refresh.
*
* MOVE f_ucomm TO v_ucomm.
*
* CASE f_ucomm.
* WHEN 'ZDEL'.
* CALL SCREEN 2 STARTING AT 45 2.
* IF NOT v_refresh IS INITIAL.
* PERFORM get_data.
* PERFORM construir_lista. "Actualizar info ALV
* i_selfield-refresh = 'X'.
* ENDIF.
* WHEN 'DISPLAY'.
* CASE i_selfield-fieldname.
* WHEN 'EBELN'.
* PERFORM visualizar_doc USING it_list-ebeln '00000'.
* WHEN 'EBELP'.
* PERFORM visualizar_doc USING it_list-ebeln it_list-ebelp.
* WHEN 'MATNR'.
* SET PARAMETER ID 'MAT' FIELD it_list-matnr.
* CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
* ENDCASE.
* ENDCASE.

* Si queremos salir a la pantalla de selección, podemos llenar f_ucomm
* con el código asignado a BACK (&F03 si copias el status
* STANDARD_FULLSCREEN del programa SAPLSLVC_FULLSCREEN)

* f_ucomm = '&F03'.

ENDFORM.


*&---------------------------------------------------------------------*
*& Form construir_tabla
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM construir_tabla.
LOOP AT it_datos.
CLEAR it_list.
MOVE-CORRESPONDING it_datos TO it_list.
APPEND it_list.
ENDLOOP.
ENDFORM.

form cargar_datos.
* Llenar tabla it_datos con SQL a BBDD
endform.
Responder Con Cita