PDA

Ver la Versión Completa : Alv Jerarquio


Marc Espinosa
04/09/08, 10:44:24
Wenos dias forer@s!!
estoy haciendo un ALV JERARQUIO, però solo me salen las cabeceras, no me salen los datos de dentro. He exo ALV's, xo es el primer jerarquico:confused: .

No hagais caso del form completa_datos, esta a medias.

Os pego el codigo:



TABLES: proj, prps.


*----------------------------------------------------------------------*
* Definición de Parámetros y Select-Options
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETERS: p_prart TYPE prps-prart, "Clase de proyecto
p_vernr TYPE proj-vernr, "Responsable
p_astnr TYPE proj-astnr. "Solicitante

SELECT-OPTIONS:
s_pspid FOR proj-pspid, "Proyecto
s_posid FOR prps-posid. "Elemento PEP
SELECTION-SCREEN END OF BLOCK b2.

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-004.
PARAMETERS: p_versn LIKE rpsco_x-versn. "Versión
SELECTION-SCREEN END OF BLOCK b3.

SELECTION-SCREEN END OF BLOCK b1.


*-----------------------------------------------------------------------------*
* 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.


*Definimos las tablas con los datos de salida
TYPES: BEGIN OF st_header.
INCLUDE STRUCTURE proj.
TYPES: END OF st_header.

TYPES: BEGIN OF st_item,
l_objeto LIKE PRPS-PSPNR, "objeto
l_NomObj LIKE PRPS-PSPNR, "nombre objeto
l_WLJHR_PL LIKE BPJA-WLJHR, "valor planificado
l_WLJHR_PR LIKE BPJA-WLJHR, "valor presupuesto
l_WLJHR_CM LIKE BPJA-WLJHR, "valor Comprometido
l_WLJHR_RE LIKE BPJA-WLJHR, "valor real
l_WLJHR_PA LIKE BPJA-WLJHR, "valor pagado
l_WLJHR_EJ LIKE BPJA-WLJHR, "valor ejecutado
l_WLJHR_PD LIKE BPJA-WLJHR, "valor presupuesto disponible
l_WLJHR_DE LIKE BPJA-WLJHR. "valor desviación
INCLUDE STRUCTURE prps.
TYPES: END OF st_item.


DATA: gt_header TYPE STANDARD TABLE OF st_header WITH HEADER LINE, "primer nivel jerarquico ALV
gt_item TYPE STANDARD TABLE OF st_item WITH HEADER LINE. "segundo nivel jerarquico ALV

DATA: wa_item TYPE st_item,
wa_header TYPE st_header.

DATA: l_WTG001 TYPE WTGXXX,
l_WTG002 TYPE WTGXXX,
l_WTG003 TYPE WTGXXX,
l_WTG004 TYPE WTGXXX,
l_WTG005 TYPE WTGXXX,
l_WTG006 TYPE WTGXXX.


INITIALIZATION.

g_repid = sy-repid.

START-OF-SELECTION.

* Toma de datos
PERFORM toma_datos.

*Estructura y formato de salida
PERFORM init_fieldcat.
PERFORM init_layout.
PERFORM init_key.

* Mostrar listado
PERFORM listado.

**---------------------------------------------------------------------*
* 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 = 'PSPNR'.
gt_fieldcat-tabname = 'GT_HEADER'.
gt_fieldcat-ref_tabname = 'PROJ'.
APPEND gt_fieldcat.
CLEAR gt_fieldcat.

gt_fieldcat-fieldname = 'PSPHI'.
gt_fieldcat-tabname = 'GT_ITEM'.
gt_fieldcat-ref_tabname = 'PRPS'.
APPEND gt_fieldcat.
CLEAR gt_fieldcat.

gt_fieldcat-fieldname = 'POSID'.
gt_fieldcat-tabname = 'GT_ITEM'.
gt_fieldcat-ref_tabname = 'PRPS'.
APPEND gt_fieldcat.
CLEAR gt_fieldcat.

