2007 Apr 18 3:52 PM
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.
2007 Apr 18 4:02 PM
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.
2007 Apr 18 4:34 PM
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
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |