Alv Jerarquio

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Marc Espinosa
    Member
    • ago
    • 73

    #1

    Alv Jerarquio

    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 .

    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!!
    Saludos
    Marc Espinosa
  • DavidXD_XD
    Moderator
    • ago
    • 1255

    #2
    Hola, tal vez t sirva este programa, puede q estes colocando mal los datos dentro de la funcion

    BCALV_TEST_HIERSEQ_LIST
    David Carballido Córdova

    Comentario

    • Marc Espinosa
      Member
      • ago
      • 73

      #3
      solucionado , tenia unas cosillas mal, eso de volver de vacaciones es mu malo

      SAaludos y Gracias!!
      Saludos
      Marc Espinosa

      Comentario

      Trabajando...