* gt_fieldcat-fieldname = 'l_WLJHR_PL'.
* gt_fieldcat-tabname = 'GT_ITEM'.
* gt_fieldcat-ref_tabname = 'PRPS'.
* APPEND gt_fieldcat.
* CLEAR gt_fieldcat.
*
* gt_fieldcat-fieldname = 'l_WLJHR_PR'.
* gt_fieldcat-tabname = 'GT_ITEM'.
* gt_fieldcat-ref_tabname = 'PRPS'.
* APPEND gt_fieldcat.
* CLEAR gt_fieldcat.
*
* gt_fieldcat-fieldname = ' l_WLJHR_CM'.
* gt_fieldcat-tabname = 'GT_ITEM'.
* gt_fieldcat-ref_tabname = 'PRPS'.
* APPEND gt_fieldcat.
* CLEAR gt_fieldcat.
*
* gt_fieldcat-fieldname = 'l_WLJHR_RE'.
* gt_fieldcat-tabname = 'GT_ITEM'.
* gt_fieldcat-ref_tabname = 'PRPS'.
* gt_fieldcat-no_out = 'X'.
* APPEND gt_fieldcat.
* CLEAR gt_fieldcat.
*
* gt_fieldcat-fieldname = 'l_WLJHR_PA'.
* gt_fieldcat-tabname = 'GT_ITEM'.
* gt_fieldcat-ref_tabname = 'PRPS'.
* APPEND gt_fieldcat.
* CLEAR gt_fieldcat.
*
* gt_fieldcat-fieldname = 'l_WLJHR_EJ'.
* gt_fieldcat-tabname = 'GT_ITEM'.
* gt_fieldcat-ref_tabname = 'PRPS'.
* APPEND gt_fieldcat.
* CLEAR gt_fieldcat.
*
* gt_fieldcat-fieldname = ' l_WLJHR_PD'.
* gt_fieldcat-tabname = 'GT_ITEM'.
* gt_fieldcat-ref_tabname = 'PRPS'.
* APPEND gt_fieldcat.
* CLEAR gt_fieldcat.
*
* gt_fieldcat-fieldname = ' l_WLJHR_DE'.
* gt_fieldcat-tabname = 'GT_ITEM'.
* gt_fieldcat-ref_tabname = 'PRPS'.
* 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.

*-------------------------------------------------------------------
* Toma de datos de las tablas de Proyectos y PEPS
*-------------------------------------------------------------------
* Si existe PEP y no proyecto
* IF s_pspid IS INITIAL AND s_posid IS NOT INITIAL.
* busco proyectos
* SELECT * FROM proj
* INTO table gt_header
* WHERE SCOPE = p_prart AND "Clase de proyecto
* ERNAM = p_vernr AND "Responsable
* ASTNR = p_astnr AND "Solicitante
* STSPR IN s_posid . "Elemento PEP
* rpsco_x-versn = p_versn. "Versión

* busco PEPS
* SELECT * FROM prps
* INTO CORRESPONDING FIELDS OF TABLE gt_item
* FOR ALL ENTRIES IN gt_header
* WHERE PSPHI = gt_header-PSPNR. "Elemento PEP
* ENDIF.





** Si existe proyecto
* IF s_pspid IS NOT INITIAL.
** busco proyectos
* SELECT * FROM proj
* INTO table gt_header
* WHERE SCOPE = p_prart AND "Clase de proyecto
* ERNAM = p_vernr AND "Responsable
* ASTNR = p_astnr AND "Solicitante
* PSPNR IN s_pspid . "Proyecto
** rpsco_x-versn = p_versn. "Versión
*
** busco PEPS
* SELECT * FROM prps
* INTO CORRESPONDING FIELDS OF TABLE gt_item
* FOR ALL ENTRIES IN gt_header
* WHERE PSPHI = gt_header-PSPNR. "Elemento PEP
* ENDIF.
*
*
** Si no existe proyecto ni PEP
IF s_pspid IS INITIAL AND s_posid IS INITIAL.
* busco proyectos
SELECT * INTO TABLE gt_header
FROM proj
WHERE vernr = p_vernr AND "Responsable
ASTNR = p_astnr. "Solicitante
* rpsco_x-versn = p_versn. "Versión

* busco PEPS
* SELECT * FROM prps
* INTO CORRESPONDING FIELDS OF TABLE gt_item
* FOR ALL ENTRIES IN gt_header
* WHERE PSPHI = gt_header-PSPNR. "Elemento PEP
clear wa_item.
LOOP AT gt_header INTO wa_header.
SELECT SINGLE PSPHI into wa_item-l_objeto
FROM prps
WHERE PSPHI = wa_header-PSPNR AND "Elemento PEP
prart = p_prart. "Clase de proyecto
PERFORM completa_datos.
ENDLOOP.

ENDIF.
ENDFORM. "TOMA_DATOS



*---------------------------------------------------------------------*
* FORM COMPLETA_DATOS *
*---------------------------------------------------------------------*
FORM completa_datos.

*-----------------------------------------------
* Valores Planificado y Presupuesto
*-----------------------------------------------
SELECT SINGLE WLJHR into wa_item-l_WLJHR_PL FROM BPJA
WHERE WRTTP = '01' AND
OBJNR = wa_item-l_objeto.

