lunes, 11 de junio de 2007

ALV Jerárquico

REPORT zalv_jerarquico.
* Por: Jorge Serra (AbapLife)
http://abaplife.bitacoras.com
* Se trata de una ejemplo de listado ALV jerarquico.
* Propósito:

* ---------
* Voy mostrar un listado de pedidos de compras (datos de cabecera)
* y sus posiciones (datos de posicion)
* Pasos esenciales (Buscar el simbolo '§')

* ----------------
* 1. Definición estructuras y tablas necesarias
* 2. Definimos las tablas con los datos de salida
* 3. Toma de datos
* 4. Definición estructura y formato de salida
* 5. Mostrar listado
*<-- § Paso 1. Definicion estructuras y tablas necesarias
* Type Pool donde vienen definidas todas las estructuras y tablas

TYPE-POOLS: slis.
* Catálogo de campos: contiene la descripción de los campos de salida
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
* Especificaciones de la disposición de la lista: descripción de la
* estructura de salida
gs_layout TYPE slis_layout_alv,
* Relacion entre los datos de cabecera y posicion
gs_key TYPE slis_keyinfo_alv,
* Nombre del programa g_repid LIKE sy-repid.
*<-- § Paso 2. Definimos las tablas con los datos de salida

TYPES: BEGIN OF st_header.
INCLUDE STRUCTURE ekko.
TYPES: END OF st_header.
TYPES: BEGIN OF st_item.

INCLUDE STRUCTURE ekpo.
TYPES: END OF st_item.
DATA:

gt_header TYPE STANDARD TABLE OF st_header WITH HEADER LINE,
gt_item TYPE STANDARD TABLE OF st_item WITH HEADER LINE.
INITIALIZATION.
g_repid = sy-repid.
START-OF-SELECTION.
*<-- § Paso 3. Toma de datos

PERFORM toma_datos.
*<-- § Paso 4. Estructura y formato de salida

PERFORM init_fieldcat.
PERFORM init_layout.
PERFORM init_key.
*<-- § Paso 5. Mostrar listado

PERFORM listado.
*&&-----------------------------------------------------------------&&*

* SUBRUTINAS DEL PROGRAMA *
*&&-----------------------------------------------------------------&&*
*---------------------------------------------------------------------*

* FORM INIT_FIELDCAT *
*---------------------------------------------------------------------*
FORM init_fieldcat.
* Mediante esta tabla vamos a definir los campos que queremos mostrar

* en el listado de salida.
gt_fieldcat-fieldname = 'EBELN'.

gt_fieldcat-tabname = 'GT_HEADER'.
gt_fieldcat-ref_tabname = 'EKKO'.
APPEND gt_fieldcat. CLEAR gt_fieldcat.
gt_fieldcat-fieldname = 'EBELN'.

gt_fieldcat-tabname = 'GT_ITEM'.
gt_fieldcat-ref_tabname = 'EKPO'.
gt_fieldcat-no_out = 'X'.
APPEND gt_fieldcat. CLEAR gt_fieldcat.
gt_fieldcat-fieldname = 'EBELP'.

gt_fieldcat-tabname = 'GT_ITEM'.
gt_fieldcat-ref_tabname = 'EKPO'.
APPEND gt_fieldcat. CLEAR gt_fieldcat.
gt_fieldcat-fieldname = 'MATNR'.

gt_fieldcat-tabname = 'GT_ITEM'.
gt_fieldcat-ref_tabname = 'EKPO'.
APPEND gt_fieldcat. CLEAR gt_fieldcat.
gt_fieldcat-fieldname = 'WERKS'.

gt_fieldcat-tabname = 'GT_ITEM'.
gt_fieldcat-ref_tabname = 'EKPO'.
APPEND gt_fieldcat. CLEAR gt_fieldcat.
gt_fieldcat-fieldname = 'MENGE'.

gt_fieldcat-tabname = 'GT_ITEM'.
gt_fieldcat-ref_tabname = 'EKPO'.
APPEND gt_fieldcat. CLEAR gt_fieldcat.
gt_fieldcat-fieldname = 'MEINS'.

gt_fieldcat-tabname = 'GT_ITEM'.
gt_fieldcat-ref_tabname = 'EKPO'.
APPEND gt_fieldcat. CLEAR gt_fieldcat.
ENDFORM.
*---------------------------------------------------------------------*

* FORM INIT_LAYOUT *
*---------------------------------------------------------------------*
FORM init_layout.
* Mediante esta estructura podemos definir el formato de salida

gs_layout-zebra = 'X'.
gs_layout-f2code = '&ETA'.
gs_layout-detail_popup = 'X'.
ENDFORM.
*---------------------------------------------------------------------*

* FORM TOMA_DATOS *
*---------------------------------------------------------------------*
FORM toma_datos.
* Los datos deben guardarse en la tabla interna de salida

SELECT * FROM ekko
UP TO 100 ROWS
INTO TABLE gt_header.
SELECT * FROM ekpo

INTO TABLE gt_item
FOR ALL ENTRIES IN gt_header
WHERE ebeln = gt_header-ebeln.
ENDFORM. " TOMA_DATOS
*---------------------------------------------------------------------*

* FORM LISTADO *
*---------------------------------------------------------------------*
FORM listado.
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'

EXPORTING
* I_INTERFACE_CHECK = ' '
i_callback_program = g_repid
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_DEFAULT = 'X'
* I_SAVE = ' '
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
i_tabname_header = 'GT_HEADER'
i_tabname_item = 'GT_ITEM'
* I_STRUCTURE_NAME_HEADER =
* I_STRUCTURE_NAME_ITEM =
is_keyinfo = gs_key
* IS_PRINT =
* IS_REPREP_ID =
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab_header = gt_header[]
t_outtab_item = gt_item[]
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. " LISTADO
*---------------------------------------------------------------------*

* FORM INIT_KEY *
*---------------------------------------------------------------------*
FORM init_key.
* Relacion entre los campos de cabecera y los de posicion

gs_key-header01 = 'EBELN'.
gs_key-item01 = 'EBELN'.
ENDFORM. " INIT_KEY

4 comentarios:

Leonardo G dijo...

Oye, veo que no tienes nuevas entradas en tu blog

chr dijo...

esta mal tu huevada
manda error

luis dijo...
Este comentario ha sido eliminado por el autor.
luis dijo...

el report se le hace una pequeña corrección de sintaxis(agregar un punto) y ok.