Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

ALV Tree Report

Former Member
0 Likes
2,154

Hi,

I need a demo program for ALV tree report which uses function module not Object oriented one. The one demo program which is similar to my requirement is SAPTLIST_TREE_CONTROL_DEMO, but I require in function modules.

Points will be awarded.

Br,

Laxmi.

Hi,

I need a demo program for ALV tree report which uses function module not Object oriented one. The one demo program which is similar to my requirement is SAPTLIST_TREE_CONTROL_DEMO, but I require in function modules.

Points will be awarded.

Br,

Laxmi.

2 REPLIES 2
Read only

Former Member
0 Likes
617

Check this one...it's on Spanish...but still ABAP -;)


************************************************************************
* Muestra un listado interactivo que permite interactuar con él desple-
* gando y comprimiendo nodos.
* Para que se respete el encabezado al imprimir el segundo listado es
* necesario crearlo en el evento TOP-OF-PAGE DURING LINE-SELECTION.
************************************************************************
REPORT ZLISTREE NO STANDARD PAGE HEADING.
INCLUDE .
DATA:
  COPY_LEVEL(3) TYPE N,
  COPY_JERARQUIA(255),
  OFFSET TYPE I,
  COPY_SYLILLI LIKE SY-LILLI,
  COPY_SYLISEL LIKE SY-LISEL,
  COPY_SYLSIND LIKE SY-LSIND,
  COPY_SYINDEX LIKE SY-INDEX,
  LEVEL_TMP(3) TYPE N,
  INDEX_TMP LIKE SY-TABIX,
  JERARQUIA_TMP(255),
  STRING_TMP(255).

TYPES:
  BEGIN OF REC_ITAB,
    JERARQUIA(255),
    SETNAME LIKE SETHEADER-SETNAME,
    LEVEL(3) TYPE N,
    POSICION(3) TYPE N,
    VALOR(255),
    DESPLEGADO,
    FINAL,
    INDEX LIKE SY-TABIX,
  END OF REC_ITAB.

DATA:
  ITAB_DATA  TYPE STANDARD TABLE OF REC_ITAB WITH HEADER LINE,
  ITAB_WRITE TYPE STANDARD TABLE OF REC_ITAB WITH HEADER LINE.


************************************************************************
*                            INITIALIZATION                            *
************************************************************************
INITIALIZATION.
  MOVE:
    SPACE    TO ITAB_DATA-JERARQUIA,
    'España' TO ITAB_DATA-SETNAME,
    '000'    TO ITAB_DATA-LEVEL,
    '001'    TO ITAB_DATA-POSICION,
    'Valor de España' TO ITAB_DATA-VALOR,
    1 TO ITAB_DATA-INDEX.
  APPEND ITAB_DATA.
  MOVE:
    'España|' TO ITAB_DATA-JERARQUIA,
    'Madrid'  TO ITAB_DATA-SETNAME,
    '001'     TO ITAB_DATA-LEVEL,
    '001'     TO ITAB_DATA-POSICION,
    'Valor de Madrid' TO ITAB_DATA-VALOR,
    ' ' TO ITAB_DATA-FINAL,
    2 TO ITAB_DATA-INDEX.
  APPEND ITAB_DATA.
  MOVE:
    'España|Madrid|' TO ITAB_DATA-JERARQUIA,
    'At.Madrid' TO ITAB_DATA-SETNAME,
    '002' TO ITAB_DATA-LEVEL,
    '001' TO ITAB_DATA-POSICION,
    'Valor de At.Madrid' TO ITAB_DATA-VALOR,
    'X' TO ITAB_DATA-FINAL,
    3 TO ITAB_DATA-INDEX.
  APPEND ITAB_DATA.
  MOVE:
    'España|Madrid|' TO ITAB_DATA-JERARQUIA,
    'R.Madrid' TO ITAB_DATA-SETNAME,
    '002' TO ITAB_DATA-LEVEL,
    '002' TO ITAB_DATA-POSICION,
    'Valor de R.Madrid' TO ITAB_DATA-VALOR,
    'X' TO ITAB_DATA-FINAL,
    4 TO ITAB_DATA-INDEX.
  APPEND ITAB_DATA.
  MOVE:
    'España|Madrid|' TO ITAB_DATA-JERARQUIA,
    'Rayo Vallecano' TO ITAB_DATA-SETNAME,
    '002' TO ITAB_DATA-LEVEL,
    '003' TO ITAB_DATA-POSICION,
    'Valor de Rayo Vallecano' TO ITAB_DATA-VALOR,
    'X' TO ITAB_DATA-FINAL,
    5 TO ITAB_DATA-INDEX.
  APPEND ITAB_DATA.
  MOVE:
    'España|' TO ITAB_DATA-JERARQUIA,
    'Barcelona' TO ITAB_DATA-SETNAME,
    '001' TO ITAB_DATA-LEVEL,
    '002' TO ITAB_DATA-POSICION,
    'Valor de Barcelona' TO ITAB_DATA-VALOR,
    ' ' TO ITAB_DATA-FINAL,
    6 TO ITAB_DATA-INDEX.
  APPEND ITAB_DATA.
  MOVE:
    'España|Barcelona|' TO ITAB_DATA-JERARQUIA,
    'Barcelona CF' TO ITAB_DATA-SETNAME,
    '002' TO ITAB_DATA-LEVEL,
    '001' TO ITAB_DATA-POSICION,
    'Valor del Barcelona CF' TO ITAB_DATA-VALOR,
    'X' TO ITAB_DATA-FINAL,
    7 TO ITAB_DATA-INDEX.
  APPEND ITAB_DATA.
  MOVE:
    'España|Barcelona|' TO ITAB_DATA-JERARQUIA,
    'Español' TO ITAB_DATA-SETNAME,
    '002' TO ITAB_DATA-LEVEL,
    '002' TO ITAB_DATA-POSICION,
    'Valor del Español' TO ITAB_DATA-VALOR,
    'X' TO ITAB_DATA-FINAL,
    8 TO ITAB_DATA-INDEX.
  APPEND ITAB_DATA.
  MOVE:
    'España|' TO ITAB_DATA-JERARQUIA,
    'Sevilla' TO ITAB_DATA-SETNAME,
    '001' TO ITAB_DATA-LEVEL,
    '003' TO ITAB_DATA-POSICION,
    'Valor de Sevilla' TO ITAB_DATA-VALOR,
    ' ' TO ITAB_DATA-FINAL,
    9 TO ITAB_DATA-INDEX.
  APPEND ITAB_DATA.
  MOVE:
    'España|Sevilla|' TO ITAB_DATA-JERARQUIA,
    'Betis' TO ITAB_DATA-SETNAME,
    '002' TO ITAB_DATA-LEVEL,
    '001' TO ITAB_DATA-POSICION,
    'Valor del Betis' TO ITAB_DATA-VALOR,
    ' ' TO ITAB_DATA-FINAL,
    10 TO ITAB_DATA-INDEX.
  APPEND ITAB_DATA.
  MOVE:
    'España|Sevilla|Betis|' TO ITAB_DATA-JERARQUIA,
    'Denilson' TO ITAB_DATA-SETNAME,
    '003' TO ITAB_DATA-LEVEL,
    '001' TO ITAB_DATA-POSICION,
    'Denilson' TO ITAB_DATA-VALOR,
    'X' TO ITAB_DATA-FINAL,
    11 TO ITAB_DATA-INDEX.
  APPEND ITAB_DATA.