SELECT SINGLE WLJHR into wa_item-l_WLJHR_PR FROM BPJA
WHERE WRTTP = '41' AND
OBJNR = wa_item-l_objeto.


*-----------------------------------------------
* Valores Comprometido y Real
*-----------------------------------------------
* SELECT SINGLE WTG001 into wa_item-l_WLJHR_CM FROM COSP
SELECT SINGLE WTG001 WTG002 WTG003 WTG004 WTG005 WTG006 into (l_WTG001 ,l_WTG002 ,l_WTG003, l_WTG004, l_WTG005, l_WTG006) FROM COSP
WHERE WRTTP = '21' OR
WRTTP = '22' OR
WRTTP = '23' OR
WRTTP = '24' AND
OBJNR = wa_item-l_objeto.
wa_item-l_WLJHR_CM = l_WTG001 + l_WTG002 + l_WTG003 + l_WTG004 + l_WTG005 + l_WTG006.

SELECT SINGLE WTG001 WTG002 WTG003 WTG004 WTG005 WTG006 into (l_WTG001 ,l_WTG002 ,l_WTG003, l_WTG004, l_WTG005, l_WTG006) FROM COSP
WHERE WRTTP = '04' OR
WRTTP = '11' AND
OBJNR = wa_item-l_objeto.
wa_item-l_WLJHR_RE = l_WTG001 + l_WTG002 + l_WTG003 + l_WTG004 + l_WTG005 + l_WTG006.


*-----------------------------------------------
* Valores Pagados
**-----------------------------------------------
data: l_ebeln type EBELN,
l_bel type CO_BELNR,
l_REFBN type REFBN,
l_belnr type CO_BELNR,
L_DMBTR type DMBTR.

SELECT single EBELN BELNR INTO (l_ebeln, l_belnr) FROM COEP "a,b
WHERE WRTTP = '04' OR WRTTP = '11'.

IF l_ebeln IS INITIAL. "c
SELECT SINGLE REFBN into l_REFBN FROM COBK
WHERE BELNR = l_BELNR.

SELECT SINGLE belnr into l_bel FROM BSEG "e
WHERE BELNR = l_REFBN AND
VORGN = 'RMRP'.

* miro si esta pagado "f
SELECT single belnr DMBTR into (l_bel ,L_DMBTR) FROM BSAK
WHERE BELNR = l_bel.
IF sy-subrc = 0. "ESTA PAGADO
wa_item-l_WLJHR_PA = L_DMBTR.
ENDIF.

ELSE. "d,e
SELECT single belnr DMBTR into (l_bel ,L_DMBTR) FROM BSEG
WHERE EBELN = l_ebeln AND
VORGN = 'RMRP'.

* miro si esta pagado "f
SELECT single belnr into l_bel FROM BSAK
WHERE BELNR = l_bel.
IF sy-subrc = 0. "ESTA PAGADO
wa_item-l_WLJHR_PA = L_DMBTR.
ENDIF.
ENDIF.


wa_item-l_WLJHR_PA = wa_item-l_WLJHR_RE - wa_item-l_WLJHR_PA.


*----------------------------------------------------------
* Valores ejecutado = valor comprometido + real + pagado
*----------------------------------------------------------
wa_item-l_WLJHR_EJ = wa_item-l_WLJHR_CM + wa_item-l_WLJHR_RE + wa_item-l_WLJHR_PA.

*-----------------------------------------------------------
* Valores presupuesto disponible = presupuesto - ejecutado
*-----------------------------------------------------------
wa_item-l_WLJHR_PD = wa_item-l_WLJHR_PR - wa_item-l_WLJHR_EJ.

*-----------------------------------------------
* Valores desviación = planificado - ejecutado
*-----------------------------------------------
wa_item-l_WLJHR_DE = wa_item-l_WLJHR_PL - wa_item-l_WLJHR_EJ.


* Finalmente añadimos a nuestra tabla.
APPEND wa_item to gt_item.


ENDFORM. "completa_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 = 'PSPNR'.
gs_key-item01 = 'PSPHI'.
ENDFORM. " INIT_KEY





Gracias!!:)

DavidXD_XD
04/09/08, 20:02:08
Hola, tal vez t sirva este programa, puede q estes colocando mal los datos dentro de la funcion

BCALV_TEST_HIERSEQ_LIST

Marc Espinosa
05/09/08, 09:01:50
solucionado :D , tenia unas cosillas mal, eso de volver de vacaciones es mu malo :rolleyes:

SAaludos y Gracias!!:)