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

ALV Simple

REPORT zalv_simple.
* Jorge Serra (AbapLife) http://abaplife.bitacoras.com
* Se trata de un pequeño ejemplo de listado ALV para aquellos que nunca
* han creado uno. Por supuesto, a los que ya sepáis algo de ALV, no
* creo que os sirva de mucho
* Propósito:

* ---------
* Voy mostrar un listado de posiciones de pedidos de compras
* Pasos esenciales (Buscar el simbolo '§')
* ----------------
* 1. Definición estructuras y tablas necesarias
* 2. Definimos la tabla 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,
* Nombre del programa g_repid LIKE sy-repid.
*<-- § Paso 2. Definimos la tabla con los datos de salida
TYPES: BEGIN OF st_output.
INCLUDE STRUCTURE ekpo.
TYPES: END OF st_output.
DATA: gt_output TYPE STANDARD TABLE OF st_output 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.
*<-- § 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-ref_tabname = 'EKPO'.
APPEND gt_fieldcat. CLEAR gt_fieldcat.
gt_fieldcat-fieldname = 'EBELP'.
gt_fieldcat-ref_tabname = 'EKPO'.
APPEND gt_fieldcat. CLEAR gt_fieldcat.
gt_fieldcat-fieldname = 'MATNR'. gt_fieldcat-ref_tabname = 'EKPO'.
APPEND gt_fieldcat. CLEAR gt_fieldcat.
gt_fieldcat-fieldname = 'WERKS'. gt_fieldcat-ref_tabname = 'EKPO'.
APPEND gt_fieldcat. CLEAR gt_fieldcat.
gt_fieldcat-fieldname = 'MENGE'. gt_fieldcat-ref_tabname = 'EKPO'.
APPEND gt_fieldcat. CLEAR gt_fieldcat. gt_fieldcat-fieldname = 'MEINS'.
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 ekpo UP TO 100 ROWS INTO TABLE gt_output.
ENDFORM. " TOMA_DATOS
*---------------------------------------------------------------------*
* FORM LISTADO *
*---------------------------------------------------------------------*
FORM listado.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = g_repid
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
TABLES t_outtab = gt_output
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