************************************************************************
*                            START-OF-SELECTION                        *
************************************************************************
*----------------------------------------------------------------------*
*                  <<< Impresión del listado inicial >>>               *
*----------------------------------------------------------------------*
  LOOP AT ITAB_DATA WHERE LEVEL = '000'.
    APPEND ITAB_DATA TO ITAB_WRITE.
  ENDLOOP.

  LOOP AT ITAB_WRITE.
    ITAB_WRITE-INDEX = SY-TABIX." Índice en el listado
    MODIFY ITAB_WRITE.

    PERFORM OUT_WRITE.

  ENDLOOP.
  CLEAR STRING_TMP.


************************************************************************
*                           AT LINE-SELECTION                          *
************************************************************************
* En este evento se recupera la cabecera escondida ITAB_WRITE
AT LINE-SELECTION.
  MOVE SY-LILLI TO COPY_SYLILLI.
*----------------------------------------------------------------------*
*    <<< Borrado del listado actual y preparación del siguiente >>>    *
*----------------------------------------------------------------------*
  WHILE 1 EQ 1.
    MOVE SY-INDEX TO COPY_SYINDEX.
    ADD 2 TO COPY_SYINDEX." Porque el encabezado ocupa dos líneas
*   Borrado de la línea del listado
    MODIFY LINE COPY_SYINDEX LINE VALUE FROM STRING_TMP.
    IF SY-SUBRC NE 0. EXIT. ENDIF.
*   Actuar sobre la línea seleccionada
    IF COPY_SYINDEX EQ COPY_SYLILLI.
*----------------------------------------------------------------------*
*                      Desplegar líneas subordinadas a la seleccionada *
*----------------------------------------------------------------------*
      IF ITAB_WRITE-DESPLEGADO IS INITIAL.
        ITAB_WRITE-DESPLEGADO = 'X'.
        SUBTRACT 2 FROM COPY_SYINDEX.
        MODIFY ITAB_WRITE INDEX COPY_SYINDEX.
*       Añado las líneas que sean subordinadas de la seleccionada
        CONCATENATE ITAB_WRITE-JERARQUIA ITAB_WRITE-SETNAME '|'
        INTO JERARQUIA_TMP.
        INDEX_TMP = COPY_SYINDEX.
        LEVEL_TMP = ITAB_WRITE-LEVEL + 1.
        LOOP AT ITAB_DATA WHERE JERARQUIA = JERARQUIA_TMP AND
                                LEVEL     = LEVEL_TMP.
          ADD 1 TO INDEX_TMP.
          MOVE ITAB_DATA TO ITAB_WRITE.
          INSERT ITAB_WRITE INDEX INDEX_TMP.
        ENDLOOP.
