Datos personales

Mi foto
Soy programador/analista. Mis fuertes es el mundo de sap(como abaper), programador php con gran experiencia en el mundo Wordpress y Joomla.

viernes, 15 de agosto de 2008

ALV-hierseq con fieldcat a mano:

El ALV jerarquico tiene la particularidad de mostrar cosas de 2 tablas distintas con un enlace llamado key-info que es una tabla.

TABLES: zmcabecera, zmdetalle, zmproveedor.

DATA: BEGIN OF ti_header OCCURS 0.
INCLUDE STRUCTURE zmcabecera.
DATA END OF ti_header.

DATA: BEGIN OF ti_prov OCCURS 0.
INCLUDE STRUCTURE zmproveedor.
DATA END OF ti_prov.

DATA: BEGIN OF ti_info OCCURS 0.
INCLUDE STRUCTURE zmdetalle.
DATA END OF ti_info.

* 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: ti_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE,
* Especificaciones de la disposición de la lista: descripción de la
* estructura de salida
ti_layout TYPE slis_layout_alv,
* Relacion entre los datos de cabecera y posicion
ti_key TYPE slis_keyinfo_alv.

START-OF-SELECTION.

PERFORM cargotablas.
PERFORM armosalida.
PERFORM imprimo.


*&---------------------------------------------------------------------*
*& Form cargotablas
*&---------------------------------------------------------------------*
FORM cargotablas .

SELECT * FROM zmcabecera INTO TABLE ti_header.

SELECT * FROM zmproveedor INTO TABLE ti_prov.

SELECT * FROM zmdetalle
INTO TABLE ti_info
FOR ALL ENTRIES IN ti_header
WHERE idpedido = ti_header-idpedido.

ENDFORM. " cargotablas

*&---------------------------------------------------------------------*
*& Form armosalida
*&---------------------------------------------------------------------*
FORM armosalida .

ti_fieldcat-fieldname = 'IDPEDIDO'.
ti_fieldcat-tabname = 'TI_HEADER'.
ti_fieldcat-ref_tabname = 'ZMCABECERA'.
APPEND ti_fieldcat. CLEAR ti_fieldcat.

ti_fieldcat-fieldname = 'FECHA'.
ti_fieldcat-tabname = 'TI_HEADER'.
ti_fieldcat-ref_tabname = 'ZMCABECERA'.
APPEND ti_fieldcat. CLEAR ti_fieldcat.

ti_fieldcat-fieldname = 'IDPROVEEDOR'.
ti_fieldcat-tabname = 'TI_HEADER'.
ti_fieldcat-ref_tabname = 'ZMCABECERA'.
APPEND ti_fieldcat. CLEAR ti_fieldcat.

ti_fieldcat-fieldname = 'IMPORTETOTAL'.
ti_fieldcat-tabname = 'TI_HEADER'.
ti_fieldcat-ref_tabname = 'ZMCABECERA'.
APPEND ti_fieldcat. CLEAR ti_fieldcat.

ti_fieldcat-fieldname = 'IDPEDIDO'.
ti_fieldcat-tabname = 'TI_INFO'.
ti_fieldcat-ref_tabname = 'ZMDETALLE'.
APPEND ti_fieldcat. CLEAR ti_fieldcat.

ti_fieldcat-fieldname = 'ITEM'.
ti_fieldcat-tabname = 'TI_INFO'.
ti_fieldcat-ref_tabname = 'ZMDETALLE'.
APPEND ti_fieldcat. CLEAR ti_fieldcat.

ti_fieldcat-fieldname = 'CANTIDAD'.
ti_fieldcat-tabname = 'TI_INFO'.
ti_fieldcat-ref_tabname = 'ZMDETALLE'.
APPEND ti_fieldcat. CLEAR ti_fieldcat.

ti_fieldcat-fieldname = 'DESCRIPCION'.
ti_fieldcat-tabname = 'TI_INFO'.
ti_fieldcat-ref_tabname = 'ZMDETALLE'.
APPEND ti_fieldcat. CLEAR ti_fieldcat.

ti_fieldcat-fieldname = 'IMPORTE'.
ti_fieldcat-tabname = 'TI_INFO'.
ti_fieldcat-ref_tabname = 'ZMDETALLE'.
APPEND ti_fieldcat. CLEAR ti_fieldcat.

* Relacion entre los campos de cabecera y los de posicion
ti_key-header01 = 'IDPEDIDO'.
ti_key-item01 = 'IDPEDIDO'.


ENDFORM. " armosalida


*&---------------------------------------------------------------------*
*& Form imprimo
*&---------------------------------------------------------------------*
FORM imprimo .
DATA: c_repid LIKE sy-repid.
c_repid = sy-repid.

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
i_callback_program = c_repid
* I_CALLBACK_PF_STATUS_SET = ' '
i_callback_user_command = 'USER_COMMAND'
* IS_LAYOUT =
it_fieldcat = ti_fieldcat[]
* 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 = ' '
* IT_EVENT_EXIT =
i_tabname_header = 'TI_HEADER'
i_tabname_item = 'TI_INFO'
* I_STRUCTURE_NAME_HEADER =
* I_STRUCTURE_NAME_ITEM =
is_keyinfo = ti_key
* I_BUFFER_ACTIVE =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab_header = ti_header[]
t_outtab_item = ti_info[]
EXCEPTIONS
program_error = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE e162(00) WITH 'No se pudo abrir el archivo'(006).
ENDIF.

ENDFORM. " imprimo


*---------------------------------------------------------------------*
* FORM user_command
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
* --> R_UCOMM
* --> RS_SELFIELD
*---------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
BREAK-POINT.
READ TABLE ti_prov WITH KEY idproveedor = rs_selfield-value.
IF sy-subrc EQ 0.
MESSAGE i398(00) WITH 'EL NOMBRE ES:'(007) ti_prov-nombre
'Y SU TEL. ES:'(008) ti_prov-telefono.
ENDIF.
ENDFORM. "user_command


No hay comentarios:

 
Free counter and web stats