*----------------------------------------------------------------------*
*                  Comprimir las líneas desplegadas de la seleccionada *
*----------------------------------------------------------------------*
      ELSE.
        CLEAR ITAB_WRITE-DESPLEGADO."                   Desmarco el flag
        SUBTRACT 2 FROM COPY_SYINDEX.
        MODIFY ITAB_WRITE INDEX COPY_SYINDEX.
*       Borro TODAS las líneas subordinadas SÓLO de la seleccionada
"       Jerarquía de las líneas que hay que borrar: JERARQUIA_TMP
        CONCATENATE ITAB_WRITE-JERARQUIA ITAB_WRITE-SETNAME '|'
        INTO JERARQUIA_TMP.
        INDEX_TMP = COPY_SYINDEX.
"       Nivel de las líneas que hay que borrar: LEVEL_TMP
        LEVEL_TMP = ITAB_WRITE-LEVEL + 1.
        ADD 1 TO INDEX_TMP.
        LOOP AT ITAB_DATA WHERE LEVEL GE LEVEL_TMP.
          CHECK ITAB_DATA-JERARQUIA CS JERARQUIA_TMP.
"         A medida que voy borrando, el índice de la tabla cambia pues
"         hay menos líneas.
          DELETE ITAB_WRITE INDEX INDEX_TMP.
        ENDLOOP.
      ENDIF.
    ENDIF.
  ENDWHILE.
*----------------------------------------------------------------------*
*      <<< Impresión del siguiente listado en la misma página >>>      *
*----------------------------------------------------------------------*
  MOVE SY-LSIND TO COPY_SYLSIND.
  SUBTRACT 1 FROM COPY_SYLSIND.
  MOVE COPY_SYLSIND TO SY-LSIND.

  LOOP AT ITAB_WRITE.
    MOVE:
      SY-INDEX TO COPY_SYINDEX,
      COPY_SYINDEX TO ITAB_WRITE-INDEX.
    MODIFY ITAB_WRITE.

    PERFORM OUT_WRITE.

  ENDLOOP.
  CLEAR STRING_TMP.


************************************************************************
*                            TOP-OF-PAGE                               *
************************************************************************
TOP-OF-PAGE.
  WRITE 'Encabezado'. ULINE.


************************************************************************
*                    TOP-OF-PAGE DURING LINE-SELECTION                 *
************************************************************************
TOP-OF-PAGE DURING LINE-SELECTION.
  WRITE 'Encabezado'. ULINE.

*&---------------------------------------------------------------------*
*&      Form  OUT_WRITE
*&---------------------------------------------------------------------*
FORM OUT_WRITE.
  DATA SYMBOL_NAME(30).
  FIELD-SYMBOLS: .
  PRINT-CONTROL SIZE 4.
  OFFSET = ITAB_WRITE-LEVEL * 3.
  IF OFFSET = 0. OFFSET = 1. ENDIF.
  NEW-LINE.

* Escribir/Actualizar el símbolo correcto
  FORMAT: RESET, INTENSIFIED.
  IF ITAB_WRITE-FINAL NE 'X'.
    IF ITAB_WRITE-DESPLEGADO = 'X'.
      SYMBOL_NAME = 'SYM_MINUS_FOLDER'.
    ELSE.
      SYMBOL_NAME = 'SYM_PLUS_FOLDER'.
    ENDIF.
    ASSIGN (SYMBOL_NAME) TO .
    WRITE AT OFFSET  AS SYMBOL HOTSPOT COLOR COL_TOTAL.
  ELSE.
    SYMBOL_NAME = 'SYM_DOCUMENT'.
    ASSIGN (SYMBOL_NAME) TO .
    WRITE AT OFFSET  AS SYMBOL COLOR COL_TOTAL." Sin HOTSPOT
  ENDIF.
* Escribir el contenido de la línea
  FORMAT INTENSIFIED OFF.
  ADD 3 TO OFFSET.
  WRITE AT OFFSET ITAB_WRITE-SETNAME.
  ADD 14 TO OFFSET.
  WRITE AT OFFSET ITAB_WRITE-VALOR.
  OFFSET = 25 + OFFSET.
  WRITE AT OFFSET ITAB_WRITE-JERARQUIA.
  HIDE ITAB_WRITE." Escondo TODA la cabecera

ENDFORM.                    " OUT_WRITE

Greetings,

Blag.

Read only

Former Member
0 Likes
617

Hi Laxmi,

I am not aware any FM available for ALV tree report purposes.

But you can check demo program BCALVTREE for sample codes including simple one.

Regards,

Ferry Lianto