Vamos a la segunda parte...
Creamos otra clase. Este lo llamé: ZCL_ALV_TREE_MAINP. (En pocas palabras la clase "padre").
*********************************************************************************************
TRANSLATION:
Go to the second part ...
Create another class. This one called: ZCL_ALV_TREE_MAINP. (In short the class "father").
*********************************************************************************************
Luego ingresamos a Impl y copiamos esto:
****************************************************************************************
TRANSLATION:
Then we enter Impl and copy this:
*"* local class implementation for public class
*"* use this source file for the implementation part of
*"* local helper classes
* Defino una clase local para los eventos del toolbar
CLASS lcl_toolbar_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS: on_function_selected
FOR EVENT function_selected OF cl_gui_toolbar
IMPORTING fcode.
ENDCLASS. "lcl_toolbar_event_receiver DEFINITION
*---------------------------------------------------------------------*
* Implemento una clase local para los eventos del toolbar
CLASS lcl_toolbar_event_receiver IMPLEMENTATION.
METHOD on_function_selected.
DATA: flag_s TYPE c.
CASE fcode.
WHEN '&CRR'.
flag_s = '1'.
CALL METHOD zcl_alv_tree_mainp=>close_nodes_tree.
CALL METHOD zcl_alv_tree_mainp=>pagination
EXPORTING
flag_s = flag_s.
CALL METHOD zcl_alv_tree_mainp=>button_activated
EXPORTING
p_button = '&CRR'.
WHEN '&CRL'.
flag_s = '2'.
CALL METHOD zcl_alv_tree_mainp=>close_nodes_tree.
CALL METHOD zcl_alv_tree_mainp=>pagination
EXPORTING
flag_s = flag_s.
CALL METHOD zcl_alv_tree_mainp=>button_activated
EXPORTING
p_button = '&CRL'.
WHEN '&CTL'.
flag_s = '3'.
CALL METHOD zcl_alv_tree_mainp=>close_nodes_tree.
CALL METHOD zcl_alv_tree_mainp=>pagination
EXPORTING
flag_s = flag_s.
CALL METHOD zcl_alv_tree_mainp=>button_activated
EXPORTING
p_button = '&CTL'.
WHEN '&CTR'.
flag_s = '4'.
CALL METHOD zcl_alv_tree_mainp=>close_nodes_tree.
CALL METHOD zcl_alv_tree_mainp=>pagination
EXPORTING
flag_s = flag_s.
CALL METHOD zcl_alv_tree_mainp=>button_activated
EXPORTING
p_button = '&CTR'.
WHEN '&SEL'.
CALL METHOD zcl_alv_tree_mainp=>open_nodes_tree.
CALL METHOD zcl_alv_tree_mainp=>button_activated
EXPORTING
p_button = '&SEL'.
WHEN '&DES'.
CALL METHOD zcl_alv_tree_mainp=>close_nodes_tree.
CALL METHOD zcl_alv_tree_mainp=>button_activated
EXPORTING
p_button = '&DES'.
WHEN '&GR1'.
CALL METHOD zcl_alv_tree_mainp=>display_graphic
EXPORTING
p_num_button = '01'.
CALL METHOD zcl_alv_tree_mainp=>button_activated
EXPORTING
p_button = '&GR1'.
WHEN '&GR2'.
CALL METHOD zcl_alv_tree_mainp=>display_graphic
EXPORTING
p_num_button = '02'.
CALL METHOD zcl_alv_tree_mainp=>button_activated
EXPORTING
p_button = '&GR2'.
WHEN '&XXL'.
CALL METHOD zcl_alv_tree_mainp=>export_to_excel.
CALL METHOD zcl_alv_tree_mainp=>button_activated
EXPORTING
p_button = '&XXL'.
WHEN '&ISU'.
CALL METHOD zcl_alv_tree_mainp=>sort_column
EXPORTING
p_ucomm = fcode.
CALL METHOD zcl_alv_tree_mainp=>button_activated
EXPORTING
p_button = '&ISU'.
WHEN '&ISD'.
CALL METHOD zcl_alv_tree_mainp=>sort_column
EXPORTING
p_ucomm = fcode.
CALL METHOD zcl_alv_tree_mainp=>button_activated
EXPORTING
p_button = '&ISD'.
WHEN '&FIL'.
CALL METHOD zcl_alv_tree_mainp=>filter
EXPORTING
p_ucomm = fcode.
CALL METHOD zcl_alv_tree_mainp=>button_activated
EXPORTING
p_button = '&FIL'.
WHEN '&UND'.
CALL METHOD zcl_alv_tree_mainp=>undo_filter
EXPORTING
p_ucomm = fcode.
CALL METHOD zcl_alv_tree_mainp=>button_activated
EXPORTING
p_button = '&UND'.
WHEN '&ADL'.
CALL METHOD zcl_alv_tree_mainp=>add_level
EXPORTING
p_ucomm = fcode.
CALL METHOD zcl_alv_tree_mainp=>button_activated
EXPORTING
p_button = '&ADL'.
WHEN '&SUL'.
CALL METHOD zcl_alv_tree_mainp=>subtract_level
EXPORTING
p_ucomm = fcode.
CALL METHOD zcl_alv_tree_mainp=>button_activated
EXPORTING
p_button = '&SUL'.
WHEN '&SCH'.
CALL METHOD zcl_alv_tree_mainp=>select_all.
CALL METHOD zcl_alv_tree_mainp=>button_activated
EXPORTING
p_button = '&SEL'.
WHEN '&DCH'.
CALL METHOD zcl_alv_tree_mainp=>unselect_all.
CALL METHOD zcl_alv_tree_mainp=>button_activated
EXPORTING
p_button = '&DES'.
ENDCASE.
ENDMETHOD. "on_function_selected
ENDCLASS. "lcl_toolbar_event_receiver IMPLEMENTATION
"nota : si deseas crear mas botones desde el programa
" CALL METHOD ao_tree->ao_tree->get_toolbar_object
* IMPORTING
* er_toolbar = ao_toolbar.
*
* CHECK NOT ao_toolbar IS INITIAL.
*
* CALL METHOD ao_toolbar->add_button
* EXPORTING
* fcode = '&XXX'
* icon = 'dd'
* butn_type = cntb_btype_button
* text = ''
* quickinfo = ''
* EXCEPTIONS
* cntl_error = 1
* cntb_btype_error = 2
* cntb_error_fcode = 3
* OTHERS = 4.
* Creas tu propia clase local para los eventos de aquellos botones
"nota : si deseo manipular datos desde el programa lo puedo hacer de la sgte. manera
* ASSIGN ao_tree->at_nodetab->* TO <ta>.
* LOOP AT <ta> INTO <wa>.
* CLEAR at_nodetab2.
* MOVE-CORRESPONDING <wa> TO at_nodetab2. " a cualq tabla del programa
* APPEND at_nodetab2.
* ENDLOOP.
Para los mensajes se creo la clase ZHRMSG
Estos son los contenidos:
*********TRANSLATION*********************
For messages ZHRMSG class was created
These are the contents:
These are the contents:
************************************************
074 Error en el contenedor del alv tree.
081 Error en los eventos del alv tree.
131 El directorio no existe o no es soportado por gui.
499 Nodo relativo no encontrado
503 Nodo no encontrado
504 Error en el gui_download
517 Posiciones Ordenadas : &
531 Registros filtrados : &
534 Nombre del archivo asignado exitosamente
684 Nivel: &
718 Nivel no existe ó es mayor a &
959 El nivel del árbol actualmente es : &
959 El nivel del árbol actualmente es : &
---------------------------------------------------------------
Ahora ingresamos a la pestaña Métodos - En Tipos Locales copiamos esto:
*****************TRANSLATION**********************
Now we enter the tab Methods - Types, Local copy this:
*********************************************************
*"* use this source file for any type declarations (class
*"* definitions, interfaces or data types) you need for method
*"* implementation or private method's signature
INCLUDE <icon>.
CLASS cl_gui_cfw DEFINITION LOAD.
CLASS cl_gui_column_tree DEFINITION LOAD.
-----------------------------------------------------------------------------------------------------------------------------
Ahora copiamos en Sección Pública, esto:
**************TRANSLATION***********************
Now copy in Public Section, this:
*******************************************************
class ZCL_ALV_TREE_MAINP definition
public
final
create public .
*"* public components of class ZCL_ALV_TREE_MAINP
*"* do not include other source files here!!!
public section.
class-data AO_CONTAINER type ref to CL_GUI_CUSTOM_CONTAINER .
class-data AO_CONTAINER1 type ref to CL_GUI_CUSTOM_CONTAINER .
class-data AO_GRAPHIC type ref to CL_ALV_GRAPHICS .
class-data AO_NODETAB type ref to DATA .
class-data AO_NODETAB3 type ref to DATA .
class-data AO_NODETAB5 type ref to DATA .
class-data AO_NODETAB_GRAPH01 type ref to DATA .
class-data AO_NODETAB_GRAPH02 type ref to DATA .
class-data AO_NODETAB_NIVEL type ref to DATA .
class-data AO_NODETAB_SORT type ref to DATA .
class-data AO_TOOLBAR type ref to CL_GUI_TOOLBAR .
class-data AO_TOOLBAR1 type ref to CL_GUI_TOOLBAR .
class-data AO_TREE type ref to ZCL_ALV_TREE_INFO .
class-data AO_TREE1 type ref to ZCL_ALV_TREE_INFO .
class-data AO_TREE_B type ref to CL_ALV_TREE_BASE .
class-data AP_BUTTON_ACTIVATED type STRING .
constants AP_BUTTON_ADL type UI_FUNC value '&ADL'. "#EC NOTEXT
constants AP_BUTTON_CRL type UI_FUNC value '&CRL'. "#EC NOTEXT
constants AP_BUTTON_CRR type UI_FUNC value '&CRR'. "#EC NOTEXT
constants AP_BUTTON_CTL type UI_FUNC value '&CTL'. "#EC NOTEXT
constants AP_BUTTON_CTR type UI_FUNC value '&CTR'. "#EC NOTEXT
constants AP_BUTTON_DCH type UI_FUNC value '&DCH'. "#EC NOTEXT
constants AP_BUTTON_DES type UI_FUNC value '&DES'. "#EC NOTEXT
constants AP_BUTTON_FIL type UI_FUNC value '&FIL'. "#EC NOTEXT
constants AP_BUTTON_GR1 type UI_FUNC value '&GR1'. "#EC NOTEXT
constants AP_BUTTON_GR2 type UI_FUNC value '&GR2'. "#EC NOTEXT
constants AP_BUTTON_ISD type UI_FUNC value '&ISD'. "#EC NOTEXT
constants AP_BUTTON_ISU type UI_FUNC value '&ISU'. "#EC NOTEXT
constants AP_BUTTON_SCH type UI_FUNC value '&SCH'. "#EC NOTEXT
constants AP_BUTTON_SEL type UI_FUNC value '&SEL'. "#EC NOTEXT
constants AP_BUTTON_SEP type UI_FUNC value ' '. "#EC NOTEXT
constants AP_BUTTON_SUL type UI_FUNC value '&SUL'. "#EC NOTEXT
constants AP_BUTTON_UND type UI_FUNC value '&UND'. "#EC NOTEXT
constants AP_BUTTON_XXL type UI_FUNC value '&XXL'. "#EC NOTEXT
class-data AP_COLLECT_GRAPHICS type XFELD .
class-data AP_NIVEL_EXCEL type SEU_TYPE .
constants AP_FIELD_COL type DYNFNAM value 'AT_COLUMNS'. "#EC NOTEXT
constants AP_FIELD_CONTAINER type DYNFNAM value 'CCONTAINER1'. "#EC NOTEXT
constants AP_FIELD_FCG type DYNFNAM value 'AT_FIELDCATALOG_GRAPHIC'. "#EC NOTEXT
constants AP_FIELD_FIELDGROUP type DYNFNAM value '<FS_FIELD_GROUP'. "#EC NOTEXT
class-data AP_FIELD_GRAPHICS type STRING .
constants AP_FIELD_GROUP type DYNFNAM value 'AW_GROUP-CONTAIN'. "#EC NOTEXT
class-data AP_FIELD_GROUP01 type DYNFNAM .
class-data AP_FIELD_GROUP02 type DYNFNAM .
class-data AP_FIELD_GROUP03 type DYNFNAM .
class-data AP_FIELD_GROUP04 type DYNFNAM .
class-data AP_FIELD_GROUP05 type DYNFNAM .
class-data AP_FIELD_GROUP06 type DYNFNAM .
class-data AP_FIELD_GROUP07 type DYNFNAM .
class-data AP_FIELD_GROUP08 type DYNFNAM .
class-data AP_FIELD_GROUP09 type DYNFNAM .
constants AP_FIELD_KEY type DYNFNAM value '<WI>-TKEY'. "#EC NOTEXT
class-data AP_FIELD_KEY00 type LVC_NKEY .
class-data AP_FIELD_KEY01 type LVC_NKEY .
class-data AP_FIELD_KEY02 type LVC_NKEY .
class-data AP_FIELD_KEY03 type LVC_NKEY .
class-data AP_FIELD_KEY04 type LVC_NKEY .
class-data AP_FIELD_KEY05 type LVC_NKEY .
class-data AP_FIELD_KEY06 type LVC_NKEY .
class-data AP_FIELD_KEY07 type LVC_NKEY .
class-data AP_FIELD_KEY08 type LVC_NKEY .
class-data AP_FIELD_KEY09 type LVC_NKEY .
constants AP_FIELD_KEY2 type DYNFNAM value '<WI2>-TKEY'. "#EC NOTEXT
constants AP_FIELD_KEY5 type DYNFNAM value '<WI5>-TKEY'. "#EC NOTEXT
constants AP_FIELD_NG type DYNFNAM value 'AO_NODETAB_GRAPH'. "#EC NOTEXT
class-data AP_FIELD_OUT_EXCEL type CHAR255 .
constants AP_FIELD_PAGE type DYNFNAM value '<WI>-TPAGE'. "#EC NOTEXT
constants AP_FIELD_RUN_NIVEL type DYNFNAM value 'RUN_NIVEL'. "#EC NOTEXT
class-data AP_FIELD_SORT01 type DYNFNAM .
class-data AP_FIELD_SORT02 type DYNFNAM .
class-data AP_FIELD_SORT03 type DYNFNAM .
class-data AP_FIELD_SORT04 type DYNFNAM .
class-data AP_FIELD_SORT05 type DYNFNAM .
class-data AP_FIELD_SORT06 type DYNFNAM .
class-data AP_FIELD_SORT07 type DYNFNAM .
class-data AP_FIELD_SORT08 type DYNFNAM .
class-data AP_FIELD_SORT09 type DYNFNAM .
class-data AP_FIELD_SORT_TKEY type DYNFNAM value 'TKEY'. "#EC NOTEXT .
class-data AP_FIELD_SORT_TYPE type DYNFNAM value 'TYPE'. "#EC NOTEXT .
constants AP_FIELD_TSCREEN type DYNFNAM value '<WI>-TSCREEN'. "#EC NOTEXT
constants AP_FIELD_TSCREEN2 type DYNFNAM value '<WI2>-TSCREEN'. "#EC NOTEXT
constants AP_FIELD_TYPE type DYNFNAM value '<WI>-TYPE'. "#EC NOTEXT
constants AP_FIELD_TYPE2 type DYNFNAM value '<WI2>-TYPE'. "#EC NOTEXT
constants AP_FIELD_TYPE5 type DYNFNAM value '<WI5>-TYPE'. "#EC NOTEXT
constants AP_FIELD_WECHECK type DYNFNAM value '<WE>-CHECKBOX'. "#EC NOTEXT
constants AP_FIELD_WETKEY type DYNFNAM value '<WE>-TKEY'. "#EC NOTEXT
constants AP_FIELD_WETYPE type DYNFNAM value '<WE>-TYPE'. "#EC NOTEXT
constants AP_FIELD_ZSAVE type DYNFNAM value '<WI>-TSAVE'. "#EC NOTEXT
class-data AP_GROUP type C .
class-data AP_GROUP_FIELD01 type DYNFNAM .
class-data AP_GROUP_FIELD02 type DYNFNAM .
class-data AP_GROUP_FIELD03 type DYNFNAM .
class-data AP_GROUP_FIELD04 type DYNFNAM .
class-data AP_GROUP_FIELD05 type DYNFNAM .
class-data AP_GROUP_FIELD06 type DYNFNAM .
class-data AP_GROUP_FIELD07 type DYNFNAM .
class-data AP_GROUP_FIELD08 type DYNFNAM .
class-data AP_GROUP_FIELD09 type DYNFNAM .
class-data AP_GROUP_FIELD10 type DYNFNAM .
class-data AP_ITEMS_X_PAGE type I .
type-pools SDYDO .
class-data AP_I_BACKGROUND_ID type SDYDO_KEY .
class-data AP_I_DEFAULT type CHAR01 .
class-data AP_I_LOGO type SDYDO_VALUE .
class-data AP_I_SAVE type CHAR01 .
class-data AP_I_STRUCT_NAME type DD02L-TABNAME .
class-data AP_I_STRUCT_NAME_GRAPHIC type DD02L-TABNAME .
class-data AP_LABEL_AGROUP_FIELD type DYNFNAM value 'AP_GROUP_FIELD'. "#EC NOTEXT .
constants AP_LABEL_COM type DYNFNAM value 'TCOM'. "#EC NOTEXT
class-data AP_LABEL_CONTAIN type DYNFNAM value 'CONTAIN'. "#EC NOTEXT .
class-data AP_LABEL_FIELD_GROUP type DYNFNAM value 'AP_FIELD_GROUP'. "#EC NOTEXT .
class-data AP_LABEL_FIELD_KEY type DYNFNAM value 'AP_FIELD_KEY'. "#EC NOTEXT .
class-data AP_LABEL_FIELD_SORT type DYNFNAM value 'AP_FIELD_SORT'. "#EC NOTEXT .
class-data AP_LABEL_GROUP type DYNFNAM value 'AP_LABEL_GROUP'. "#EC NOTEXT .
class-data AP_LABEL_GROUP01 type DYNFNAM value 'TCOM'. "#EC NOTEXT .
class-data AP_LABEL_GROUP02 type DYNFNAM value 'TCOM'. "#EC NOTEXT .
class-data AP_LABEL_GROUP03 type DYNFNAM value 'TCOM'. "#EC NOTEXT .
class-data AP_LABEL_GROUP04 type DYNFNAM value 'TCOM'. "#EC NOTEXT .
class-data AP_LABEL_GROUP05 type DYNFNAM value 'TCOM'. "#EC NOTEXT .
class-data AP_LABEL_GROUP06 type DYNFNAM value 'TCOM'. "#EC NOTEXT .
class-data AP_LABEL_GROUP07 type DYNFNAM value 'TCOM'. "#EC NOTEXT .
class-data AP_LABEL_GROUP08 type DYNFNAM value 'TCOM'. "#EC NOTEXT .
class-data AP_LABEL_GROUP09 type DYNFNAM value 'TCOM'. "#EC NOTEXT .
constants AP_LABEL_KEY type DYNFNAM value 'TKEY'. "#EC NOTEXT
class-data AP_LABEL_LAST_FIELD type DYNFNAM .
class-data AP_LABEL_NIVEL_FIELD type DYNFNAM value 'AP_NIVEL_FIELD'. "#EC NOTEXT .
class-data AP_LABEL_NODE type DYNFNAM value 'NODE'. "#EC NOTEXT .
constants AP_LABEL_PAGE type DYNFNAM value 'TPAGE'. "#EC NOTEXT
class-data AP_LABEL_SCREEN type DYNFNAM value 'AP_LABEL_SCREEN'. "#EC NOTEXT .
class-data AP_LABEL_SCREEN01 type DYNFNAM value 'TCOM'. "#EC NOTEXT .
class-data AP_LABEL_SCREEN02 type DYNFNAM value 'TCOM'. "#EC NOTEXT .
class-data AP_LABEL_SCREEN03 type DYNFNAM value 'TCOM'. "#EC NOTEXT .
class-data AP_LABEL_SCREEN04 type DYNFNAM value 'TCOM'. "#EC NOTEXT .
class-data AP_LABEL_SCREEN05 type DYNFNAM value 'TCOM'. "#EC NOTEXT .
class-data AP_LABEL_SCREEN06 type DYNFNAM value 'TCOM'. "#EC NOTEXT .
class-data AP_LABEL_SCREEN07 type DYNFNAM value 'TCOM'. "#EC NOTEXT .
class-data AP_LABEL_SCREEN08 type DYNFNAM value 'TCOM'. "#EC NOTEXT .
class-data AP_LABEL_SCREEN09 type DYNFNAM value 'TCOM'. "#EC NOTEXT .
class-data AP_LABEL_SCREEN_FIELD type DYNFNAM value 'AP_SCREEN_FIELD'. "#EC NOTEXT .
class-data AP_LABEL_SCREEN_PAGE_B type DYNFNAM .
class-data AP_LABEL_SCREEN_PAGE_E type DYNFNAM .
constants AP_LABEL_TSCREEN type DYNFNAM value 'TSCREEN'. "#EC NOTEXT
constants AP_LABEL_TYPE type DYNFNAM value 'TYPE'. "#EC NOTEXT
constants AP_LABEL_ZSAVE type DYNFNAM value 'TSAVE'. "#EC NOTEXT
class-data AP_LAST_FIELD type DYNFNAM .
class-data AP_LAST_FIELD_CONT type DYNFNAM .
class-data AP_NAME_FILE_EXCEL type CHAR255 .
class-data AP_NIVEL_FIELD01 type DYNFNAM .
class-data AP_NIVEL_FIELD02 type DYNFNAM .
class-data AP_NIVEL_FIELD03 type DYNFNAM .
class-data AP_NIVEL_FIELD04 type DYNFNAM .
class-data AP_NIVEL_FIELD05 type DYNFNAM .
class-data AP_NIVEL_FIELD06 type DYNFNAM .
class-data AP_NIVEL_FIELD07 type DYNFNAM .
class-data AP_NIVEL_FIELD08 type DYNFNAM .
class-data AP_NIVEL_FIELD09 type DYNFNAM .
class-data AP_NIVEL_GRAPHICS type SEU_TYPE .
class-data AP_NODEHEADER type TV_NODEKEY .
class-data AP_NODES_MARKED01 type LVC_NKEY .
class-data AP_NODE_ID_KEY type LVC_NKEY .
class-data AP_NODE_TEXT type LVC_VALUE .
class-data AP_PAGE_END type I .
class-data AP_PAGE_MAX type CHAR4 .
class-data AP_PAGE_MIN type CHAR4 .
class-data AP_PAGE_PRESENT type I .
class-data AP_PROGRAM type PROGNAME .
class-data AP_PULSAC_OPEN type NUM .
class-data AP_SCREEN_FIELD01 type DYNFNAM .
class-data AP_SCREEN_FIELD02 type DYNFNAM .
class-data AP_SCREEN_FIELD03 type DYNFNAM .
class-data AP_SCREEN_FIELD04 type DYNFNAM .
class-data AP_SCREEN_FIELD05 type DYNFNAM .
class-data AP_SCREEN_FIELD06 type DYNFNAM .
class-data AP_SCREEN_FIELD07 type DYNFNAM .
class-data AP_SCREEN_FIELD08 type DYNFNAM .
class-data AP_SCREEN_FIELD09 type DYNFNAM .
class-data AP_SCREEN_FIELD10 type DYNFNAM .
constants AP_STRUCTURE type DYNFNAM value '<WI>-'. "#EC NOTEXT
constants AP_TFIELD_ROW type DYNFNAM value 'AT_ROWS'. "#EC NOTEXT
constants AP_WFIELD_ROW type DYNFNAM value 'AW_ROWS'. "#EC NOTEXT
class-data AT_ALL_LAYOUT type ZTITEM_LAYOUT .
class-data AT_CHECKED type LVC_T_CHIT .
class-data AT_COLUMNS01 type LVC_T_FNAM .
class-data AT_COLUMNS02 type LVC_T_FNAM .
class-data AT_FIELDCATALOG type LVC_T_FCAT .
class-data AT_FIELDCATALOG_GRAPHIC01 type LVC_T_FCAT .
class-data AT_FIELDCATALOG_GRAPHIC02 type LVC_T_FCAT .
class-data AT_GROUP type ZTDATATREE .
class-data AT_ITEM_LAYOUT type LVC_T_LAYI .
class-data AT_IT_EXCEPT_QINFO type LVC_T_QINF .
class-data AT_IT_FILTER type LVC_T_FILT .
class-data AT_IT_FILTER_NIVEL type LVC_T_FILT .
type-pools SLIS .
class-data AT_IT_LIST_COMMENTARY type SLIS_T_LISTHEADER .
class-data AT_IT_SPECIAL_GROUPS type LVC_T_SGRP .
class-data AT_MARKED type LVC_T_NKEY .
class-data AT_MIN_NIVEL type ZTASSIGN .
class-data AT_NODES_MARKED01 type LVC_T_NKEY .
class-data AT_NODES_MARKED02 type LVC_T_NKEY .
class-data AT_NODES_MARKED03 type LVC_T_NKEY .
class-data AT_NODES_MARKED_HEADER type LVC_T_NKEY .
class-data AT_NODES_SORTED type ZTSORT .
class-data AT_NODES_SORTED2 type ZTSORT .
class-data AT_NODES_SORTED3 type ZTSORT .
class-data AT_NODES_SORTED4 type ZTSORT .
class-data AT_ROWS01 type LVC_T_ROID .
class-data AT_ROWS02 type LVC_T_ROID .
class-data AT_SELECTED type LVC_T_NKEY .
class-data AT_TOOLBAR_EXCL type UI_FUNCTIONS .
class-data AW_ALL_LAYOUT type ZWITEM_LAYOUT .
class-data AW_CHECKED type LVC_S_CHIT .
class-data AW_COLUMNS01 type LVC_FNAME .
class-data AW_COLUMNS02 type LVC_FNAME .
class-data AW_GROUP type ZWDATATREE .
class-data AW_IS_EXCEPTION_FIELD type LVC_S_L004 .
class-data AW_IS_HIERARCHY_HEADER type TREEV_HHDR .
class-data AW_IS_VARIANT type DISVARIANT .
class-data AW_ITEM_LAYOUT type LVC_S_LAYI .
class-data AW_LAYOUT_NODE type LVC_S_LAYN .
class-data AW_MIN_NIVEL type ZWASSIGN .
class-data AW_NODES_SORTED type ZWSORT .
class-data AW_NODES_SORTED2 type ZWSORT .
class-data AW_NODE_LAYOUT type LVC_S_LACN .
class-data AW_ROWS01 type LVC_S_ROID .
class-data AW_ROWS02 type LVC_S_ROID .
class-data AW_SELECTED type LVC_S_NKEY .
constants LIM_NIVEL type I value 9. "#EC NOTEXT
class-data MT_GROUPLEVELS type LVC_T_GRPL .
class-data MT_SORT type LVC_T_SORT .
class-methods INIT_TREE
importing
value(P_PROGRAM) type PROGNAME
value(P_STRUCTURE) type DD02L-TABNAME
value(P_HEADER) type TREEV_HHDR
!P_ALV_IS_VARIANT type DISVARIANT optional
!P_ALV_I_SAVE type CHAR01 optional
!P_ALV_I_DEFAULT type CHAR01 default 'X'
!P_ALV_IS_EXCEPTION_FIELD type LVC_S_L004 optional
!P_ALV_IT_SPECIAL_GROUPS type LVC_T_SGRP optional
!P_ALV_IT_LIST_COMMENTARY type SLIS_T_LISTHEADER optional
!P_ALV_I_LOGO type SDYDO_VALUE optional
!P_ALV_I_BACKGROUND_ID type SDYDO_KEY optional
!P_ALV_IT_EXCEPT_QINFO type LVC_T_QINF optional
!P_ALV_IT_FILTER type LVC_T_FILT optional
!P_HIDE_MC_FC_F4 type XFELD optional
!P_HIDE_MC_FC_CALCULATE type XFELD optional
!P_HIDE_MC_FC_CALCULATE_AVG type XFELD optional
!P_HIDE_MC_FC_CALCULATE_MAX type XFELD optional
!P_HIDE_MC_FC_CALCULATE_MIN type XFELD optional
!P_HIDE_MC_FC_CALCULATE_SUM type XFELD optional
!P_HIDE_MC_FC_COLLAPSE type XFELD optional
!P_HIDE_MC_FC_COL_INVISIBLE type XFELD optional
!P_HIDE_MC_FC_COL_OPTIMIZE type XFELD optional
!P_HIDE_MC_FC_CURRENT_VARIANT type XFELD optional
!P_HIDE_MC_FC_DETAIL type XFELD optional
!P_HIDE_MC_FC_EXPAND type XFELD optional
!P_HIDE_MC_FC_FIND type XFELD optional
!P_HIDE_MC_FC_GRAPHICS type XFELD optional
!P_HIDE_MC_FC_HELP type XFELD optional
!P_HIDE_MC_FC_LOAD_VARIANT type XFELD optional
!P_HIDE_MC_FC_MAINTAIN_VARIANT type XFELD optional
!P_HIDE_MC_FC_PRINT_BACK type XFELD optional
!P_HIDE_MC_FC_PRINT_BACK_ALL type XFELD optional
!P_HIDE_MC_FC_PRINT_PREV type XFELD optional
!P_HIDE_MC_FC_PRINT_PREV_ALL type XFELD optional
!P_HIDE_MC_FC_SAVE_VARIANT type XFELD optional
!P_HIDE_MC_FC_SETTOP type XFELD optional
!P_HIDE_MC_FC_FIND_MORE type XFELD optional
!P_HIDE_AP_BUTTON_CRR type XFELD optional
!P_HIDE_AP_BUTTON_CRL type XFELD optional
!P_HIDE_AP_BUTTON_CTL type XFELD optional
!P_HIDE_AP_BUTTON_CTR type XFELD optional
!P_HIDE_AP_BUTTON_SEL type XFELD optional
!P_HIDE_AP_BUTTON_DES type XFELD optional
!P_HIDE_AP_BUTTON_GR1 type XFELD optional
!P_HIDE_AP_BUTTON_GR2 type XFELD optional
!P_HIDE_AP_BUTTON_XXL type XFELD optional
!P_HIDE_AP_BUTTON_ISU type XFELD optional
!P_HIDE_AP_BUTTON_ISD type XFELD optional
!P_HIDE_AP_BUTTON_FIL type XFELD optional
!P_HIDE_AP_BUTTON_UND type XFELD optional
!P_HIDE_AP_BUTTON_ADL type XFELD optional
!P_HIDE_AP_BUTTON_SUL type XFELD optional
!P_HIDE_AP_BUTTON_SEP type XFELD optional
!P_HIDE_AP_BUTTON_SCH type XFELD optional
!P_HIDE_AP_BUTTON_DCH type XFELD optional .
class-methods BUILD_HIERARCHY_HEADER
importing
!P_STRUCT_HEADER type TREEV_HHDR
!P_PROGR type PROGNAME .
class-methods BUILD_FIELDCATALOG
importing
!P_STRUCTURE_NAME type DD02L-TABNAME
exporting
!P_FIELDCAT type LVC_T_FCAT .
class-methods HIDE_FUNCTIONS
importing
!P_MC_FC_F4 type XFELD optional
!P_MC_FC_CALCULATE type XFELD optional
!P_MC_FC_CALCULATE_AVG type XFELD optional
!P_MC_FC_CALCULATE_MAX type XFELD optional
!P_MC_FC_CALCULATE_MIN type XFELD optional
!P_MC_FC_CALCULATE_SUM type XFELD optional
!P_MC_FC_COLLAPSE type XFELD optional
!P_MC_FC_COL_INVISIBLE type XFELD optional
!P_MC_FC_COL_OPTIMIZE type XFELD optional
!P_MC_FC_CURRENT_VARIANT type XFELD optional
!P_MC_FC_DETAIL type XFELD optional
!P_MC_FC_EXPAND type XFELD optional
!P_MC_FC_FIND type XFELD optional
!P_MC_FC_GRAPHICS type XFELD optional
!P_MC_FC_HELP type XFELD optional
!P_MC_FC_LOAD_VARIANT type XFELD optional
!P_MC_FC_MAINTAIN_VARIANT type XFELD optional
!P_MC_FC_PRINT_BACK type XFELD optional
!P_MC_FC_PRINT_BACK_ALL type XFELD optional
!P_MC_FC_PRINT_PREV type XFELD optional
!P_MC_FC_PRINT_PREV_ALL type XFELD optional
!P_MC_FC_SAVE_VARIANT type XFELD optional
!P_MC_FC_SETTOP type XFELD optional
!P_MC_FC_FIND_MORE type XFELD optional .
class-methods HIDE_FUNCTIONS_CLASS
importing
!P_AP_BUTTON_CRR type XFELD optional
!P_AP_BUTTON_CRL type XFELD optional
!P_AP_BUTTON_CTL type XFELD optional
!P_AP_BUTTON_CTR type XFELD optional
!P_AP_BUTTON_SEL type XFELD optional
!P_AP_BUTTON_DES type XFELD optional
!P_AP_BUTTON_GR1 type XFELD optional
!P_AP_BUTTON_GR2 type XFELD optional
!P_AP_BUTTON_XXL type XFELD optional
!P_AP_BUTTON_ISU type XFELD optional
!P_AP_BUTTON_ISD type XFELD optional
!P_AP_BUTTON_FIL type XFELD optional
!P_AP_BUTTON_UND type XFELD optional
!P_AP_BUTTON_ADL type XFELD optional
!P_AP_BUTTON_SUL type XFELD optional
!P_AP_BUTTON_SEP type XFELD optional
!P_AP_BUTTON_SCH type XFELD optional
!P_AP_BUTTON_DCH type XFELD optional .
class-methods DISPLAY_ALV .
class-methods SEND_DATA
importing
value(P_NODETAB) type DATA
value(P_UPDATE_CALCULATIONS) type XFELD
!P_NODETAB_GRAPH type DATA optional
!P_FIELD_GRAPHICS type STRING optional
!P_NIVEL_GRAPHICS type SEU_TYPE optional
!P_COLLECT_GRAPHICS type XFELD optional
!P_NODETAB_GRAPH2 type DATA optional
!P_FIELD_GRAPHICS2 type STRING optional
!P_NIVEL_GRAPHICS2 type SEU_TYPE optional
!P_COLLECT_GRAPHICS2 type XFELD optional
!P_NODETAB_EXCEL type DATA optional
!P_NIVEL_EXCEL type SEU_TYPE optional
!P_FIELD_OUT_EXCEL type STRING optional
!P_NAME_FILE_EXCEL type DYNFNAM optional
!P_AGROUP_FIELD type STRING optional
!P_SCREEN_FIELD type STRING optional
!P_SCREEN_PAGE_BEGIN type DYNFNAM optional
!P_SCREEN_PAGE_END type DYNFNAM optional
!P_SORT type DATA optional
!P_EV_RIGHT_CLICK type XFELD optional
!P_EV_LEFT_CLICK_DESIGN type XFELD optional
!P_EV_MOVE_CONTROL type XFELD optional
!P_EV_SIZE_CONTROL type XFELD optional
!P_EV_LEFT_CLICK_RUN type XFELD optional
!P_EV_DEF_CONTEXT_MENU_REQUEST type XFELD optional
!P_EV_HEA_CONTEXT_MENU_REQUEST type XFELD optional
!P_EV_HEA_CONTEXT_MENU_SELECT type XFELD optional
!P_EV_BEFORE_USER_COMMAND type XFELD optional
!P_EV_AFTER_USER_COMMAND type XFELD optional
!P_EV_TOP_OF_PAGE type XFELD optional
!P_EV_DEF_CONTEXT_MENU_SELECT type XFELD optional
!P_EV_TOP_OF_LIST type XFELD optional
!P_EV_BUTTON_CLICK type XFELD optional
!P_EV_CHECKBOX_CHANGE type XFELD optional
!P_EV_EXPAND_NC type XFELD optional
!P_EV_HEADER_CLICK type XFELD optional
!P_EV_HEADER_CONTEXT_MENU type XFELD optional
!P_EV_ITEM_CONT_MENU_REQUEST type XFELD optional
!P_EV_ITEM_CONT_MENU_SELECTED type XFELD optional
!P_EV_ITEM_DOUBLE_CLICK type XFELD optional
!P_EV_ITEM_KEYPRESS type XFELD optional
!P_EV_LINK_CLICK type XFELD optional
!P_EV_NODE_CONT_MENU_REQUEST type XFELD optional
!P_EV_NODE_CONT_MENU_SELECTED type XFELD optional
!P_EV_NODE_DOUBLE_CLICK type XFELD optional
!P_EV_ON_DRAG type XFELD optional
!P_EV_ON_DRAG_MULTIPLE type XFELD optional
!P_EV_ON_DROP type XFELD optional
!P_EV_ON_DROP_COMPLETE type XFELD optional
!P_EV_ON_DROP_COMPLETE_MULTIPLE type XFELD optional
!P_EV_ON_DROP_GET_FLAVOR type XFELD optional
!P_EV_SELECTION_CHANGED type XFELD optional
!P_EV_NODE_KEYPRESS type XFELD optional .
class-methods ADD_NODE_TREE
importing
!P_NODE_RESULT type ANY optional
!P_RELAT_KEY type LVC_NKEY
!P_IDX type SYTABIX
changing
!P_NEW_KEY type LVC_NKEY .
class-methods PAGINATION
importing
!FLAG_S type C .
class-methods CHANGE_TOOLBAR .
class-methods DEFINE_EVENTS
importing
!P_RIGHT_CLICK type XFELD optional
!P_LEFT_CLICK_DESIGN type XFELD optional
!P_MOVE_CONTROL type XFELD optional
!P_SIZE_CONTROL type XFELD optional
!P_LEFT_CLICK_RUN type XFELD optional
!P_DEFAULT_CONTEXT_MENU_REQUEST type XFELD optional
!P_HEADER_CONTEXT_MENU_REQUEST type XFELD optional
!P_HEADER_CONTEXT_MENU_SELECT type XFELD optional
!P_BEFORE_USER_COMMAND type XFELD optional
!P_AFTER_USER_COMMAND type XFELD optional
!P_TOP_OF_PAGE type XFELD optional
!P_DEFAULT_CONTEXT_MENU_SELECT type XFELD optional
!P_TOP_OF_LIST type XFELD optional
!P_BUTTON_CLICK type XFELD optional
!P_CHECKBOX_CHANGE type XFELD optional
!P_EXPAND_NC type XFELD optional
!P_HEADER_CLICK type XFELD optional
!P_HEADER_CONTEXT_MENU type XFELD optional
!P_ITEM_CONTEXT_MENU_REQUEST type XFELD optional
!P_ITEM_CONTEXT_MENU_SELECTED type XFELD optional
!P_ITEM_DOUBLE_CLICK type XFELD optional
!P_ITEM_KEYPRESS type XFELD optional
!P_LINK_CLICK type XFELD optional
!P_NODE_CONTEXT_MENU_REQUEST type XFELD optional
!P_NODE_CONTEXT_MENU_SELECTED type XFELD optional
!P_NODE_DOUBLE_CLICK type XFELD optional
!P_ON_DRAG type XFELD optional
!P_ON_DRAG_MULTIPLE type XFELD optional
!P_ON_DROP type XFELD optional
!P_ON_DROP_COMPLETE type XFELD optional
!P_ON_DROP_COMPLETE_MULTIPLE type XFELD optional
!P_ON_DROP_GET_FLAVOR type XFELD optional
!P_SELECTION_CHANGED type XFELD optional
!P_NODE_KEYPRESS type XFELD optional .
class-methods ASSIGN_ALV
importing
!P_ALV_IS_VARIANT type DISVARIANT
!P_ALV_I_SAVE type CHAR01
!P_ALV_I_DEFAULT type CHAR01
!P_ALV_IS_EXCEPTION_FIELD type LVC_S_L004
!P_ALV_IT_SPECIAL_GROUPS type LVC_T_SGRP
!P_ALV_IT_LIST_COMMENTARY type SLIS_T_LISTHEADER
!P_ALV_I_LOGO type SDYDO_VALUE
!P_ALV_I_BACKGROUND_ID type SDYDO_KEY
!P_ALV_IT_EXCEPT_QINFO type LVC_T_QINF
!P_ALV_IT_FILTER type LVC_T_FILT .
class-methods RUN_NIVEL .
class-methods GROUPBY .
class-methods OPEN_NODES_TREE .
class-methods CLOSE_NODES_TREE .
class-methods FREE_PROGRAM .
class-methods CHANGE_ICON
importing
!P_TEXT type STRING optional
changing
!P_ITEM_IMAGE type TV_IMAGE optional .
class-methods PRINT_NORMAL_TO_BOLD
importing
!P_NIVEL type SEU_TYPE .
class-methods PRINT_BOLD_TO_NORMAL
importing
!P_NIVEL type SEU_TYPE .
class-methods SAVE_NODE_CHECKED
importing
!FLAG_G type C .
class-methods SAVE_NODE_SELECT
importing
!FLAG_G type C .
class-methods LAYOUT_NIVEL_TEXT
importing
value(P_KEY) type ZWITEM_LAYOUT-KEY_NODE
!P_NODE_TEXT type ZWITEM_LAYOUT-NODE_TEXT optional .
class-methods LAYOUT_NIVEL_NODE
importing
value(P_KEY) type ZWITEM_LAYOUT-KEY_NODE
!P_HIDDEN type AS4FLAG optional
!P_DISABLED type AS4FLAG optional
!P_ISFOLDER type AS4FLAG optional
!P_N_IMAGE type TV_IMAGE optional
!P_EXP_IMAGE type TV_IMAGE optional
!P_STYLE type INT4 optional
!P_LAST_HITEM type TV_ITMNAME optional
!P_NO_BRANCH type AS4FLAG optional
!P_EXPANDER type AS4FLAG optional
!P_DRAGDROPID type INT2 optional .
class-methods LAYOUT_NIVEL_ITEM
importing
value(P_KEY) type ZWITEM_LAYOUT-KEY_NODE
!P_FIELDNAME type LVC_FNAME optional
!P_CLASS type INT4 optional
!P_FONT type INT4 optional
!P_DISABLED type AS4FLAG optional
!P_EDITABLE type AS4FLAG optional
!P_HIDDEN type AS4FLAG optional
!P_ALIGNMENT type INT4 optional
!P_T_IMAGE type TV_IMAGE optional
!P_CHOSEN type AS4FLAG optional
!P_TOGG_RIGHT type AS4FLAG optional
!P_STYLE type INT4 optional .
class-methods DISPLAY_GRAPHIC
importing
!P_NUM_BUTTON type CHAR2 .
class-methods EXPORT_TO_EXCEL .
class-methods BUILD_GRAPHICS
importing
!P_FIELD_GRAPH type STRING
!P_NODETAB2 type DATA
!P_NIVEL type SEU_TYPE
!P_NUM_BUTTON type NUM
!P_COLLECT type XFELD .
class-methods BUILD_EXCEL
importing
!P_NODETAB3 type DATA
!P_NIVEL type SEU_TYPE optional .
class-methods ASSIGN_BY_GROUP
importing
!P_AGROUP_FIELD type STRING .
class-methods ASSIGN_BY_SCREEN
importing
!P_SCREEN_FIELD type STRING .
class-methods DELETE_NIVEL
importing
!P_NIVEL type STRING
!P_NODETAB type DATA
!P_STRUCTURE type DD02L-TABNAME
!P_CONTA type LVC_NKEY .
class-methods ASSIGN_BY_NIVEL
importing
!P_NIVEL type STRING .
class-methods SORT_COLUMN
importing
!P_UCOMM type SYUCOMM .
class-methods ASSIGN_SORT .
class-methods FILTER
importing
!P_UCOMM type SYUCOMM .
class-methods UNDO_FILTER
importing
!P_UCOMM type SYUCOMM optional .
class-methods ADD_LEVEL
importing
!P_UCOMM type SYUCOMM .
class-methods SUBTRACT_LEVEL
importing
!P_UCOMM type SYUCOMM .
class-methods CHANGE_GRAPHIC .
class-methods BUTTON_ACTIVATED
importing
!P_BUTTON type CHAR30 .
class-methods SELECT_ALL .
class-methods UNSELECT_ALL .
class-methods MARK_FATHER
importing
!P_KEY type LVC_NKEY .
class-methods UNMARK_FATHER
importing
!P_KEY type LVC_NKEY .
class-methods IS_HIDDEN
importing
!P_KEY type LVC_NKEY
exporting
!P_ANSWER type C .
class-methods UPDATE_FIELD_DYNPRO
importing
!P_NOMBRE_PROGRAMA type D020S-PROG
!P_NOMBRE_DYNPRO type D020S-DNUM
!P_NOMBRE_CAMPO type DYNFNAM
!P_LINEA type SYSTEPL optional
!P_VALOR type ANY .
class-methods FRAG_PATTERN
importing
!PS_SEPARADOR type C optional
!PS_NOMBRE_ESTRUCTURA type TABNAME
!PT_TABLA_I type ZTYDATAFILE
exporting
!LT_TRAMA_O type ZTYDATAFILE
!PT_TABLA_O type ref to DATA .
class-methods DEFINE_MASK
importing
!P_TABLA_I type ZTYDATAFILE
exporting
!P_MASCARA type CHAR255 .
class-methods FIXED_FRAME_COLUMNS
importing
!P_TRAMA type ZTTRAMA
exporting
!PW_INFO_DELIMITADA type CHAR2048 .
class-methods DISPLAY
importing
!PS_MSGTY type SYMSGTY .
-----------------------------------------------------------------------------------------------------------------------------
Ahora en cada método colocamos esto:
***************TRANSLATION***********************
Now put that each method:
********************************************************DATA: l_tree_container_name(30) TYPE c.
DATA: at_toolbar_excl TYPE ui_functions.
l_tree_container_name = ap_field_container.
CLEAR at_toolbar_excl.
* creo el contenedor del árbol
CREATE OBJECT ao_container
EXPORTING
container_name = l_tree_container_name
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5.
IF sy-subrc <> 0.
MESSAGE ID 'ZHRMSG' TYPE 'E' NUMBER 074.
ENDIF.
** creo el árbol
CREATE OBJECT ao_tree
EXPORTING
parent = ao_container
node_selection_mode = cl_gui_column_tree=>node_sel_mode_multiple
item_selection = 'X'
no_html_header = 'X'
no_toolbar = ''
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
illegal_node_selection_mode = 5
failed = 6
illegal_column_name = 7.
IF sy-subrc <> 0.
MESSAGE ID 'ZHRMSG' TYPE 'E' NUMBER 074.
ENDIF.
CALL METHOD ao_tree->get_name_program
EXPORTING
p_programa = p_program.
CALL METHOD zcl_alv_tree_mainp=>build_hierarchy_header
EXPORTING
p_struct_header = p_header
p_progr = p_program.
ap_i_struct_name = p_structure.
ap_i_struct_name_graphic = p_structure.
CALL METHOD zcl_alv_tree_mainp=>build_fieldcatalog
EXPORTING
p_structure_name = p_structure
IMPORTING
p_fieldcat = at_fieldcatalog.
CALL METHOD zcl_alv_tree_mainp=>assign_alv
EXPORTING
p_alv_is_variant = p_alv_is_variant
p_alv_i_save = p_alv_i_save
p_alv_i_default = p_alv_i_default
p_alv_is_exception_field = p_alv_is_exception_field
p_alv_it_special_groups = p_alv_it_special_groups
p_alv_it_list_commentary = p_alv_it_list_commentary
p_alv_i_logo = p_alv_i_logo
p_alv_i_background_id = p_alv_i_background_id
p_alv_it_except_qinfo = p_alv_it_except_qinfo
p_alv_it_filter = p_alv_it_filter.
CALL METHOD zcl_alv_tree_mainp=>hide_functions
EXPORTING
p_mc_fc_f4 = p_hide_mc_fc_f4
p_mc_fc_calculate = p_hide_mc_fc_calculate
p_mc_fc_calculate_avg = p_hide_mc_fc_calculate_avg
p_mc_fc_calculate_max = p_hide_mc_fc_calculate_max
p_mc_fc_calculate_min = p_hide_mc_fc_calculate_min
p_mc_fc_calculate_sum = p_hide_mc_fc_calculate_sum
p_mc_fc_collapse = p_hide_mc_fc_collapse
p_mc_fc_col_invisible = p_hide_mc_fc_col_invisible
p_mc_fc_col_optimize = p_hide_mc_fc_col_optimize
p_mc_fc_current_variant = p_hide_mc_fc_current_variant
p_mc_fc_detail = p_hide_mc_fc_detail
p_mc_fc_expand = p_hide_mc_fc_expand
p_mc_fc_find = p_hide_mc_fc_find
p_mc_fc_graphics = p_hide_mc_fc_graphics
p_mc_fc_help = p_hide_mc_fc_help
p_mc_fc_load_variant = p_hide_mc_fc_load_variant
p_mc_fc_maintain_variant = p_hide_mc_fc_maintain_variant
p_mc_fc_print_back = p_hide_mc_fc_print_back
p_mc_fc_print_back_all = p_hide_mc_fc_print_back_all
p_mc_fc_print_prev = p_hide_mc_fc_print_prev
p_mc_fc_print_prev_all = p_hide_mc_fc_print_prev_all
p_mc_fc_save_variant = p_hide_mc_fc_save_variant
p_mc_fc_settop = p_hide_mc_fc_settop
p_mc_fc_find_more = p_hide_mc_fc_find_more.
CALL METHOD zcl_alv_tree_mainp=>hide_functions_class
EXPORTING
p_ap_button_crr = p_hide_ap_button_crr
p_ap_button_crl = p_hide_ap_button_crl
p_ap_button_ctl = p_hide_ap_button_ctl
p_ap_button_ctr = p_hide_ap_button_ctr
p_ap_button_sel = p_hide_ap_button_sel
p_ap_button_des = p_hide_ap_button_des
p_ap_button_gr1 = p_hide_ap_button_gr1
p_ap_button_gr2 = p_hide_ap_button_gr2
p_ap_button_xxl = p_hide_ap_button_xxl
p_ap_button_isu = p_hide_ap_button_isu
p_ap_button_isd = p_hide_ap_button_isd
p_ap_button_fil = p_hide_ap_button_fil
p_ap_button_und = p_hide_ap_button_und
p_ap_button_adl = p_hide_ap_button_adl
p_ap_button_sul = p_hide_ap_button_sul
p_ap_button_sch = p_hide_ap_button_sch
p_ap_button_dch = p_hide_ap_button_dch
p_ap_button_sep = p_hide_ap_button_sep.
ENDMETHOD.
METHOD BUILD_HIERARCHY_HEADER.
aw_is_hierarchy_header = p_struct_header.
ap_program = p_progr.
ENDMETHOD.
METHOD BUILD_FIELDCATALOG.
DATA: lt_fieldcatalog TYPE lvc_t_fcat.
FIELD-SYMBOLS: <fs_fieldcat> TYPE lvc_s_fcat.
CLEAR lt_fieldcatalog.
REFRESH lt_fieldcatalog[].
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = p_structure_name
CHANGING
ct_fieldcat = lt_fieldcatalog.
at_fieldcatalog = lt_fieldcatalog.
LOOP AT at_fieldcatalog ASSIGNING <fs_fieldcat>.
IF ( <fs_fieldcat>-fieldname = ap_label_key OR <fs_fieldcat>-fieldname = ap_label_type
OR <fs_fieldcat>-fieldname = ap_label_tscreen OR <fs_fieldcat>-fieldname = ap_label_zsave
OR <fs_fieldcat>-fieldname = ap_label_page OR <fs_fieldcat>-fieldname = ap_label_com ).
<fs_fieldcat>-no_out = 'X' .
ENDIF.
ENDLOOP.
p_fieldcat = at_fieldcatalog.
ENDMETHOD.
METHOD HIDE_FUNCTIONS.
IF p_mc_fc_f4 = 'X'.
APPEND ao_tree->mc_fc_f4 TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_calculate = 'X'.
APPEND ao_tree->mc_fc_calculate TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_calculate_avg = 'X'.
APPEND ao_tree->mc_fc_calculate_avg TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_calculate_max = 'X'.
APPEND ao_tree->mc_fc_calculate_max TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_calculate_min = 'X'.
APPEND ao_tree->mc_fc_calculate_min TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_calculate_sum = 'X'.
APPEND ao_tree->mc_fc_calculate_sum TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_collapse = 'X'.
APPEND ao_tree->mc_fc_collapse TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_col_invisible = 'X'.
APPEND ao_tree->mc_fc_col_invisible TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_col_optimize = 'X'.
APPEND ao_tree->mc_fc_col_optimize TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_current_variant = 'X'.
APPEND ao_tree->mc_fc_current_variant TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_detail = 'X'.
APPEND ao_tree->mc_fc_detail TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_expand = 'X'.
APPEND ao_tree->mc_fc_expand TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_find = 'X'.
APPEND ao_tree->mc_fc_find TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_graphics = 'X'.
APPEND ao_tree->mc_fc_graphics TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_help = 'X'.
APPEND ao_tree->mc_fc_help TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_load_variant = 'X'.
APPEND ao_tree->mc_fc_load_variant TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_maintain_variant = 'X'.
APPEND ao_tree->mc_fc_maintain_variant TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_print_back = 'X'.
APPEND ao_tree->mc_fc_print_back TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_print_back_all = 'X'.
APPEND ao_tree->mc_fc_print_back_all TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_print_prev = 'X'.
APPEND ao_tree->mc_fc_print_prev TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_print_prev_all = 'X'.
APPEND ao_tree->mc_fc_print_prev_all TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_save_variant = 'X'.
APPEND ao_tree->mc_fc_save_variant TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_settop = 'X'.
APPEND ao_tree->mc_fc_settop TO at_toolbar_excl.
ENDIF.
IF p_mc_fc_find_more = 'X'.
APPEND ao_tree->mc_fc_find_more TO at_toolbar_excl.
ENDIF.
ENDMETHOD. "hide_functions
* CALL METHOD zcl_alv_tree=>first_display.
METHOD HIDE_FUNCTIONS_CLASS.
IF p_ap_button_crr = 'X'.
APPEND ap_button_crr TO at_toolbar_excl.
ENDIF.
IF p_ap_button_crl = 'X'.
APPEND ap_button_crl TO at_toolbar_excl.
ENDIF.
IF p_ap_button_ctl = 'X'.
APPEND ap_button_ctl TO at_toolbar_excl.
ENDIF.
IF p_ap_button_ctr = 'X'.
APPEND ap_button_ctr TO at_toolbar_excl.
ENDIF.
IF p_ap_button_sel = 'X'.
APPEND ap_button_sel TO at_toolbar_excl.
ENDIF.
IF p_ap_button_des = 'X'.
APPEND ap_button_des TO at_toolbar_excl.
ENDIF.
IF p_ap_button_gr1 = 'X'.
APPEND ap_button_gr1 TO at_toolbar_excl.
ENDIF.
IF p_ap_button_gr2 = 'X'.
APPEND ap_button_gr2 TO at_toolbar_excl.
ENDIF.
IF p_ap_button_xxl = 'X'.
APPEND ap_button_xxl TO at_toolbar_excl.
ENDIF.
IF p_ap_button_isu = 'X'.
APPEND ap_button_isu TO at_toolbar_excl.
ENDIF.
IF p_ap_button_isd = 'X'.
APPEND ap_button_isd TO at_toolbar_excl.
ENDIF.
IF p_ap_button_fil = 'X'.
APPEND ap_button_fil TO at_toolbar_excl.
ENDIF.
IF p_ap_button_und = 'X'.
APPEND ap_button_und TO at_toolbar_excl.
ENDIF.
IF p_ap_button_adl = 'X'.
APPEND ap_button_adl TO at_toolbar_excl.
ENDIF.
IF p_ap_button_sul = 'X'.
APPEND ap_button_sul TO at_toolbar_excl.
ENDIF.
IF p_ap_button_sch = 'X'.
APPEND ap_button_sch TO at_toolbar_excl.
ENDIF.
IF p_ap_button_dch = 'X'.
APPEND ap_button_dch TO at_toolbar_excl.
ENDIF.
IF p_ap_button_sep = 'X'. "separador
APPEND ap_button_sep TO at_toolbar_excl.
ENDIF.
ENDMETHOD. "hide_functions
* CALL METHOD zcl_alv_tree=>first_display.
METHOD DISPLAY_ALV.
DATA: at_node TYPE REF TO data.
FIELD-SYMBOLS: <ta> TYPE table.
FIELD-SYMBOLS: <fs_at_fieldcatalog> TYPE lvc_s_fcat.
DATA: indice TYPE i.
IF ap_i_struct_name <> space.
CREATE DATA at_node TYPE TABLE OF (ap_i_struct_name).
ASSIGN at_node->* TO <ta>.
CALL METHOD ao_tree->set_table_for_first_display
EXPORTING
i_structure_name = ap_i_struct_name
is_variant = aw_is_variant
i_save = ap_i_save
i_default = ap_i_default
is_hierarchy_header = aw_is_hierarchy_header
is_exception_field = aw_is_exception_field
it_special_groups = at_it_special_groups
it_list_commentary = at_it_list_commentary
i_logo = ap_i_logo
i_background_id = ap_i_background_id
it_toolbar_excluding = at_toolbar_excl
it_except_qinfo = at_it_except_qinfo
CHANGING
it_outtab = <ta>
it_filter = at_it_filter
it_fieldcatalog = at_fieldcatalog.
ENDIF.
** new - 31-10-11
ao_tree_b = ao_tree.
**
** new - variante
LOOP AT at_fieldcatalog ASSIGNING <fs_at_fieldcatalog>.
indice = sy-tabix.
<fs_at_fieldcatalog>-col_pos = indice.
* MODIFY at_fieldcatalog FROM <fs_at_fieldcatalog>.
ENDLOOP.
*** new
ENDMETHOD.
METHOD SEND_DATA.
DATA: conta(2) TYPE n.
DATA: etiq_valida TYPE string.
FIELD-SYMBOLS: <fs_etiq_valida> TYPE dynfnam.
DATA: etiq_valida2 TYPE string.
FIELD-SYMBOLS: <fs_etiq_valida2> TYPE dynfnam.
DATA: etiq_valida3 TYPE string.
FIELD-SYMBOLS: <fs_etiq_valida3> TYPE dynfnam.
DATA: etiq_valida4 TYPE string.
FIELD-SYMBOLS: <fs_etiq_valida4> TYPE dynfnam.
DATA: etiq_valida5 TYPE string.
FIELD-SYMBOLS: <fs_etiq_valida5> TYPE dynfnam.
DATA: etiq_valida6 TYPE string.
FIELD-SYMBOLS: <fs_etiq_valida6> TYPE dynfnam.
DATA: flag_p TYPE c.
DATA: etiq TYPE string.
DATA: conta_nivel(2) TYPE n.
DATA: conta_busq TYPE n LENGTH 2.
DATA: key_relative2 TYPE lvc_nkey.
***************************************************************************************
ao_nodetab = p_nodetab.
ap_field_out_excel = p_field_out_excel.
ap_name_file_excel = p_name_file_excel.
IF p_agroup_field IS NOT INITIAL.
ap_group = 'X'.
ELSE.
ap_group = space.
ENDIF.
** new ****************
ap_field_graphics = p_field_graphics.
ap_nivel_graphics = p_nivel_graphics.
ap_collect_graphics = p_collect_graphics.
****************************************************************************************
FIELD-SYMBOLS: <ti> TYPE table.
ASSIGN ao_nodetab->* TO <ti>.
*****************************************
DATA: node_result TYPE REF TO data.
FIELD-SYMBOLS: <wi> TYPE ANY.
CREATE DATA node_result TYPE (ap_i_struct_name).
ASSIGN node_result->* TO <wi>.
******************************************************************************************
** new -> 29-11-11
DATA: indice TYPE i.
READ TABLE <ti> INTO <wi> WITH KEY (ap_label_type) = '00'.
indice = sy-tabix.
IF sy-subrc <= 2.
CALL METHOD zcl_alv_tree_mainp=>add_node_tree
EXPORTING
p_node_result = <wi>
p_relat_key = space
p_idx = 0
CHANGING
p_new_key = key_relative2.
DELETE <ti> INDEX indice.
ELSE.
CALL METHOD zcl_alv_tree_mainp=>add_node_tree
EXPORTING
p_node_result = space
p_relat_key = space
p_idx = 0
CHANGING
p_new_key = key_relative2.
ENDIF.
** adiciono el nodo raiz.
************************************************************************
conta_nivel = '00'.
DO lim_nivel TIMES.
conta_busq = conta_busq + 1.
READ TABLE <ti> INTO <wi> WITH KEY (ap_label_type) = conta_busq.
IF sy-subrc <= 2.
conta_nivel = conta_nivel + 1.
ENDIF.
ENDDO.
IF conta_nivel > 0.
etiq = ap_field_run_nivel.
****************************************** asignaciones x agrupacion
CALL METHOD zcl_alv_tree_mainp=>assign_by_group
EXPORTING
p_agroup_field = p_agroup_field.
************************************* asignaciones x screen
CALL METHOD zcl_alv_tree_mainp=>assign_by_screen
EXPORTING
p_screen_field = p_screen_field.
**************************************
ap_nivel_excel = p_nivel_excel.
************************************** asignaciones
conta = '00'.
DO lim_nivel TIMES.
conta = conta + 1.
CONCATENATE ap_label_agroup_field conta INTO etiq_valida.
ASSIGN (etiq_valida) TO <fs_etiq_valida>. "P_AGRUP_CAMPO01
CONCATENATE ap_label_contain conta INTO etiq_valida2. "CONTENIDO01"
CONCATENATE ap_label_group conta INTO etiq_valida3.
ASSIGN (etiq_valida3) TO <fs_etiq_valida3>. "ETIQUETA_GRUPO01
CONCATENATE ap_label_screen conta INTO etiq_valida4.
ASSIGN (etiq_valida4) TO <fs_etiq_valida4>. "ETIQUETA_SCREEN01
CONCATENATE ap_label_screen_field conta INTO etiq_valida5.
ASSIGN (etiq_valida5) TO <fs_etiq_valida5>. "P_SCREEN_CAMPO01
IF <fs_etiq_valida> <> space.
ap_last_field = <fs_etiq_valida>.
ap_last_field_cont = etiq_valida2.
<fs_etiq_valida3> = <fs_etiq_valida>.
<fs_etiq_valida4> = <fs_etiq_valida5>.
ENDIF.
CONCATENATE ap_label_field_group conta INTO etiq_valida6.
ASSIGN (etiq_valida6) TO <fs_etiq_valida6>. "CAMPO_GRUPO01
CONCATENATE ap_structure <fs_etiq_valida3> INTO <fs_etiq_valida6>.
ENDDO.
ap_label_screen_page_b = p_screen_page_begin.
ap_label_screen_page_e = p_screen_page_end.
CALL METHOD zcl_alv_tree_mainp=>(etiq).
CALL METHOD zcl_alv_tree_mainp=>groupby.
CALL METHOD ao_tree->expand_node
EXPORTING
i_node_key = key_relative2
EXCEPTIONS
failed = 1
illegal_level_count = 2
cntl_system_error = 3
node_not_found = 4
cannot_expand_leaf = 5
OTHERS = 6.
flag_p = '0'.
CALL METHOD zcl_alv_tree_mainp=>pagination
EXPORTING
flag_s = flag_p.
ENDIF.
CALL METHOD zcl_alv_tree_mainp=>change_toolbar.
CALL METHOD zcl_alv_tree_mainp=>define_events
EXPORTING
p_right_click = p_ev_right_click
p_left_click_design = p_ev_left_click_design
p_move_control = p_ev_move_control
p_size_control = p_ev_size_control
p_left_click_run = p_ev_left_click_run
p_default_context_menu_request = p_ev_def_context_menu_request
p_header_context_menu_request = p_ev_hea_context_menu_request
p_header_context_menu_select = p_ev_hea_context_menu_select
p_before_user_command = p_ev_before_user_command
p_after_user_command = p_ev_after_user_command
p_top_of_page = p_ev_top_of_page
p_default_context_menu_select = p_ev_def_context_menu_select
p_top_of_list = p_ev_top_of_list
p_button_click = p_ev_button_click
p_checkbox_change = p_ev_checkbox_change
p_expand_nc = p_ev_expand_nc
p_header_click = p_ev_header_click
p_header_context_menu = p_ev_header_context_menu
p_item_context_menu_request = p_ev_item_cont_menu_request
p_item_context_menu_selected = p_ev_item_cont_menu_selected
p_item_double_click = p_ev_item_double_click
p_item_keypress = p_ev_item_keypress
p_link_click = p_ev_link_click
p_node_context_menu_request = p_ev_node_cont_menu_request
p_node_context_menu_selected = p_ev_node_cont_menu_selected
p_node_double_click = p_ev_node_double_click
p_on_drag = p_ev_on_drag
p_on_drag_multiple = p_ev_on_drag_multiple
p_on_drop = p_ev_on_drop
p_on_drop_complete = p_ev_on_drop_complete
p_on_drop_complete_multiple = p_ev_on_drop_complete_multiple
p_on_drop_get_flavor = p_ev_on_drop_get_flavor
p_selection_changed = p_ev_selection_changed
p_node_keypress = p_ev_node_keypress.
IF p_update_calculations = 'X'.
CALL METHOD ao_tree->update_calculations.
ENDIF.
** Envio la DATA al frontend.
CALL METHOD ao_tree->frontend_update.
CALL METHOD cl_gui_cfw=>flush
EXCEPTIONS
cntl_system_error = 1
cntl_error = 2.
IF sy-subrc <> 0.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
titel = text-801
txt1 = text-802
txt2 = text-803
txt3 = text-804.
ENDIF.
MESSAGE ID 'ZHRMSG' TYPE 'S' NUMBER 959 WITH ap_nivel_graphics.
ENDMETHOD.
METHOD ADD_NODE_TREE.
FIELD-SYMBOLS: <fs_all_layout> TYPE zwitem_layout.
CLEAR aw_layout_node.
CLEAR aw_item_layout.
CLEAR at_item_layout.
REFRESH at_item_layout[].
CLEAR ap_node_text.
READ TABLE at_all_layout ASSIGNING <fs_all_layout>
WITH KEY type = 'T' key_node = p_idx.
IF sy-subrc <= 2.
ap_node_text = <fs_all_layout>-node_text.
ENDIF.
READ TABLE at_all_layout ASSIGNING <fs_all_layout>
WITH KEY type = 'N' key_node = p_idx.
IF sy-subrc <= 2.
MOVE-CORRESPONDING <fs_all_layout> TO aw_layout_node.
ENDIF.
LOOP AT at_all_layout ASSIGNING <fs_all_layout>
WHERE type = 'I' AND key_node = p_idx.
CLEAR aw_item_layout.
MOVE-CORRESPONDING <fs_all_layout> TO aw_item_layout.
APPEND aw_item_layout TO at_item_layout.
ENDLOOP.
CALL METHOD ao_tree->add_node
EXPORTING
i_relat_node_key = p_relat_key
i_relationship = cl_gui_column_tree=>relat_last_child
i_node_text = ap_node_text
is_outtab_line = p_node_result
is_node_layout = aw_layout_node
it_item_layout = at_item_layout
IMPORTING
e_new_node_key = p_new_key
EXCEPTIONS
relat_node_not_found = 1
node_not_found = 2
OTHERS = 3.
IF sy-subrc <> 0.
CASE sy-subrc.
WHEN '1'.
MESSAGE ID 'ZHRMSG' TYPE 'I' NUMBER 499.
WHEN '2'.
MESSAGE ID 'ZHRMSG' TYPE 'I' NUMBER 503.
WHEN OTHERS.
MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDCASE.
ENDIF.
ENDMETHOD.
METHOD PAGINATION.
DATA: conta_reg TYPE i,
conta_max TYPE i,
conta_min TYPE i,
page_cociente TYPE i,
is_visible TYPE c.
DATA: conta_s TYPE num.
DATA idt TYPE sytabix.
DATA ramificacion TYPE lvc_t_nkey.
FIELD-SYMBOLS: <fs_field_key> TYPE ANY.
FIELD-SYMBOLS: <fs_field_type> TYPE ANY.
FIELD-SYMBOLS: <fs_field_tscreen> TYPE ANY.
FIELD-SYMBOLS: <fs_field_page> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group01> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group02> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group03> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group04> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group05> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group06> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group07> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group08> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group09> TYPE ANY.
FIELD-SYMBOLS: <fs_nombre_campo> TYPE ANY.
FIELD-SYMBOLS: <fs_valor_campo> TYPE ANY.
DATA: etiq_campo TYPE string.
DATA: etiq_campo2 TYPE string.
FIELD-SYMBOLS: <fs> TYPE ANY.
***********************************
FIELD-SYMBOLS: <ti> TYPE table.
ASSIGN ao_nodetab->* TO <ti>.
***********************************
*****************************************
DATA: wnode_tab TYPE REF TO data.
FIELD-SYMBOLS: <wi> TYPE ANY.
CREATE DATA wnode_tab TYPE (ap_i_struct_name).
ASSIGN wnode_tab->* TO <wi>.
*************************************************
*****************************************
DATA: w_outtab TYPE REF TO data.
FIELD-SYMBOLS: <wi2> TYPE ANY.
CREATE DATA w_outtab TYPE (ap_i_struct_name).
ASSIGN w_outtab->* TO <wi2>.
*************************************************
conta_reg = 0.
ap_items_x_page = 0.
ap_page_end = 0.
page_cociente = 0.
*** abrir nodos
ap_pulsac_open = '00'.
IF flag_s <> '0' AND ap_group = space.
EXIT.
ELSE.
CLEAR <wi>.
SORT <ti> BY (ap_label_page) (ap_label_key).
LOOP AT <ti> INTO <wi>.
idt = sy-tabix.
ASSIGN (ap_field_key) TO <fs_field_key>.
ASSIGN (ap_field_type) TO <fs_field_type>.
ASSIGN (ap_field_tscreen) TO <fs_field_tscreen>.
IF <fs_field_type> = '01'.
<fs_field_tscreen> = space.
MODIFY <ti> INDEX idt FROM <wi>
TRANSPORTING (ap_label_tscreen).
ENDIF.
ENDLOOP.
CLEAR <wi>.
IF ap_group = 'X'.
ASSIGN (ap_field_page) TO <fs_field_page>.
READ TABLE <ti> INDEX idt INTO <wi>.
ap_page_end = <fs_field_page>.
ELSE.
ap_page_end = 1.
ENDIF.
** el usuario da click en el boton avanzar derecha
CASE flag_s.
WHEN '0'.
ap_page_present = 1.
WHEN '1'.
IF ap_page_present < ap_page_end.
ap_page_present = ap_page_present + 1.
ENDIF.
WHEN '2'.
IF ap_page_present > 1.
ap_page_present = ap_page_present - 1.
ENDIF.
WHEN '3'.
ap_page_present = 1.
WHEN '4'.
ap_page_present = ap_page_end.
WHEN OTHERS.
ENDCASE.
*
*** asignamos las solicitudes que van a salir por pantalla
*** ( tlock )
*
ap_page_min = ap_page_present.
ap_page_max = ap_page_end.
*
CLEAR <wi>.
LOOP AT <ti> INTO <wi>.
idt = sy-tabix.
ASSIGN (ap_field_type) TO <fs_field_type>.
ASSIGN (ap_field_tscreen) TO <fs_field_tscreen>.
ASSIGN (ap_field_page) TO <fs_field_page>.
ASSIGN (ap_field_group01) TO <fs_field_group01>.
ASSIGN (ap_field_group02) TO <fs_field_group02>.
ASSIGN (ap_field_group03) TO <fs_field_group03>.
ASSIGN (ap_field_group04) TO <fs_field_group04>.
ASSIGN (ap_field_group05) TO <fs_field_group05>.
ASSIGN (ap_field_group06) TO <fs_field_group06>.
ASSIGN (ap_field_group07) TO <fs_field_group07>.
ASSIGN (ap_field_group08) TO <fs_field_group08>.
ASSIGN (ap_field_group09) TO <fs_field_group09>.
IF <fs_field_type> = '01' AND <fs_field_page> = ap_page_present.
<fs_field_tscreen> = 'X'.
MODIFY <ti> INDEX idt FROM <wi> TRANSPORTING (ap_label_tscreen).
IF ap_group = 'X' AND conta_reg = 0.
conta_reg = 1.
conta_s = 0.
DO lim_nivel TIMES.
conta_s = conta_s + 1.
CONCATENATE ap_label_screen conta_s INTO etiq_campo.
ASSIGN (etiq_campo) TO <fs_nombre_campo>.
CONCATENATE ap_field_fieldgroup conta_s '>' INTO etiq_campo2.
ASSIGN (etiq_campo2) TO <fs>.
CALL METHOD zcl_alv_tree_mainp=>update_field_dynpro
EXPORTING
p_nombre_programa = ap_program
p_nombre_dynpro = sy-dynnr
p_nombre_campo = <fs_nombre_campo>
p_valor = <fs>.
ENDDO.
ENDIF.
ENDIF.
ENDLOOP.
*
IF <wi> IS NOT INITIAL.
*** modifico el layout.
CLEAR <wi>.
CLEAR <wi2>.
CLEAR aw_node_layout.
is_visible = space.
REFRESH at_nodes_marked_header.
LOOP AT <ti> INTO <wi2>.
idt = sy-tabix.
ASSIGN (ap_field_key2) TO <fs_field_key>.
ASSIGN (ap_field_type2) TO <fs_field_type>.
ASSIGN (ap_field_tscreen2) TO <fs_field_tscreen>.
IF <fs_field_type> = '01'.
ap_node_id_key = <fs_field_key>.
CALL METHOD ao_tree->get_outtab_line
EXPORTING
i_node_key = ap_node_id_key
IMPORTING
e_outtab_line = <wi>
es_node_layout = aw_layout_node
EXCEPTIONS
node_not_found = 1
OTHERS = 2.
MOVE-CORRESPONDING aw_layout_node TO aw_node_layout.
REFRESH ramificacion.
CALL METHOD ao_tree->get_children
EXPORTING
i_node_key = ap_node_id_key
IMPORTING
et_children = ramificacion
EXCEPTIONS
historic_error = 1
node_key_not_found = 2
OTHERS = 3.
IF ( <fs_field_tscreen> <> 'X' ).
aw_node_layout-hidden = 'X'.
aw_node_layout-u_hidden = 'X'.
ELSE.
aw_node_layout-hidden = ''.
aw_node_layout-u_hidden = 'X'.
is_visible = 'X'.
IF ramificacion IS NOT INITIAL.
APPEND ap_node_id_key TO at_nodes_marked_header.
ENDIF.
ENDIF.
CALL METHOD ao_tree->change_node
EXPORTING
i_node_key = ap_node_id_key
i_outtab_line = <wi>
is_node_layout = aw_node_layout
EXCEPTIONS
node_not_found = 1
OTHERS = 2.
ENDIF.
ENDLOOP.
ENDIF.
ENDIF.
*
** actualizo el front-end
CALL METHOD ao_tree->frontend_update.
IF ap_label_screen_page_b IS NOT INITIAL.
CALL METHOD zcl_alv_tree_mainp=>update_field_dynpro
EXPORTING
p_nombre_programa = ap_program
p_nombre_dynpro = sy-dynnr
p_nombre_campo = ap_label_screen_page_b
p_valor = ap_page_min.
ENDIF.
IF ap_label_screen_page_e IS NOT INITIAL.
CALL METHOD zcl_alv_tree_mainp=>update_field_dynpro
EXPORTING
p_nombre_programa = ap_program
p_nombre_dynpro = sy-dynnr
p_nombre_campo = ap_label_screen_page_e
p_valor = ap_page_max.
ENDIF.
CALL METHOD cl_gui_cfw=>flush
EXCEPTIONS
cntl_system_error = 1
cntl_error = 2
OTHERS = 3.
ENDMETHOD.
METHOD CHANGE_TOOLBAR.
FIELD-SYMBOLS : <fs_toolbar> TYPE ui_func.
** creamos el toolbar
CALL METHOD ao_tree->get_toolbar_object
IMPORTING
er_toolbar = ao_toolbar.
CHECK NOT ao_toolbar IS INITIAL.
** modifico toolbar
** adiciono el separador
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = ''
icon = ''
butn_type = cntb_btype_sep
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
READ TABLE at_toolbar_excl ASSIGNING <fs_toolbar> WITH KEY table_line = '&SEL'.
IF sy-subrc > 2.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = '&SEL'
* icon = ICON_EXPAND
icon = icon_next_node
butn_type = cntb_btype_button
text = 'Abrir'
quickinfo = 'Abrir Nodos del Nivel'
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
ENDIF.
READ TABLE at_toolbar_excl ASSIGNING <fs_toolbar> WITH KEY table_line = '&DES'.
IF sy-subrc > 2.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = '&DES'
* icon = ICON_COLLAPSE
icon = icon_previous_node
butn_type = cntb_btype_button
text = 'Cerrar'
quickinfo = 'Cerrar Todos los Nodos'
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
ENDIF.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = ''
icon = ''
butn_type = cntb_btype_sep
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
READ TABLE at_toolbar_excl ASSIGNING <fs_toolbar> WITH KEY table_line = '&SCH'.
IF sy-subrc > 2.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = '&SCH'
* icon = ICON_EXPAND
icon = icon_select_all
butn_type = cntb_btype_button
text = ''
quickinfo = 'Marcar Todo'
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
ENDIF.
READ TABLE at_toolbar_excl ASSIGNING <fs_toolbar> WITH KEY table_line = '&DCH'.
IF sy-subrc > 2.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = '&DCH'
* icon = ICON_COLLAPSE
icon = icon_deselect_all
butn_type = cntb_btype_button
text = ''
quickinfo = 'Desmarcar Todo'
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
ENDIF.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = ''
icon = ''
butn_type = cntb_btype_sep
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
READ TABLE at_toolbar_excl ASSIGNING <fs_toolbar> WITH KEY table_line = '&CTL'.
IF sy-subrc > 2.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = '&CTL'
icon = icon_total_left
butn_type = cntb_btype_button
text = ''
quickinfo = 'Ir pagina inicial'
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
ENDIF.
READ TABLE at_toolbar_excl ASSIGNING <fs_toolbar> WITH KEY table_line = '&CRL'.
IF sy-subrc > 2.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = '&CRL'
icon = icon_column_left
butn_type = cntb_btype_button
text = ''
quickinfo = 'Avanza izquierda'
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
ENDIF.
READ TABLE at_toolbar_excl ASSIGNING <fs_toolbar> WITH KEY table_line = '&CRR'.
IF sy-subrc > 2.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = '&CRR'
icon = icon_column_right
butn_type = cntb_btype_button
text = ''
quickinfo = 'Avanza derecha'
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
ENDIF.
READ TABLE at_toolbar_excl ASSIGNING <fs_toolbar> WITH KEY table_line = '&CTR'.
IF sy-subrc > 2.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = '&CTR'
icon = icon_total_right
butn_type = cntb_btype_button
text = ''
quickinfo = 'Ir pagina final'
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
ENDIF.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = ''
icon = ''
butn_type = cntb_btype_sep
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
READ TABLE at_toolbar_excl ASSIGNING <fs_toolbar> WITH KEY table_line = '&GR1'.
IF sy-subrc > 2.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = '&GR1'
* icon = ICON_EXPAND
icon = icon_graphics
butn_type = cntb_btype_button
text = 'Estadísticas'
quickinfo = 'Estadisticas'
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
ENDIF.
* READ TABLE at_toolbar_excl ASSIGNING <fs_toolbar> WITH KEY table_line = '&GR2'.
* IF sy-subrc > 2.
*
* CALL METHOD ao_toolbar->add_button
* EXPORTING
* fcode = '&GR2'
** icon = ICON_EXPAND
* icon = icon_graphics
* butn_type = cntb_btype_button
* text = 'Estadística 2'
* quickinfo = 'Estadistica 2'
* EXCEPTIONS
* cntl_error = 1
* cntb_btype_error = 2
* cntb_error_fcode = 3
* OTHERS = 4.
* ENDIF.
READ TABLE at_toolbar_excl ASSIGNING <fs_toolbar> WITH KEY table_line = '&ADL'.
IF sy-subrc > 2.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = '&ADL'
icon = icon_procurement_alternative
butn_type = cntb_btype_button
text = ''
quickinfo = 'Adicionar Nivel'
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
ENDIF.
READ TABLE at_toolbar_excl ASSIGNING <fs_toolbar> WITH KEY table_line = '&SUL'.
IF sy-subrc > 2.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = '&SUL'
icon = icon_consumption_alternative
butn_type = cntb_btype_button
text = ''
quickinfo = 'Restar Nivel'
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
ENDIF.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = ''
icon = ''
butn_type = cntb_btype_sep
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
READ TABLE at_toolbar_excl ASSIGNING <fs_toolbar> WITH KEY table_line = '&ISU'.
IF sy-subrc > 2.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = '&ISU'
* icon = ICON_EXPAND
icon = icon_sort_up
butn_type = cntb_btype_button
text = ''
quickinfo = 'Ordena Ascendentemente'
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
ENDIF.
READ TABLE at_toolbar_excl ASSIGNING <fs_toolbar> WITH KEY table_line = '&ISD'.
IF sy-subrc > 2.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = '&ISD'
* icon = ICON_EXPAND
icon = icon_sort_down
butn_type = cntb_btype_button
text = ''
quickinfo = 'Ordena Descendentemente'
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
ENDIF.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = ''
icon = ''
butn_type = cntb_btype_sep
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
READ TABLE at_toolbar_excl ASSIGNING <fs_toolbar> WITH KEY table_line = '&FIL'.
IF sy-subrc > 2.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = '&FIL'
* icon = ICON_EXPAND
icon = icon_filter
butn_type = cntb_btype_button
text = ''
quickinfo = 'Filtrar'
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
ENDIF.
READ TABLE at_toolbar_excl ASSIGNING <fs_toolbar> WITH KEY table_line = '&UND'.
IF sy-subrc > 2.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = '&UND'
icon = icon_filter_undo
butn_type = cntb_btype_button
text = ''
quickinfo = 'Deshacer Filtro'
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
ENDIF.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = ''
icon = ''
butn_type = cntb_btype_sep
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
READ TABLE at_toolbar_excl ASSIGNING <fs_toolbar> WITH KEY table_line = '&XXL'.
IF sy-subrc > 2.
CALL METHOD ao_toolbar->add_button
EXPORTING
fcode = '&XXL'
* icon = ICON_EXPAND
icon = icon_xxl
butn_type = cntb_btype_button
text = ''
quickinfo = 'Exporta a Excel'
EXCEPTIONS
cntl_error = 1
cntb_btype_error = 2
cntb_error_fcode = 3
OTHERS = 4.
ENDIF.
ENDMETHOD.
METHOD DEFINE_EVENTS.
DATA: events TYPE cntl_simple_events,
event TYPE cntl_simple_event,
l_event_receiver TYPE REF TO lcl_toolbar_event_receiver.
CLEAR events.
CALL METHOD ao_tree->get_registered_events
IMPORTING
events = events
EXCEPTIONS
cntl_error = 1
OTHERS = 2.
IF p_default_context_menu_request = 'X'.
event-eventid = cl_gui_column_tree=>eventid_def_context_menu_req.
event-appl_event = 'X'.
APPEND event TO events.
ENDIF.
IF p_expand_nc = 'X'.
event-eventid = cl_gui_column_tree=>eventid_expand_no_children.
event-appl_event = 'X'.
APPEND event TO events.
ENDIF.
IF p_node_context_menu_request = 'X'.
event-eventid = cl_gui_column_tree=>eventid_node_context_menu_req.
event-appl_event = 'X'.
APPEND event TO events.
ENDIF.
IF p_node_double_click = 'X'.
event-eventid = cl_gui_column_tree=>eventid_node_double_click.
event-appl_event = 'X'.
APPEND event TO events.
ENDIF.
IF p_selection_changed = 'X'.
event-eventid = cl_gui_column_tree=>eventid_selection_changed.
event-appl_event = 'X'.
APPEND event TO events.
ENDIF.
IF p_node_keypress = 'X'.
event-eventid = cl_gui_column_tree=>eventid_node_keypress.
event-appl_event = 'X'.
APPEND event TO events.
ENDIF.
IF p_checkbox_change = 'X'.
event-eventid = cl_gui_column_tree=>eventid_checkbox_change.
event-appl_event = 'X'.
APPEND event TO events.
ENDIF.
IF p_link_click = 'X'.
event-eventid = cl_gui_column_tree=>eventid_link_click.
event-appl_event = 'X'.
APPEND event TO events.
ENDIF.
** NUEVO - 26.10.11
IF p_header_click = 'X'.
event-eventid = cl_gui_column_tree=>eventid_header_click.
event-appl_event = 'X'.
APPEND event TO events.
ENDIF.
IF p_item_keypress = 'X'.
event-eventid = cl_gui_column_tree=>eventid_item_keypress.
event-appl_event = 'X'.
APPEND event TO events.
ENDIF.
IF p_item_double_click = 'X'.
event-eventid = cl_gui_column_tree=>eventid_item_double_click.
event-appl_event = 'X'.
APPEND event TO events.
ENDIF.
IF p_button_click = 'X'.
event-eventid = cl_gui_column_tree=>eventid_button_click.
event-appl_event = 'X'.
APPEND event TO events.
ENDIF.
IF p_item_context_menu_request = 'X'.
event-eventid = cl_gui_column_tree=>eventid_item_context_menu_req.
event-appl_event = 'X'.
APPEND event TO events.
ENDIF.
************************************************************************
CALL METHOD ao_tree->set_registered_events
EXPORTING
events = events
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
illegal_event_combination = 3.
IF sy-subrc <> 0.
MESSAGE ID 'ZHRMSG' TYPE 'E' NUMBER 081.
ENDIF.
IF p_right_click = 'X'.
SET HANDLER ao_tree->ev_right_click FOR ao_tree.
ENDIF.
IF p_left_click_design = 'X'.
SET HANDLER ao_tree->ev_left_click_design FOR ao_tree.
ENDIF.
IF p_move_control = 'X'.
SET HANDLER ao_tree->ev_move_control FOR ao_tree.
ENDIF.
IF p_size_control = 'X'.
SET HANDLER ao_tree->ev_size_control FOR ao_tree.
ENDIF.
IF p_left_click_run = 'X'.
SET HANDLER ao_tree->ev_left_click_run FOR ao_tree.
ENDIF.
IF p_default_context_menu_request = 'X'.
SET HANDLER ao_tree->ev_def_context_menu_request FOR ao_tree.
ENDIF.
IF p_header_context_menu_request = 'X'.
SET HANDLER ao_tree->ev_hea_context_menu_request FOR ao_tree.
ENDIF.
IF p_header_context_menu_select = 'X'.
SET HANDLER ao_tree->ev_hea_context_menu_select FOR ao_tree.
ENDIF.
IF p_before_user_command = 'X'.
SET HANDLER ao_tree->ev_before_user_command FOR ao_tree.
ENDIF.
IF p_after_user_command = 'X'.
SET HANDLER ao_tree->ev_after_user_command FOR ao_tree.
ENDIF.
IF p_top_of_page = 'X'.
SET HANDLER ao_tree->ev_top_of_page FOR ao_tree.
ENDIF.
IF p_default_context_menu_select = 'X'.
SET HANDLER ao_tree->ev_def_context_menu_select FOR ao_tree.
ENDIF.
IF p_top_of_list = 'X'.
SET HANDLER ao_tree->ev_top_of_list FOR ao_tree.
ENDIF.
IF p_button_click = 'X'.
SET HANDLER ao_tree->ev_button_click FOR ao_tree.
ENDIF.
IF p_checkbox_change = 'X'.
SET HANDLER ao_tree->ev_checkbox_change FOR ao_tree.
ENDIF.
IF p_expand_nc = 'X'.
SET HANDLER ao_tree->ev_expand_nc FOR ao_tree.
ENDIF.
IF p_header_click = 'X'.
SET HANDLER ao_tree->ev_header_click FOR ao_tree.
ENDIF.
IF p_header_context_menu = 'X'.
SET HANDLER ao_tree->ev_hea_context_menu FOR ao_tree.
ENDIF.
IF p_item_context_menu_request = 'X'.
SET HANDLER ao_tree->ev_item_context_menu_request FOR ao_tree.
ENDIF.
IF p_item_context_menu_selected = 'X'.
SET HANDLER ao_tree->ev_item_context_menu_selected FOR ao_tree.
ENDIF.
IF p_item_double_click = 'X'.
SET HANDLER ao_tree->ev_item_double_click FOR ao_tree.
ENDIF.
IF p_item_keypress = 'X'.
SET HANDLER ao_tree->ev_item_keypress FOR ao_tree.
ENDIF.
IF p_link_click = 'X'.
SET HANDLER ao_tree->ev_link_click FOR ao_tree.
ENDIF.
IF p_node_context_menu_request = 'X'.
SET HANDLER ao_tree->ev_node_context_menu_request FOR ao_tree.
ENDIF.
IF p_node_context_menu_selected = 'X'.
SET HANDLER ao_tree->ev_node_context_menu_selected FOR ao_tree.
ENDIF.
IF p_node_double_click = 'X'.
SET HANDLER ao_tree->ev_node_double_click FOR ao_tree.
ENDIF.
IF p_on_drag = 'X'.
SET HANDLER ao_tree->ev_on_drag FOR ao_tree.
ENDIF.
IF p_on_drag_multiple = 'X'.
SET HANDLER ao_tree->ev_on_drag_multiple FOR ao_tree.
ENDIF.
IF p_on_drop = 'X'.
SET HANDLER ao_tree->ev_on_drop FOR ao_tree.
ENDIF.
IF p_on_drop_complete = 'X'.
SET HANDLER ao_tree->ev_on_drop_complete FOR ao_tree.
ENDIF.
IF p_on_drop_complete_multiple = 'X'.
SET HANDLER ao_tree->ev_on_drop_complete_multiple FOR ao_tree.
ENDIF.
IF p_on_drop_get_flavor = 'X'.
SET HANDLER ao_tree->ev_on_drop_get_flavor FOR ao_tree.
ENDIF.
IF p_selection_changed = 'X'.
SET HANDLER ao_tree->ev_selection_changed FOR ao_tree.
ENDIF.
IF p_node_keypress = 'X'.
SET HANDLER ao_tree->ev_node_keypress FOR ao_tree.
ENDIF.
*
** establezco comunicacion con el manejador de eventos de ao_toolbar
CREATE OBJECT l_event_receiver.
SET HANDLER l_event_receiver->on_function_selected FOR ao_toolbar.
ENDMETHOD.
METHOD ASSIGN_ALV.
aw_is_variant = p_alv_is_variant.
ap_i_save = p_alv_i_save.
ap_i_default = p_alv_i_default.
aw_is_exception_field = p_alv_is_exception_field.
at_it_special_groups = p_alv_it_special_groups.
at_it_list_commentary = p_alv_it_list_commentary.
ap_i_logo = p_alv_i_logo.
ap_i_background_id = p_alv_i_background_id.
at_it_except_qinfo = p_alv_it_except_qinfo.
at_it_filter = p_alv_it_filter.
ENDMETHOD.
METHOD RUN_NIVEL.
FIELD-SYMBOLS: <ti> TYPE table.
ASSIGN ao_nodetab->* TO <ti>.
DATA: conta TYPE num.
DATA: etiq_grupo TYPE string.
DATA: etiq_contenido TYPE string.
FIELD-SYMBOLS: <fs_grupo> TYPE ANY.
FIELD-SYMBOLS: <fs_grupo2> TYPE ANY.
FIELD-SYMBOLS: <fs_contenido> TYPE ANY.
***********************************
*****************************************
DATA: node_result TYPE REF TO data.
FIELD-SYMBOLS: <wi> TYPE ANY.
CREATE DATA node_result TYPE (ap_i_struct_name).
ASSIGN node_result->* TO <wi>.
DATA: idx TYPE sytabix.
DATA: conta_key(2) TYPE n.
DATA: etiq_campo_in TYPE dynfnam.
DATA: etiq_campo_out TYPE dynfnam.
FIELD-SYMBOLS: <fs_campo_key_in> TYPE lvc_nkey.
FIELD-SYMBOLS: <fs_campo_key_out> TYPE lvc_nkey.
FIELD-SYMBOLS: <fs_field_key> TYPE ANY.
FIELD-SYMBOLS: <fs_field_type> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group01> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group02> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group03> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group04> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group05> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group06> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group07> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group08> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group09> TYPE ANY.
CLEAR at_group.
REFRESH at_group[].
LOOP AT <ti> INTO <wi>.
idx = sy-tabix.
conta = '00'.
ASSIGN (ap_field_key) TO <fs_field_key>.
ASSIGN (ap_field_type) TO <fs_field_type>.
**
IF <fs_field_type> = '01'.
DO lim_nivel TIMES.
conta = conta + 1.
CONCATENATE ap_label_field_group conta INTO etiq_grupo.
ASSIGN (etiq_grupo) TO <fs_grupo>.
ASSIGN (<fs_grupo>) TO <fs_grupo2>.
IF <fs_grupo2> IS ASSIGNED.
CONCATENATE ap_field_group conta INTO etiq_contenido.
ASSIGN (etiq_contenido) TO <fs_contenido>.
<fs_contenido> = <fs_grupo2>.
ENDIF.
ENDDO.
ENDIF.
** grupo
COLLECT aw_group INTO at_group.
***
conta_key = <fs_field_type>.
CLEAR etiq_campo_in.
CLEAR etiq_campo_out.
CONCATENATE ap_label_field_key conta_key INTO etiq_campo_in.
conta_key = conta_key = conta_key + 1.
CONCATENATE ap_label_field_key conta_key INTO etiq_campo_out.
ASSIGN (etiq_campo_in) TO <fs_campo_key_in>.
ASSIGN (etiq_campo_out) TO <fs_campo_key_out>.
CALL METHOD zcl_alv_tree_mainp=>add_node_tree
EXPORTING
p_node_result = <wi>
p_relat_key = <fs_campo_key_in>
p_idx = idx
CHANGING
p_new_key = <fs_campo_key_out>.
<fs_field_key> = <fs_campo_key_out>.
MODIFY <ti> INDEX idx FROM <wi>
TRANSPORTING (ap_label_key).
ENDLOOP.
ENDMETHOD.
METHOD GROUPBY.
FIELD-SYMBOLS: <fs_field_group01> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group02> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group03> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group04> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group05> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group06> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group07> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group08> TYPE ANY.
FIELD-SYMBOLS: <fs_field_group09> TYPE ANY.
FIELD-SYMBOLS: <fs_field_page> TYPE ANY.
FIELD-SYMBOLS: <fs_grupo> TYPE zwdatatree.
DATA: idx TYPE sytabix.
DATA: conta_g TYPE i.
FIELD-SYMBOLS: <ti> TYPE table.
ASSIGN ao_nodetab->* TO <ti>.
***********************************
*****************************************
DATA: node_result TYPE REF TO data.
FIELD-SYMBOLS: <wi> TYPE ANY.
CREATE DATA node_result TYPE (ap_i_struct_name).
ASSIGN node_result->* TO <wi>.
******************************************
DELETE at_group WHERE contain01 = space AND contain02 = space AND contain03 = space
AND contain04 = space AND contain05 = space AND contain06 = space AND contain07 = space
AND contain08 = space AND contain09 = space.
SORT at_group BY contain01 contain02 contain03 contain04
contain05 contain06 contain07 contain08 contain09.
CONCATENATE ap_structure ap_last_field INTO ap_label_last_field.
* read table at_grupo ASSIGNING <fs_grupo>
conta_g = 0.
IF ap_group = 'X'.
LOOP AT at_group ASSIGNING <fs_grupo>.
AT NEW (ap_last_field_cont).
conta_g = conta_g + 1.
ENDAT.
<fs_grupo>-num_group = conta_g.
ENDLOOP.
ELSE.
conta_g = 0.
LOOP AT at_group ASSIGNING <fs_grupo>.
conta_g = 1.
<fs_grupo>-num_group = conta_g.
ENDLOOP.
ENDIF.
LOOP AT <ti> INTO <wi>.
idx = sy-tabix.
ASSIGN (ap_field_group01) TO <fs_field_group01>.
ASSIGN (ap_field_group02) TO <fs_field_group02>.
ASSIGN (ap_field_group03) TO <fs_field_group03>.
ASSIGN (ap_field_group04) TO <fs_field_group04>.
ASSIGN (ap_field_group05) TO <fs_field_group05>.
ASSIGN (ap_field_group06) TO <fs_field_group06>.
ASSIGN (ap_field_group07) TO <fs_field_group07>.
ASSIGN (ap_field_group08) TO <fs_field_group08>.
ASSIGN (ap_field_group09) TO <fs_field_group09>.
ASSIGN (ap_field_page) TO <fs_field_page>.
IF at_group IS NOT INITIAL.
READ TABLE at_group ASSIGNING <fs_grupo> WITH KEY contain01 = <fs_field_group01>
contain02 = <fs_field_group02>
contain03 = <fs_field_group03> contain04 = <fs_field_group04>
contain05 = <fs_field_group05> contain06 = <fs_field_group06>
contain07 = <fs_field_group07> contain08 = <fs_field_group08>
contain09 = <fs_field_group09>.
IF sy-subrc <= 2.
<fs_field_page> = <fs_grupo>-num_group.
MODIFY <ti> INDEX idx FROM <wi> TRANSPORTING (ap_label_page).
ENDIF.
ELSE.
<fs_field_page> = 1.
MODIFY <ti> INDEX idx FROM <wi> TRANSPORTING (ap_label_page).
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD OPEN_NODES_TREE.
FIELD-SYMBOLS: <wmarked> TYPE lvc_nkey.
FIELD-SYMBOLS: <t_nodetab> TYPE table.
CLEAR ap_nodes_marked01.
CLEAR at_nodes_marked02.
CLEAR at_nodes_marked03.
CLEAR at_marked.
REFRESH at_nodes_marked01[].
REFRESH at_nodes_marked02[].
REFRESH at_nodes_marked03[].
REFRESH at_marked[].
ASSIGN ao_nodetab->* TO <t_nodetab>.
ap_pulsac_open = ap_pulsac_open + 1.
IF ap_pulsac_open = '01'.
CALL METHOD ao_tree->expand_nodes
EXPORTING
it_node_key = at_nodes_marked_header
EXCEPTIONS
failed = 1
cntl_system_error = 2
error_in_node_key_table = 3
dp_error = 4
node_not_found = 5
OTHERS = 6.
ELSE.
CALL METHOD ao_tree->get_expanded_nodes
CHANGING
ct_expanded_nodes = at_nodes_marked01
EXCEPTIONS
cntl_system_error = 1
dp_error = 2
failed = 3
OTHERS = 4.
LOOP AT at_nodes_marked01 INTO ap_nodes_marked01.
CALL METHOD ao_tree->get_children
EXPORTING
i_node_key = ap_nodes_marked01
IMPORTING
et_children = at_nodes_marked02
EXCEPTIONS
historic_error = 1
node_key_not_found = 2
OTHERS = 3.
** verifico si tiene hijos.
LOOP AT at_nodes_marked02 ASSIGNING <wmarked>.
CALL METHOD ao_tree->get_children
EXPORTING
i_node_key = <wmarked>
IMPORTING
et_children = at_marked
EXCEPTIONS
historic_error = 1
node_key_not_found = 2
OTHERS = 3.
IF at_marked IS NOT INITIAL.
APPEND <wmarked> TO at_nodes_marked03.
ENDIF.
ENDLOOP.
ENDLOOP.
CALL METHOD ao_tree->expand_nodes
EXPORTING
it_node_key = at_nodes_marked03
EXCEPTIONS
failed = 1
cntl_system_error = 2
error_in_node_key_table = 3
dp_error = 4
node_not_found = 5
OTHERS = 6.
ENDIF.
ap_nodeheader = 1.
CALL METHOD ao_tree->set_top_node
EXPORTING
i_node_key = ap_nodeheader
EXCEPTIONS
cntl_system_error = 1
node_not_found = 2
failed = 3
OTHERS = 4.
ENDMETHOD.
METHOD CLOSE_NODES_TREE.
ap_pulsac_open = '00'.
CALL METHOD ao_tree->collapse_all_nodes
EXCEPTIONS
failed = 1
cntl_system_error = 2
OTHERS = 3.
ap_nodeheader = 1.
CALL METHOD ao_tree->set_top_node
EXPORTING
i_node_key = ap_nodeheader
EXCEPTIONS
cntl_system_error = 1
node_not_found = 2
failed = 3
OTHERS = 4.
ENDMETHOD.
METHOD FREE_PROGRAM.
CALL METHOD cl_gui_cfw=>flush
EXCEPTIONS
cntl_system_error = 1
cntl_error = 2
OTHERS = 3.
CALL METHOD ao_tree->free
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
CALL METHOD ao_container->free
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
OTHERS = 3.
LEAVE TO SCREEN 0.
ENDMETHOD.
METHOD CHANGE_ICON.
DATA: status_icon TYPE icons-text.
CALL FUNCTION 'ICON_CREATE'
EXPORTING
name = p_item_image
text = p_text
info = p_text
add_stdinf = 'X'
IMPORTING
RESULT = status_icon
EXCEPTIONS
icon_not_found = 1
outputfield_too_short = 2
OTHERS = 3.
p_item_image = status_icon.
ENDMETHOD.
METHOD PRINT_NORMAL_TO_BOLD.
FIELD-SYMBOLS: <ti> TYPE table.
ASSIGN ao_nodetab->* TO <ti>.
***********************************
*****************************************
DATA: node_result TYPE REF TO data.
FIELD-SYMBOLS: <wi> TYPE ANY.
CREATE DATA node_result TYPE (ap_i_struct_name).
ASSIGN node_result->* TO <wi>.
FIELD-SYMBOLS: <wi2> TYPE ANY.
ASSIGN node_result->* TO <wi2>.
**********************************************
FIELD-SYMBOLS: <fs_campo_type> TYPE ANY.
FIELD-SYMBOLS: <fs_campo_clave> TYPE ANY.
FIELD-SYMBOLS: <fs_campo_tscreen> TYPE ANY.
CLEAR aw_layout_node.
CLEAR aw_node_layout.
LOOP AT <ti> INTO <wi2>.
ASSIGN (ap_field_type) TO <fs_campo_type>.
ASSIGN (ap_field_key) TO <fs_campo_clave>.
ASSIGN (ap_field_tscreen) TO <fs_campo_tscreen>.
IF <fs_campo_type> = p_nivel.
ap_node_id_key = <fs_campo_clave>.
CALL METHOD ao_tree->get_outtab_line
EXPORTING
i_node_key = ap_node_id_key
IMPORTING
e_outtab_line = <wi>
es_node_layout = aw_layout_node
EXCEPTIONS
node_not_found = 1
OTHERS = 2.
MOVE-CORRESPONDING aw_layout_node TO aw_node_layout.
IF ( <fs_campo_tscreen> = 'X' ).
aw_node_layout-style = cl_gui_column_tree=>style_emphasized.
aw_node_layout-u_style = 'X'.
ENDIF.
CALL METHOD ao_tree->change_node
EXPORTING
i_node_key = ap_node_id_key
i_outtab_line = <wi>
is_node_layout = aw_node_layout
EXCEPTIONS
node_not_found = 1
OTHERS = 2.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD PRINT_BOLD_TO_NORMAL.
FIELD-SYMBOLS: <ti> TYPE table.
ASSIGN ao_nodetab->* TO <ti>.
***********************************
*****************************************
DATA: node_result TYPE REF TO data.
FIELD-SYMBOLS: <wi> TYPE ANY.
CREATE DATA node_result TYPE (ap_i_struct_name).
ASSIGN node_result->* TO <wi>.
FIELD-SYMBOLS: <wi2> TYPE ANY.
ASSIGN node_result->* TO <wi2>.
**********************************************
FIELD-SYMBOLS: <fs_campo_type> TYPE ANY.
FIELD-SYMBOLS: <fs_campo_clave> TYPE ANY.
FIELD-SYMBOLS: <fs_campo_tscreen> TYPE ANY.
CLEAR aw_layout_node.
CLEAR aw_node_layout.
LOOP AT <ti> INTO <wi2>.
ASSIGN (ap_field_type) TO <fs_campo_type>.
ASSIGN (ap_field_key) TO <fs_campo_clave>.
ASSIGN (ap_field_tscreen) TO <fs_campo_tscreen>.
IF <fs_campo_type> = p_nivel.
ap_node_id_key = <fs_campo_clave>.
CALL METHOD ao_tree->get_outtab_line
EXPORTING
i_node_key = ap_node_id_key
IMPORTING
e_outtab_line = <wi>
es_node_layout = aw_layout_node
EXCEPTIONS
node_not_found = 1
OTHERS = 2.
MOVE-CORRESPONDING aw_layout_node TO aw_node_layout.
IF ( <fs_campo_tscreen> = 'X' ).
aw_node_layout-style = cl_gui_column_tree=>style_emphasized_c.
aw_node_layout-u_style = 'X'.
ENDIF.
CALL METHOD ao_tree->change_node
EXPORTING
i_node_key = ap_node_id_key
i_outtab_line = <wi>
is_node_layout = aw_node_layout
EXCEPTIONS
node_not_found = 1
OTHERS = 2.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD SAVE_NODE_CHECKED.
FIELD-SYMBOLS: <ti> TYPE table.
ASSIGN ao_nodetab->* TO <ti>.
***********************************
*****************************************
DATA: node_result TYPE REF TO data.
FIELD-SYMBOLS: <wi> TYPE ANY.
CREATE DATA node_result TYPE (ap_i_struct_name).
ASSIGN node_result->* TO <wi>.
*****************************************
FIELD-SYMBOLS: <fs_campo_zsave> TYPE ANY.
DATA idt TYPE sytabix.
CLEAR aw_checked.
REFRESH at_checked.
CALL METHOD ao_tree->get_checked_items
IMPORTING
et_checked_items = at_checked.
IF at_checked IS NOT INITIAL.
*
LOOP AT at_checked INTO aw_checked.
IF flag_g = 1.
** casilla grabacion
READ TABLE <ti> INTO <wi> WITH KEY (ap_label_key) = aw_checked-nodekey.
idt = sy-tabix.
IF sy-subrc <= 2.
ASSIGN (ap_field_zsave) TO <fs_campo_zsave>.
<fs_campo_zsave> = 'X'.
MODIFY <ti> INDEX idt FROM <wi> TRANSPORTING (ap_label_zsave).
CALL METHOD cl_gui_cfw=>flush.
CALL METHOD ao_tree->delete_subtree
EXPORTING
i_node_key = aw_checked-nodekey.
* update frontend
CALL METHOD ao_tree->frontend_update.
PERFORM unlocked IN PROGRAM (ap_program) USING <wi> IF FOUND.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDMETHOD.
METHOD SAVE_NODE_SELECT.
FIELD-SYMBOLS: <ti> TYPE table.
ASSIGN ao_nodetab->* TO <ti>.
***********************************
*****************************************
DATA: node_result TYPE REF TO data.
FIELD-SYMBOLS: <wi> TYPE ANY.
CREATE DATA node_result TYPE (ap_i_struct_name).
ASSIGN node_result->* TO <wi>.
*****************************************
FIELD-SYMBOLS: <fs_campo_zsave> TYPE ANY.
DATA idt TYPE sytabix.
CLEAR aw_selected.
REFRESH at_selected.
CALL METHOD ao_tree->get_selected_nodes
CHANGING
ct_selected_nodes = at_selected.
IF at_selected IS NOT INITIAL.
*
LOOP AT at_selected INTO aw_selected.
IF flag_g = 1.
** casilla grabacion
READ TABLE <ti> INTO <wi> WITH KEY (ap_label_key) = aw_selected-node_key.
idt = sy-tabix.
IF sy-subrc <= 2.
ASSIGN (ap_field_zsave) TO <fs_campo_zsave>.
<fs_campo_zsave> = 'X'.
MODIFY <ti> INDEX idt FROM <wi> TRANSPORTING (ap_label_zsave).
CALL METHOD cl_gui_cfw=>flush.
CALL METHOD ao_tree->delete_subtree
EXPORTING
i_node_key = aw_selected-node_key.
* update frontend
CALL METHOD ao_tree->frontend_update.
PERFORM unlocked IN PROGRAM (ap_program) USING <wi> IF FOUND.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDMETHOD.
METHOD LAYOUT_NIVEL_TEXT.
CLEAR aw_all_layout.
aw_all_layout-type = 'T'. "texto
aw_all_layout-key_node = p_key.
aw_all_layout-node_text = p_node_text.
APPEND aw_all_layout TO at_all_layout.
ENDMETHOD.
METHOD LAYOUT_NIVEL_NODE.
CLEAR aw_all_layout.
aw_all_layout-type = 'N'. "nodo
aw_all_layout-key_node = p_key.
aw_all_layout-hidden = p_hidden.
aw_all_layout-disabled = p_disabled.
aw_all_layout-isfolder = p_isfolder.
aw_all_layout-n_image = p_n_image.
aw_all_layout-exp_image = p_exp_image.
aw_all_layout-style = p_style.
aw_all_layout-last_hitem = p_last_hitem.
aw_all_layout-no_branch = p_no_branch.
aw_all_layout-expander = p_expander.
aw_all_layout-dragdropid = p_dragdropid.
APPEND aw_all_layout TO at_all_layout.
ENDMETHOD.
METHOD LAYOUT_NIVEL_ITEM.
CLEAR aw_all_layout.
aw_all_layout-type = 'I'. "items
aw_all_layout-key_node = p_key.
aw_all_layout-fieldname = p_fieldname.
aw_all_layout-class = p_class.
aw_all_layout-font = p_font.
aw_all_layout-disabled = p_disabled.
aw_all_layout-editable = p_editable.
aw_all_layout-hidden = p_hidden.
aw_all_layout-alignment = p_alignment.
aw_all_layout-t_image = p_t_image.
aw_all_layout-chosen = p_chosen.
aw_all_layout-togg_right = p_togg_right.
aw_all_layout-style = p_style.
APPEND aw_all_layout TO at_all_layout.
ENDMETHOD.
METHOD DISPLAY_GRAPHIC.
FIELD-SYMBOLS: <ti> TYPE table.
ASSIGN ao_nodetab->* TO <ti>.
*****************************************
DATA: node_result TYPE REF TO data.
FIELD-SYMBOLS: <wi> TYPE ANY.
CREATE DATA node_result TYPE (ap_i_struct_name).
ASSIGN node_result->* TO <wi>.
DATA: ta TYPE REF TO data.
FIELD-SYMBOLS: <tax> TYPE table.
CREATE DATA ta TYPE TABLE OF (ap_i_struct_name).
ASSIGN ta->* TO <tax>.
REFRESH <tax>.
LOOP AT <ti> INTO <wi>.
APPEND <wi> TO <tax>.
ENDLOOP.
DATA: tcol_sel TYPE lvc_t_fnam.
FIELD-SYMBOLS: <fs_col_sel> TYPE lvc_fname.
REFRESH tcol_sel.
CALL METHOD ao_tree->get_selected_columns
IMPORTING
et_sel_columns = tcol_sel
EXCEPTIONS
dp_error = 1
failed = 2
OTHERS = 3.
DATA: c TYPE i.
FIELD-SYMBOLS: <fs_fieldcatalog> TYPE lvc_s_fcat.
DATA: col_pos TYPE string.
DATA: new_ap_field_graphics TYPE string.
CLEAR new_ap_field_graphics.
DESCRIBE TABLE tcol_sel LINES c.
IF c > 0.
LOOP AT tcol_sel ASSIGNING <fs_col_sel>.
CLEAR col_pos.
READ TABLE at_fieldcatalog ASSIGNING <fs_fieldcatalog>
WITH KEY fieldname = <fs_col_sel>.
IF sy-subrc <= 2.
col_pos = <fs_fieldcatalog>-col_pos.
CONCATENATE new_ap_field_graphics ',' col_pos INTO new_ap_field_graphics.
ENDIF.
ENDLOOP.
ap_field_graphics = new_ap_field_graphics.
ELSE.
ENDIF.
*******************************************************************
CALL METHOD zcl_alv_tree_mainp=>build_graphics
EXPORTING
p_field_graph = ap_field_graphics
p_nodetab2 = ta
p_nivel = ap_nivel_graphics
p_num_button = '01'
p_collect = ap_collect_graphics.
*******************************************************************
DATA: etiq_at_fieldcatalog_graphic TYPE string.
DATA: etiq_at_it_columns TYPE string.
DATA: etiq_at_it_rows TYPE string.
DATA: etiq_at_nodetab_graph TYPE string.
FIELD-SYMBOLS: <fs_at_fieldcatalog_graphic> TYPE lvc_t_fcat.
FIELD-SYMBOLS: <fs_at_it_columns> TYPE lvc_t_fnam.
FIELD-SYMBOLS: <fs_at_it_rows> TYPE lvc_t_roid.
FIELD-SYMBOLS: <fs_at_nodetab_graph> TYPE table.
CONCATENATE ap_field_fcg p_num_button INTO etiq_at_fieldcatalog_graphic.
ASSIGN (etiq_at_fieldcatalog_graphic) TO <fs_at_fieldcatalog_graphic>.
CONCATENATE ap_field_col p_num_button INTO etiq_at_it_columns.
ASSIGN (etiq_at_it_columns) TO <fs_at_it_columns>.
CONCATENATE ap_tfield_row p_num_button INTO etiq_at_it_rows.
ASSIGN (etiq_at_it_rows) TO <fs_at_it_rows>.
CONCATENATE ap_field_ng p_num_button '->*' INTO etiq_at_nodetab_graph.
ASSIGN (etiq_at_nodetab_graph) TO <fs_at_nodetab_graph>.
IF <fs_at_nodetab_graph> IS ASSIGNED.
CREATE OBJECT ao_graphic
EXPORTING
it_fieldcatalog = <fs_at_fieldcatalog_graphic>
it_outtab = <fs_at_nodetab_graph>
it_columns = <fs_at_it_columns>
it_rows = <fs_at_it_rows>
EXCEPTIONS
error_create_dialogbox = 1
error_create_dc = 2
error_init_dc = 3
error_init_gp = 4
error_fill_dc = 5
OTHERS = 6.
ENDIF.
ENDMETHOD.
METHOD EXPORT_TO_EXCEL.
DATA: ruta_arch TYPE string.
DATA: ruta_comp_arch TYPE string.
DATA: tabla_campos_excel TYPE ztydatafile.
DATA: mascara TYPE char255.
DATA: col_mascara TYPE c.
DATA: p_answer TYPE c.
DATA: p_key TYPE lvc_nkey.
DATA: idx TYPE i.
CLEAR ruta_arch.
CLEAR ruta_comp_arch.
CLEAR mascara.
CLEAR col_mascara.
CLEAR tabla_campos_excel.
REFRESH tabla_campos_excel[].
FIELD-SYMBOLS: <ti> TYPE table.
FIELD-SYMBOLS: <fs> TYPE ANY.
FIELD-SYMBOLS: <fs5> TYPE ANY.
FIELD-SYMBOLS: <fs5t> TYPE ANY.
DATA: w_node_ex TYPE REF TO data.
DATA: w_node_ex2 TYPE REF TO data.
FIELD-SYMBOLS: <wi> TYPE ANY.
FIELD-SYMBOLS: <wi5> TYPE ANY.
FIELD-SYMBOLS: <fstix> TYPE ANY.
CREATE DATA w_node_ex TYPE (ap_i_struct_name_graphic).
ASSIGN w_node_ex->* TO <wi>.
CREATE DATA w_node_ex2 TYPE (ap_i_struct_name_graphic).
ASSIGN w_node_ex2->* TO <wi5>.
FIELD-SYMBOLS: <ti5> TYPE table.
DATA: atx TYPE REF TO data.
CREATE DATA atx TYPE TABLE OF (ap_i_struct_name_graphic).
ASSIGN atx->* TO <ti5>.
FIELD-SYMBOLS: <ti6> TYPE table.
DATA: aty TYPE REF TO data.
CREATE DATA aty TYPE TABLE OF (ap_i_struct_name_graphic).
ASSIGN aty->* TO <ti6>.
ap_nivel_excel = ap_nivel_graphics.
DATA: tcol_sel TYPE lvc_t_fnam.
FIELD-SYMBOLS: <fs_col_sel> TYPE lvc_fname.
REFRESH tcol_sel.
CALL METHOD ao_tree->get_selected_columns
IMPORTING
et_sel_columns = tcol_sel
EXCEPTIONS
dp_error = 1
failed = 2
OTHERS = 3.
DATA: c TYPE i.
FIELD-SYMBOLS: <fs_fieldcatalog> TYPE lvc_s_fcat.
DATA: col_pos TYPE string.
DATA: new_ap_field_excel TYPE string.
CLEAR new_ap_field_excel.
DESCRIBE TABLE tcol_sel LINES c.
IF c > 0.
DATA: lt_fcexcel TYPE lvc_t_fcat.
FIELD-SYMBOLS: <fs_fcexcel> TYPE lvc_s_fcat.
CLEAR lt_fcexcel.
REFRESH lt_fcexcel[].
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = ap_i_struct_name
CHANGING
ct_fieldcat = lt_fcexcel.
LOOP AT tcol_sel ASSIGNING <fs_col_sel>.
CLEAR col_pos.
READ TABLE lt_fcexcel ASSIGNING <fs_fieldcatalog>
WITH KEY fieldname = <fs_col_sel>.
IF sy-subrc <= 2.
col_pos = <fs_fieldcatalog>-col_pos.
CONCATENATE new_ap_field_excel ',' col_pos INTO new_ap_field_excel.
ENDIF.
ENDLOOP.
ap_field_out_excel = new_ap_field_excel.
ELSE.
ENDIF.
IF ap_field_out_excel IS INITIAL.
ELSE.
APPEND ap_field_out_excel TO tabla_campos_excel.
CALL METHOD zcl_alv_tree_mainp=>define_mask
EXPORTING
p_tabla_i = tabla_campos_excel
IMPORTING
p_mascara = mascara.
col_mascara = 'X'.
ENDIF.
ASSIGN ao_nodetab->* TO <ti>.
** 13-02-12
** verificamos.. lo que está escondido x pantalla no sale
REFRESH <ti5>.
LOOP AT <ti> INTO <wi>.
MOVE-CORRESPONDING <wi> TO <wi5>.
APPEND <wi5> TO <ti5>.
ENDLOOP.
<ti6> = <ti5>.
LOOP AT <ti6> INTO <wi5>.
idx = sy-tabix.
ASSIGN (ap_field_key5) TO <fs5>.
ASSIGN (ap_field_type5) TO <fs5t>.
p_key = <fs5>.
CLEAR p_answer.
CALL METHOD zcl_alv_tree_mainp=>is_hidden
EXPORTING
p_key = p_key
IMPORTING
p_answer = p_answer.
IF p_answer = 'X'.
READ TABLE <ti5> ASSIGNING <fstix> WITH KEY (ap_label_key) = p_key.
IF sy-subrc <= 2.
idx = sy-tabix.
DELETE <ti5> INDEX idx.
ENDIF.
ELSE.
IF <fs5t> = ap_nivel_excel OR ap_nivel_excel = 0.
ELSE.
READ TABLE <ti5> ASSIGNING <fstix> WITH KEY (ap_label_key) = p_key.
IF sy-subrc <= 2.
idx = sy-tabix.
DELETE <ti5> INDEX idx.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
IF <ti5> IS ASSIGNED.
CALL FUNCTION 'ZHR_GET_NAME'
IMPORTING
name_file_out = ap_name_file_excel.
CALL METHOD cl_gui_frontend_services=>directory_browse
EXPORTING
window_title = 'Elija el directorio donde va a grabar el archivo'
CHANGING
selected_folder = ruta_arch
EXCEPTIONS
cntl_error = 1
error_no_gui = 2
not_supported_by_gui = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID 'ZHRMSG' TYPE 'I' NUMBER '131'.
ENDIF.
IF ruta_arch = space.
ruta_arch = 'C:'.
ENDIF.
IF ap_name_file_excel IS INITIAL.
ap_name_file_excel = '\ARCHIVO.XLS'.
ELSE.
CONCATENATE '\' ap_name_file_excel '.XLS' INTO ap_name_file_excel.
ENDIF.
CONCATENATE ruta_arch ap_name_file_excel INTO ruta_comp_arch.
mascara = mascara+1(254).
CALL METHOD cl_gui_frontend_services=>gui_download
EXPORTING
filename = ruta_comp_arch
filetype = 'DAT'
col_select = col_mascara
col_select_mask = mascara
CHANGING
data_tab = <ti5>
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
not_supported_by_gui = 22
error_no_gui = 23
OTHERS = 24.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
MESSAGE ID 'ZHRMSG' TYPE 'I' NUMBER 504.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD BUILD_GRAPHICS.
DATA: idt TYPE sytabix.
DATA: ptabla TYPE ztydatafile.
DATA: p_tab_campo_grafico TYPE ztydatafile.
FIELD-SYMBOLS: <fs_p_tab_campo_grafico> TYPE zwdatafile.
FIELD-SYMBOLS: <fs_at_fieldcatalog> TYPE lvc_s_fcat.
DATA: c TYPE i.
DATA: c2 TYPE i.
DATA: etiq_t_fieldcatalog_g TYPE string.
DATA: etiq_t_columns_g TYPE string.
DATA: etiq_t_rows_g TYPE string.
DATA: etiq_w_rows_g TYPE string.
DATA: etiq_at_nodetab_graph TYPE string.
FIELD-SYMBOLS: <fs_t_cat_g> TYPE lvc_t_fcat.
FIELD-SYMBOLS: <fs_t_row_g> TYPE lvc_t_roid.
FIELD-SYMBOLS: <fs_w_row_g> TYPE lvc_s_roid.
FIELD-SYMBOLS: <fs_t_col_g> TYPE lvc_t_fnam.
FIELD-SYMBOLS: <fs_at_nodetab_graph> TYPE table.
DATA: etiq_campo TYPE string.
DATA: var TYPE char1024.
FIELD-SYMBOLS: <fs_etiq_campo> TYPE ANY.
DATA: etiq_type TYPE string.
FIELD-SYMBOLS: <fs_wgr> TYPE ANY.
DATA: wlayout TYPE lvc_s_lacn.
DATA: wnodekey TYPE lvc_nkey.
DATA: wlayout_node TYPE lvc_s_layn.
FIELD-SYMBOLS: <fs_key> TYPE ANY.
DATA: tnodekey TYPE lvc_t_nkey.
DATA: ti_tnodekey TYPE lvc_t_nkey.
FIELD-SYMBOLS: <fs_ti_tnodekey> TYPE lvc_nkey.
********************************************************************
CLEAR p_tab_campo_grafico.
REFRESH p_tab_campo_grafico[].
CLEAR ptabla.
REFRESH ptabla[].
APPEND p_field_graph TO ptabla.
IF p_field_graph IS NOT INITIAL.
CALL METHOD zcl_alv_tree_mainp=>frag_pattern
EXPORTING
ps_separador = ','
ps_nombre_estructura = 'ZWDATAFILE'
pt_tabla_i = ptabla
IMPORTING
lt_trama_o = p_tab_campo_grafico.
ENDIF.
ao_nodetab3 = p_nodetab2.
CONCATENATE ap_field_fcg p_num_button INTO etiq_t_fieldcatalog_g.
ASSIGN (etiq_t_fieldcatalog_g) TO <fs_t_cat_g>.
CONCATENATE ap_field_col p_num_button INTO etiq_t_columns_g.
ASSIGN (etiq_t_columns_g) TO <fs_t_col_g>.
CONCATENATE ap_tfield_row p_num_button INTO etiq_t_rows_g.
ASSIGN (etiq_t_rows_g) TO <fs_t_row_g>.
CONCATENATE ap_wfield_row p_num_button INTO etiq_w_rows_g.
ASSIGN (etiq_w_rows_g) TO <fs_w_row_g>.
REFRESH <fs_t_cat_g>.
REFRESH <fs_t_col_g>.
REFRESH <fs_t_row_g>.
<fs_t_cat_g> = at_fieldcatalog.
FIELD-SYMBOLS: <ti> TYPE table.
ASSIGN ao_nodetab3->* TO <ti>.
DATA: w_node_gr TYPE REF TO data.
FIELD-SYMBOLS: <wi> TYPE ANY.
CREATE DATA w_node_gr TYPE (ap_i_struct_name_graphic).
ASSIGN w_node_gr->* TO <wi>.
FIELD-SYMBOLS: <wix> TYPE ANY.
DATA: tab TYPE REF TO data.
FIELD-SYMBOLS: <fstab> TYPE table.
CREATE DATA tab TYPE TABLE OF (ap_i_struct_name_graphic).
ASSIGN tab->* TO <fstab>.
<fstab> = <ti>.
IF p_nivel IS NOT INITIAL.
LOOP AT <fstab> INTO <wi>.
ASSIGN (ap_field_type) TO <fs_wgr>.
CLEAR wlayout_node.
CLEAR wlayout.
ASSIGN (ap_field_key) TO <fs_key>.
wnodekey = <fs_key>.
CALL METHOD ao_tree->get_outtab_line
EXPORTING
i_node_key = wnodekey
IMPORTING
e_outtab_line = <wi>
es_node_layout = wlayout_node
EXCEPTIONS
node_not_found = 1
OTHERS = 2.
MOVE-CORRESPONDING wlayout_node TO wlayout.
IF ( <fs_wgr> = p_nivel AND wlayout-hidden = ' ' ) OR p_nivel = 0.
ELSE.
READ TABLE <ti> ASSIGNING <wix> WITH KEY (ap_label_key) = wnodekey.
IF sy-subrc <= 2.
idt = sy-tabix.
DELETE <ti> INDEX idt.
ENDIF.
ENDIF.
* READ TABLE ti_tnodekey FROM wnodekey ASSIGNING <fs_ti_tnodekey>.
* IF sy-subrc <= 2.
* DELETE <ti> INDEX idt.
* ENDIF.
ENDLOOP.
ENDIF.
LOOP AT <fs_t_cat_g> ASSIGNING <fs_at_fieldcatalog>.
var = <fs_at_fieldcatalog>-col_pos.
CONDENSE var.
IF p_field_graph IS NOT INITIAL.
READ TABLE p_tab_campo_grafico ASSIGNING <fs_p_tab_campo_grafico>
WITH KEY line = var.
IF sy-subrc <= 2.
APPEND <fs_at_fieldcatalog>-fieldname TO <fs_t_col_g>.
<fs_at_fieldcatalog>-no_out = ''.
ELSE.
LOOP AT <ti> INTO <wi>.
idt = sy-tabix.
CONCATENATE ap_structure <fs_at_fieldcatalog>-fieldname INTO etiq_campo.
ASSIGN (etiq_campo) TO <fs_etiq_campo>.
<fs_etiq_campo> = space.
MODIFY <ti> INDEX idt FROM <wi>
TRANSPORTING (<fs_at_fieldcatalog>-fieldname).
<fs_at_fieldcatalog>-no_out = 'X'.
ENDLOOP.
ENDIF.
ELSE.
APPEND <fs_at_fieldcatalog>-fieldname TO <fs_t_col_g>.
ENDIF.
ENDLOOP.
** collect
FIELD-SYMBOLS: <tgra> TYPE table.
DATA: at_node TYPE REF TO data.
CREATE DATA at_node TYPE TABLE OF (ap_i_struct_name_graphic).
ASSIGN at_node->* TO <tgra>.
IF p_collect = 'X'.
LOOP AT <ti> INTO <wi>.
COLLECT <wi> INTO <tgra>.
ENDLOOP.
ELSE.
<tgra> = <ti>.
ENDIF.
** new - 25-11-09 -> ojo -> ordena la ultima hoja
IF p_collect = 'X'.
* SORT <tgra> BY
* (ap_field_sort01) (ap_field_sort02) (ap_field_sort03) (ap_field_sort04)
* (ap_field_sort05) (ap_field_sort06) (ap_field_sort07) (ap_field_sort08) (ap_field_sort09)
* (ap_field_sort_tkey).
ENDIF.
*************************************************
IF p_num_button = '01'.
ao_nodetab_graph01 = at_node.
ELSEIF p_num_button = '02'.
ao_nodetab_graph02 = at_node.
ENDIF.
DESCRIBE TABLE <tgra> LINES c.
DO c TIMES.
ADD 1 TO c2.
<fs_w_row_g>-row_id = c2.
<fs_w_row_g>-sub_row_id = 0.
APPEND <fs_w_row_g> TO <fs_t_row_g>.
ENDDO.
ENDMETHOD.
METHOD BUILD_EXCEL.
DATA: etiq_type TYPE string.
DATA: idx TYPE sytabix.
ao_nodetab5 = p_nodetab3.
FIELD-SYMBOLS: <ti> TYPE table.
FIELD-SYMBOLS: <fs_ti> TYPE ANY.
FIELD-SYMBOLS: <fs_ti2> TYPE ANY.
ASSIGN ao_nodetab5->* TO <ti>.
DATA: w_node_ex TYPE REF TO data.
FIELD-SYMBOLS: <wi> TYPE ANY.
CREATE DATA w_node_ex TYPE (ap_i_struct_name_graphic).
ASSIGN w_node_ex->* TO <wi>.
IF p_nivel IS NOT INITIAL.
LOOP AT <ti> INTO <wi>.
idx = sy-tabix.
ASSIGN (ap_field_type) TO <fs_ti>.
IF <fs_ti> = p_nivel.
ELSE.
DELETE <ti> INDEX idx.
ENDIF.
ENDLOOP.
ENDIF.
ENDMETHOD.
METHOD ASSIGN_BY_GROUP.
DATA: conta(2) TYPE n.
DATA: ptabla TYPE ztydatafile.
DATA: p_tab_agrup_campo TYPE ztydatafile.
FIELD-SYMBOLS: <fs_p_tab_agrup_campo> TYPE zwdatafile.
FIELD-SYMBOLS: <fs_at_fieldcatalog> TYPE lvc_s_fcat.
DATA: etiq_valida TYPE dynfnam.
FIELD-SYMBOLS: <fs_etiq_valida> TYPE dynfnam.
CLEAR p_tab_agrup_campo.
REFRESH p_tab_agrup_campo[].
CLEAR ptabla.
REFRESH ptabla[].
IF p_agroup_field IS NOT INITIAL.
APPEND p_agroup_field TO ptabla.
CALL METHOD zcl_alv_tree_mainp=>frag_pattern
EXPORTING
ps_separador = ','
ps_nombre_estructura = 'ZWDATAFILE'
pt_tabla_i = ptabla
IMPORTING
lt_trama_o = p_tab_agrup_campo.
conta = 0.
LOOP AT p_tab_agrup_campo ASSIGNING <fs_p_tab_agrup_campo>.
READ TABLE at_fieldcatalog ASSIGNING <fs_at_fieldcatalog>
WITH KEY col_pos = <fs_p_tab_agrup_campo>-line.
IF sy-subrc <= 2.
conta = conta + 1.
CONCATENATE ap_label_agroup_field conta INTO etiq_valida.
ASSIGN (etiq_valida) TO <fs_etiq_valida>.
<fs_etiq_valida> = <fs_at_fieldcatalog>-fieldname.
ENDIF.
IF conta = '09'.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
ENDMETHOD.
METHOD ASSIGN_BY_SCREEN.
DATA: conta(2) TYPE n.
DATA: ptabla TYPE ztydatafile.
DATA: p_tab_screen_campo TYPE ztydatafile.
FIELD-SYMBOLS: <fs_p_tab_screen_campo> TYPE zwdatafile.
DATA: etiq_valida TYPE dynfnam.
FIELD-SYMBOLS: <fs_etiq_valida> TYPE dynfnam.
CLEAR p_tab_screen_campo.
REFRESH p_tab_screen_campo[].
CLEAR ptabla.
REFRESH ptabla[].
IF p_screen_field IS NOT INITIAL.
APPEND p_screen_field TO ptabla.
CALL METHOD zcl_alv_tree_mainp=>frag_pattern
EXPORTING
ps_separador = ','
ps_nombre_estructura = 'ZWDATAFILE'
pt_tabla_i = ptabla
IMPORTING
lt_trama_o = p_tab_screen_campo.
conta = 0.
LOOP AT p_tab_screen_campo ASSIGNING <fs_p_tab_screen_campo>.
conta = conta + 1.
CONCATENATE ap_label_screen_field conta INTO etiq_valida.
ASSIGN (etiq_valida) TO <fs_etiq_valida>.
<fs_etiq_valida> = <fs_p_tab_screen_campo>-line.
IF conta = '09'.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
ENDMETHOD.
METHOD DELETE_NIVEL.
DATA: idx TYPE sytabix.
DATA: idx2 TYPE sytabix.
FIELD-SYMBOLS : <fs> TYPE ANY.
DATA: e TYPE lvc_nkey.
DATA: y TYPE num2.
DATA: nodo TYPE zwassign.
FIELD-SYMBOLS : <fs_min_nivel> TYPE zwassign.
CALL METHOD zcl_alv_tree_mainp=>assign_by_nivel
EXPORTING
p_nivel = p_nivel.
ao_nodetab_nivel = p_nodetab.
***************************************************************************************
FIELD-SYMBOLS: <ti> TYPE table.
ASSIGN ao_nodetab_nivel->* TO <ti>.
***********************************
DATA: tb TYPE REF TO data.
FIELD-SYMBOLS: <fstb> TYPE table.
FIELD-SYMBOLS: <wix> TYPE ANY.
CREATE DATA tb TYPE TABLE OF (ap_i_struct_name).
ASSIGN tb->* TO <fstb>.
*****************************************
DATA: node_result TYPE REF TO data.
FIELD-SYMBOLS: <wi> TYPE ANY.
CREATE DATA node_result TYPE (p_structure).
ASSIGN node_result->* TO <wi>.
******************************************************************************************
<fstb> = <ti>.
LOOP AT <ti> INTO <wi>.
idx = sy-tabix.
e = idx.
ASSIGN (ap_field_type) TO <fs>.
IF <fs> = ap_nivel_field01 OR <fs> = ap_nivel_field02 OR <fs> = ap_nivel_field03 OR <fs> = ap_nivel_field04
OR <fs> = ap_nivel_field05 OR <fs> = ap_nivel_field06 OR <fs> = ap_nivel_field07 OR <fs> = ap_nivel_field08
OR <fs> = ap_nivel_field09.
DELETE at_all_layout WHERE key_node = e.
ENDIF.
ENDLOOP.
** borro las "divisiones"
LOOP AT <fstb> INTO <wi>.
ASSIGN (ap_field_type) TO <fs>.
IF <fs> = ap_nivel_field01 OR <fs> = ap_nivel_field02 OR <fs> = ap_nivel_field03 OR <fs> = ap_nivel_field04
OR <fs> = ap_nivel_field05 OR <fs> = ap_nivel_field06 OR <fs> = ap_nivel_field07 OR <fs> = ap_nivel_field08
OR <fs> = ap_nivel_field09.
READ TABLE <ti> ASSIGNING <wix> WITH KEY (ap_label_type) = <fs>.
IF sy-subrc <= 2.
idx = sy-tabix.
DELETE <ti> INDEX idx.
ENDIF.
ENDIF.
ENDLOOP.
LOOP AT <ti> INTO <wi>.
idx = sy-tabix.
ASSIGN (ap_field_type) TO <fs>.
nodo = <fs>.
COLLECT nodo INTO at_min_nivel.
ENDLOOP.
*
SORT at_min_nivel ASCENDING.
y = '00'.
LOOP AT at_min_nivel ASSIGNING <fs_min_nivel>.
y = y + 1.
<fs_min_nivel>-equivalent = y.
ENDLOOP.
LOOP AT <ti> INTO <wi>.
idx = sy-tabix.
ASSIGN (ap_field_type) TO <fs>.
READ TABLE at_min_nivel ASSIGNING <fs_min_nivel> WITH KEY
node = <fs>.
IF sy-subrc <= 2.
<fs> = <fs_min_nivel>-equivalent.
MODIFY <ti> INDEX idx FROM <wi>.
ENDIF.
ENDLOOP.
** reasigno layouts
FIELD-SYMBOLS: <fs_lay> TYPE zwitem_layout.
DATA: r TYPE i.
DATA: c1 TYPE lvc_nkey.
DO p_conta TIMES.
c1 = c1 + 1.
READ TABLE at_all_layout ASSIGNING <fs_lay> WITH KEY key_node = c1.
IF sy-subrc <= 2.
r = r + 1.
<fs_lay>-key_node = r.
MODIFY at_all_layout FROM <fs_lay> TRANSPORTING key_node WHERE key_node = c1.
ENDIF.
ENDDO.
** busco los padres
LOOP AT <ti> INTO <wi>.
idx = sy-tabix.
c1 = idx.
ASSIGN (ap_field_type) TO <fs>.
IF <fs> = '01'.
LOOP AT at_all_layout ASSIGNING <fs_lay> WHERE key_node = c1.
idx2 = sy-tabix.
IF <fs_lay>-type = 'N'.
<fs_lay>-hidden = 'X'.
<fs_lay>-fieldname = space.
ELSEIF <fs_lay>-type = 'I'.
<fs_lay>-hidden = space.
<fs_lay>-fieldname = ao_tree->c_hierarchy_column_name.
ENDIF.
MODIFY at_all_layout FROM <fs_lay> INDEX idx2.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD ASSIGN_BY_NIVEL.
DATA: conta(2) TYPE n.
DATA: ptabla TYPE ztydatafile.
DATA: p_tab_nivel TYPE ztydatafile.
FIELD-SYMBOLS: <fs_p_tab_nivel> TYPE zwdatafile.
FIELD-SYMBOLS: <fs_at_fieldcatalog> TYPE lvc_s_fcat.
DATA: etiq_valida TYPE dynfnam.
FIELD-SYMBOLS: <fs_etiq_valida> TYPE dynfnam.
CLEAR p_tab_nivel.
REFRESH p_tab_nivel[].
CLEAR ptabla.
REFRESH ptabla[].
IF p_nivel IS NOT INITIAL.
APPEND p_nivel TO ptabla.
CALL METHOD zcl_alv_tree_mainp=>frag_pattern
EXPORTING
ps_separador = ','
ps_nombre_estructura = 'ZWDATAFILE'
pt_tabla_i = ptabla
IMPORTING
lt_trama_o = p_tab_nivel.
conta = 0.
LOOP AT p_tab_nivel ASSIGNING <fs_p_tab_nivel>.
conta = conta + 1.
CONCATENATE ap_label_nivel_field conta INTO etiq_valida.
ASSIGN (etiq_valida) TO <fs_etiq_valida>.
<fs_etiq_valida> = <fs_p_tab_nivel>-line.
IF conta = '09'.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
ENDMETHOD.
METHOD SORT_COLUMN.
DATA: conta TYPE num.
DATA: conta2 TYPE num.
DATA: conta_esp TYPE num.
DATA: idt TYPE sytabix.
DATA: idx TYPE sytabix.
DATA: idb TYPE sytabix.
DATA: ida TYPE sytabix.
DATA: etiq_label TYPE string.
DATA: o TYPE int2.
DATA: l TYPE num2.
DATA: lt_selected_nodes TYPE lvc_t_nkey.
DATA: ban TYPE i.
DATA: lt_fathers TYPE lvc_t_nkey.
FIELD-SYMBOLS: <fs_fathers> TYPE lvc_nkey.
FIELD-SYMBOLS: <fs_fieldcatalog> TYPE lvc_s_fcat.
DATA: new_ap_field_graphics TYPE string.
DATA: new_ap_field_graphics2 TYPE string.
DATA: col_pos TYPE string.
FIELD-SYMBOLS: <ti> TYPE table.
ASSIGN ao_nodetab->* TO <ti>.
***********************************
***13-02-12
DATA: ta TYPE REF TO data.
FIELD-SYMBOLS: <ti2> TYPE table.
CREATE DATA ta TYPE TABLE OF (ap_i_struct_name).
ASSIGN ta->* TO <ti2>.
DATA: wnode_tab TYPE REF TO data.
FIELD-SYMBOLS: <wi> TYPE ANY.
CREATE DATA wnode_tab TYPE (ap_i_struct_name).
ASSIGN wnode_tab->* TO <wi>.
DATA: wnode_tab2 TYPE REF TO data.
FIELD-SYMBOLS: <wi2> TYPE ANY.
CREATE DATA wnode_tab2 TYPE (ap_i_struct_name).
ASSIGN wnode_tab2->* TO <wi2>.
DATA: wnode_tab3 TYPE REF TO data.
FIELD-SYMBOLS: <wi3> TYPE ANY.
CREATE DATA wnode_tab3 TYPE (ap_i_struct_name).
ASSIGN wnode_tab3->* TO <wi3>.
DATA: tb TYPE REF TO data.
FIELD-SYMBOLS: <ti3> TYPE table.
CREATE DATA tb TYPE TABLE OF (ap_i_struct_name).
ASSIGN tb->* TO <ti3>.
DATA: tc TYPE REF TO data.
FIELD-SYMBOLS: <ti4> TYPE table.
CREATE DATA tc TYPE TABLE OF (ap_i_struct_name).
ASSIGN tc->* TO <ti4>.
FIELD-SYMBOLS: <fskey2> TYPE ANY.
DATA: p_answer TYPE c.
DATA: p_key TYPE lvc_nkey.
REFRESH <ti2>.
LOOP AT <ti> INTO <wi>.
MOVE-CORRESPONDING <wi> TO <wi2>.
APPEND <wi2> TO <ti2>.
ENDLOOP.
*********************************************
FIELD-SYMBOLS: <fs> TYPE ANY.
FIELD-SYMBOLS: <fs1> TYPE ANY.
FIELD-SYMBOLS: <fs1a> TYPE zwtype.
FIELD-SYMBOLS: <fs_type> TYPE ANY.
FIELD-SYMBOLS: <fs_key> TYPE ANY.
FIELD-SYMBOLS: <fs_type2> TYPE ANY.
FIELD-SYMBOLS: <fs_key2> TYPE ANY.
DATA: tcol_sel TYPE lvc_t_fnam.
FIELD-SYMBOLS: <fs_col_sel> TYPE lvc_fname.
FIELD-SYMBOLS: <fs_at_nodes_sorted> TYPE zwsort.
FIELD-SYMBOLS: <fs_at_nodes_sortedm> TYPE zwsort.
FIELD-SYMBOLS: <fs_at_nodes_sorted2> TYPE zwsort.
FIELD-SYMBOLS: <fs_at_nodes_sortedx> TYPE zwsort.
FIELD-SYMBOLS: <fs_last> TYPE zwsort.
DATA: texp_nodes TYPE lvc_t_nkey.
FIELD-SYMBOLS: <fs_texp_nodes> TYPE lvc_nkey.
DATA: tnivel_nodos TYPE ztytype.
FIELD-SYMBOLS: <fs_tnivel_nodos> TYPE zwtype.
DATA: wnivel_nodos TYPE zwtype.
***********************************************
REFRESH at_nodes_sorted.
REFRESH at_nodes_sorted2.
REFRESH at_nodes_sorted3.
REFRESH at_nodes_sorted4.
REFRESH lt_selected_nodes.
REFRESH lt_fathers.
REFRESH tcol_sel.
CALL METHOD ao_tree->get_selected_columns
IMPORTING
et_sel_columns = tcol_sel
EXCEPTIONS
dp_error = 1
failed = 2
OTHERS = 3.
conta = '00'.
LOOP AT tcol_sel ASSIGNING <fs_col_sel>.
conta = conta + 1.
CONCATENATE ap_label_field_sort conta INTO etiq_label.
ASSIGN (etiq_label) TO <fs>.
<fs> = <fs_col_sel>.
ENDLOOP.
IF <ti2> IS ASSIGNED.
LOOP AT <ti2> INTO <wi2>. "no ordenado
idt = sy-tabix.
ASSIGN (ap_field_key2) TO <fs_key2>.
ASSIGN (ap_field_type2) TO <fs_type2>.
CLEAR aw_nodes_sorted.
aw_nodes_sorted-node = <fs_key2>.
aw_nodes_sorted-type = <fs_type2>.
CALL METHOD ao_tree->get_parent
EXPORTING
i_node_key = <fs_key2>
IMPORTING
e_parent_node_key = aw_nodes_sorted-father.
APPEND aw_nodes_sorted TO at_nodes_sorted4.
COLLECT aw_nodes_sorted-father INTO lt_fathers.
ENDLOOP.
IF p_ucomm = '&ISU'.
SORT <ti2> BY
(ap_field_sort01) (ap_field_sort02) (ap_field_sort03) (ap_field_sort04)
(ap_field_sort05) (ap_field_sort06) (ap_field_sort07) (ap_field_sort08) (ap_field_sort09)
(ap_field_sort_tkey) ASCENDING.
ELSE.
SORT <ti2> DESCENDING BY
(ap_field_sort01) (ap_field_sort02) (ap_field_sort03) (ap_field_sort04)
(ap_field_sort05) (ap_field_sort06) (ap_field_sort07) (ap_field_sort08) (ap_field_sort09)
(ap_field_sort_tkey) ASCENDING.
ENDIF.
LOOP AT <ti2> INTO <wi2>. "ordenado
idt = sy-tabix.
ASSIGN (ap_field_key2) TO <fs_key2>.
ASSIGN (ap_field_type2) TO <fs_type2>.
CLEAR aw_nodes_sorted2.
aw_nodes_sorted2-node = <fs_key2>.
aw_nodes_sorted2-type = <fs_type2>.
CALL METHOD ao_tree->get_parent
EXPORTING
i_node_key = <fs_key2>
IMPORTING
e_parent_node_key = aw_nodes_sorted2-father.
APPEND aw_nodes_sorted2 TO at_nodes_sorted3.
ENDLOOP.
conta = '00'.
"evaluo cada padre
LOOP AT lt_fathers ASSIGNING <fs_fathers>.
REFRESH at_nodes_sorted.
REFRESH at_nodes_sorted2.
INSERT LINES OF at_nodes_sorted3 INTO TABLE at_nodes_sorted2. "ordenado
INSERT LINES OF at_nodes_sorted4 INTO TABLE at_nodes_sorted. "no ordenado
DELETE at_nodes_sorted2 WHERE father <> <fs_fathers>.
DELETE at_nodes_sorted WHERE father <> <fs_fathers>.
DESCRIBE TABLE at_nodes_sorted LINES o.
LOOP AT at_nodes_sorted2 ASSIGNING <fs_at_nodes_sorted2>. "ordenados
idt = sy-tabix.
READ TABLE at_nodes_sorted ASSIGNING <fs_at_nodes_sorted>
WITH KEY node = <fs_at_nodes_sorted2>-node.
idx = sy-tabix.
IF sy-subrc <= 2.
IF idt <> idx .
ban = 0.
WHILE ban = 0.
READ TABLE at_nodes_sorted ASSIGNING <fs_at_nodes_sortedx>
INDEX idt. "no ordenados"
ida = sy-tabix.
IF sy-subrc <= 2.
IF <fs_at_nodes_sortedx>-mark = space.
READ TABLE at_nodes_sorted INDEX o ASSIGNING <fs_last>.
IF sy-subrc <= 2.
CALL METHOD ao_tree->move_node
EXPORTING
i_node_key = <fs_at_nodes_sortedx>-node
i_relatkey = <fs_last>-node
i_relatship = 2
EXCEPTIONS
node_not_found = 1
relative_not_found = 2
OTHERS = 3.
CALL METHOD cl_gui_cfw=>flush
EXCEPTIONS
cntl_system_error = 1
cntl_error = 2
OTHERS = 3.
conta = conta + 1.
** simulacion de mover nodo
CLEAR aw_nodes_sorted.
aw_nodes_sorted-node = <fs_at_nodes_sortedx>-node.
APPEND aw_nodes_sorted TO at_nodes_sorted.
DELETE at_nodes_sorted INDEX ida.
READ TABLE at_nodes_sorted INDEX idt ASSIGNING <fs_at_nodes_sortedm>.
IF sy-subrc <= 2.
IF <fs_at_nodes_sortedm>-node = <fs_at_nodes_sorted2>-node.
<fs_at_nodes_sortedm>-mark = 'X'.
ban = 1.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDWHILE.
ELSE.
<fs_at_nodes_sorted>-mark = 'X'.
ENDIF.
ELSE.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.
MESSAGE ID 'ZHRMSG' TYPE 'S' NUMBER 517 WITH conta.
************************* new ******************************************
CALL METHOD ao_tree->frontend_update.
REFRESH <ti>.
<ti> = <ti2>. "ordenada
****************************************************************************************
ENDMETHOD.
METHOD ASSIGN_SORT.
DATA: conta TYPE num.
DATA: conta2 TYPE num.
DATA: idt TYPE sytabix.
DATA: idx TYPE sytabix.
DATA: idb TYPE sytabix.
DATA: ida TYPE sytabix.
DATA: etiq_label TYPE string.
DATA: o TYPE int2.
DATA: lt_selected_nodes TYPE lvc_t_nkey.
FIELD-SYMBOLS: <ti> TYPE table.
ASSIGN ao_nodetab->* TO <ti>.
***********************************
FIELD-SYMBOLS: <ti2> TYPE table.
ASSIGN ao_nodetab_sort->* TO <ti2>.
***********************************************
REFRESH <ti2>.
INSERT LINES OF <ti> INTO TABLE <ti2>. " lo que hay en ese momento en ti
ENDMETHOD.
METHOD FILTER.
DATA: tcol_sel TYPE lvc_t_fnam.
DATA: wcol_sel TYPE zwfname.
DATA: tcol_sel2 TYPE lvc_t_col.
DATA: wcol_sel2 TYPE lvc_s_col.
DATA: wlayout TYPE lvc_s_lacn.
DATA: wnodekey TYPE lvc_nkey.
DATA: wlayout_node TYPE lvc_s_layn.
DATA: idt TYPE sytabix.
DATA: ttype TYPE ztytype.
DATA: wtype TYPE zwtype.
DATA: conta TYPE i.
FIELD-SYMBOLS: <ti> TYPE table.
ASSIGN ao_nodetab->* TO <ti>.
DATA: wnode_tab TYPE REF TO data.
FIELD-SYMBOLS: <wi> TYPE ANY.
CREATE DATA wnode_tab TYPE (ap_i_struct_name).
ASSIGN wnode_tab->* TO <wi>.
FIELD-SYMBOLS : <fs_key> TYPE ANY.
FIELD-SYMBOLS : <fs_type> TYPE ANY.
FIELD-SYMBOLS : <fs_wtype> TYPE zwtype.
FIELD-SYMBOLS: <fs_filter> TYPE lvc_s_filt.
*************************************************
DATA: t_filter_index TYPE lvc_t_fidx.
DATA: t_grouplevels_filter TYPE lvc_t_grpl.
DATA: t_filter_index_inside TYPE lvc_t_fidx.
DATA: w_filter_flagname TYPE char40.
DATA: t_filter_index2 TYPE lvc_t_fidx.
DATA: t_grouplevels_filter2 TYPE lvc_t_grpl.
DATA: t_filter_index_inside2 TYPE lvc_t_fidx.
DATA: w_filter_flagname2 TYPE char40.
DATA: aw_layo TYPE lvc_s_layo.
DATA: filt TYPE lvc_t_filt.
DATA: wfilt TYPE lvc_s_filt.
FIELD-SYMBOLS: <fs_index> TYPE int4.
DATA: tot_filter TYPE i.
DATA: tot_ti TYPE i.
DATA: tnodekey TYPE lvc_t_nkey.
DATA: ti_tnodekey TYPE lvc_t_nkey.
FIELD-SYMBOLS: <fs_ti_tnodekey> TYPE lvc_nkey.
***************************************************
CLEAR: t_filter_index[], t_grouplevels_filter[], t_filter_index_inside[], w_filter_flagname.
CLEAR: t_filter_index2[], t_grouplevels_filter2[], t_filter_index_inside2[], w_filter_flagname2.
REFRESH: t_filter_index, t_grouplevels_filter, t_filter_index_inside.
REFRESH: t_filter_index2, t_grouplevels_filter2, t_filter_index_inside2.
CLEAR: aw_layo.
CLEAR: tcol_sel[], tcol_sel2[].
REFRESH: tcol_sel, tcol_sel2.
conta = 0.
DATA: campo TYPE lvc_fname.
FIELD-SYMBOLS: <fscat> TYPE lvc_s_fcat.
IF ap_nivel_graphics = 0.
LOOP AT at_fieldcatalog ASSIGNING <fscat>.
IF <fscat>-no_out = ' '.
campo = <fscat>-fieldname.
APPEND campo TO tcol_sel.
ENDIF.
ENDLOOP.
ELSE.
CALL METHOD ao_tree->get_selected_columns
IMPORTING
et_sel_columns = tcol_sel
EXCEPTIONS
dp_error = 1
failed = 2
OTHERS = 3.
ENDIF.
LOOP AT tcol_sel INTO wcol_sel.
CLEAR wcol_sel2.
wcol_sel2-fieldname = wcol_sel.
APPEND wcol_sel2 TO tcol_sel2.
ENDLOOP.
APPEND ap_label_type TO tcol_sel2.
****************************************************************************
IF ap_nivel_graphics > 0 AND ap_nivel_graphics <= 9.
REFRESH filt.
wfilt-fieldname = 'TYPE'.
wfilt-sign = 'I'.
wfilt-option = 'EQ'.
wfilt-low = ap_nivel_graphics.
APPEND wfilt TO filt.
ENDIF.
****************************************************************************
CALL FUNCTION 'LVC_FILTER'
EXPORTING
* I_CALLBACK_PROGRAMM = ' '
it_fieldcat = at_fieldcatalog
it_selected_cols = tcol_sel2
* IT_VALUE_UNIT =
* IT_GROUPLEVELS =
is_layout = aw_layo
* IS_SELFIELD =
* IT_GROUPS =
* IS_FILT_LAYOUT =
* IT_EVENTS =
* I_NO_DIALOG =
* IT_EXCEPT_QINFO =
IMPORTING
et_filter_index = t_filter_index
et_grouplevels_filter = t_grouplevels_filter
et_filter_index_inside = t_filter_index_inside
e_filter_flagname = w_filter_flagname
TABLES
it_data = <ti>
CHANGING
ct_filter = filt
EXCEPTIONS
no_change = 1
OTHERS = 2.
at_it_filter = filt.
***********************************************************************
CALL FUNCTION 'LVC_FILTER_APPLY'
EXPORTING
it_filter = at_it_filter
* IT_VALUE_UNIT =
* IT_GROUPLEVELS =
* I_FILTER_FLAGNAME =
* I_TABNAME =
* I_TABNAME_SLAVE =
* I_SLAVE =
IMPORTING
et_filter_index = t_filter_index2
et_grouplevels_filter = t_grouplevels_filter2
et_filter_index_inside = t_filter_index_inside2
TABLES
it_data = <ti>.
DESCRIBE TABLE <ti> LINES tot_ti.
DESCRIBE TABLE t_filter_index_inside2 LINES tot_filter.
***********************************************************************
IF t_filter_index_inside2 IS NOT INITIAL AND tot_filter < tot_ti.
CLEAR ttype[].
REFRESH ttype.
DATA: pw_tipo TYPE zdnos_ranges.
DATA: pt_tipo TYPE ztydnos_ranges.
READ TABLE at_it_filter ASSIGNING <fs_filter> WITH KEY fieldname = ap_label_type.
IF sy-subrc <= 2.
pw_tipo-sign = <fs_filter>-sign.
pw_tipo-option = <fs_filter>-option.
pw_tipo-low = <fs_filter>-low.
pw_tipo-high = <fs_filter>-high.
APPEND pw_tipo TO pt_tipo.
ENDIF.
LOOP AT <ti> INTO <wi>.
idt = sy-tabix.
ASSIGN (ap_field_key) TO <fs_key>.
ASSIGN (ap_field_type) TO <fs_type>.
wtype = <fs_type>.
COLLECT wtype INTO ttype.
ENDLOOP.
DELETE ttype WHERE LINE NOT IN pt_tipo.
LOOP AT <ti> INTO <wi>.
idt = sy-tabix.
CLEAR wlayout_node.
CLEAR wlayout.
ASSIGN (ap_field_key) TO <fs_key>.
ASSIGN (ap_field_type) TO <fs_type>.
wnodekey = <fs_key>.
READ TABLE t_filter_index_inside2 ASSIGNING <fs_index>
WITH KEY table_line = idt.
IF sy-subrc > 2. "si no esta en el filtro, son lo que deberian de ser eliminados
READ TABLE ttype ASSIGNING <fs_wtype> WITH KEY line = <fs_type>.
IF sy-subrc <= 2. " si es el tipo o nivel que escogio el usuario, siga
** new
CLEAR tnodekey.
REFRESH tnodekey.
CALL METHOD ao_tree->get_subtree
EXPORTING
i_node_key = wnodekey
IMPORTING
et_subtree_nodes = tnodekey.
LOOP AT tnodekey ASSIGNING <fs_ti_tnodekey>.
CALL METHOD ao_tree->get_outtab_line
EXPORTING
i_node_key = <fs_ti_tnodekey>
IMPORTING
e_outtab_line = <wi>
es_node_layout = wlayout_node
EXCEPTIONS
node_not_found = 1
OTHERS = 2.
MOVE-CORRESPONDING wlayout_node TO wlayout.
wlayout-hidden = 'X'.
wlayout-u_hidden = 'X'.
CALL METHOD ao_tree->change_node
EXPORTING
i_node_key = <fs_ti_tnodekey>
i_outtab_line = <wi>
is_node_layout = wlayout
EXCEPTIONS
node_not_found = 1
OTHERS = 2.
conta = conta + 1.
ENDLOOP.
ENDIF.
ENDIF.
ENDLOOP.
MESSAGE ID 'ZHRMSG' TYPE 'S' NUMBER 531 WITH conta.
CALL METHOD ao_tree->frontend_update.
ENDIF.
ENDMETHOD.
METHOD UNDO_FILTER.
DATA: wlayout TYPE lvc_s_lacn.
DATA: wnodekey TYPE lvc_nkey.
DATA: wlayout_node TYPE lvc_s_layn.
DATA: idt TYPE sytabix.
DATA: conta TYPE i.
FIELD-SYMBOLS: <ti> TYPE table.
ASSIGN ao_nodetab->* TO <ti>.
*************************************************
DATA: wnode_tab TYPE REF TO data.
FIELD-SYMBOLS: <wi> TYPE ANY.
CREATE DATA wnode_tab TYPE (ap_i_struct_name).
ASSIGN wnode_tab->* TO <wi>.
FIELD-SYMBOLS : <fs_key> TYPE ANY.
FIELD-SYMBOLS : <fs_type> TYPE ANY.
*************************************************
***************************************************
conta = 0.
LOOP AT <ti> INTO <wi>.
idt = sy-tabix.
CLEAR wlayout_node.
CLEAR wlayout.
ASSIGN (ap_field_key) TO <fs_key>.
ASSIGN (ap_field_type) TO <fs_type>.
wnodekey = <fs_key>.
CALL METHOD ao_tree->get_outtab_line
EXPORTING
i_node_key = wnodekey
IMPORTING
e_outtab_line = <wi>
es_node_layout = wlayout_node
EXCEPTIONS
node_not_found = 1
OTHERS = 2.
MOVE-CORRESPONDING wlayout_node TO wlayout.
wlayout-hidden = ''.
wlayout-u_hidden = 'X'.
CALL METHOD ao_tree->change_node
EXPORTING
i_node_key = wnodekey
i_outtab_line = <wi>
is_node_layout = wlayout
EXCEPTIONS
node_not_found = 1
OTHERS = 2.
conta = conta + 1.
ENDLOOP.
CALL METHOD ao_tree->frontend_update.
ENDMETHOD.
METHOD ADD_LEVEL.
DATA: sig_nivel TYPE numc2.
**************************************
sig_nivel = ap_nivel_graphics + 1.
ap_nivel_graphics = sig_nivel.
*
IF ap_nivel_graphics >= 0 AND ap_nivel_graphics <= 9.
MESSAGE ID 'ZHRMSG' TYPE 'S' NUMBER 684 WITH ap_nivel_graphics.
ELSE.
MESSAGE ID 'ZHRMSG' TYPE 'S' NUMBER 718 WITH lim_nivel.
ENDIF.
ENDMETHOD.
METHOD SUBTRACT_LEVEL.
DATA sig_nivel TYPE numc2.
sig_nivel = ap_nivel_graphics - 1.
ap_nivel_graphics = sig_nivel.
*
IF ap_nivel_graphics < 0.
ap_nivel_graphics = 0.
ENDIF.
*
IF ap_nivel_graphics >= 0 AND ap_nivel_graphics <= 9.
MESSAGE ID 'ZHRMSG' TYPE 'S' NUMBER 684 WITH ap_nivel_graphics.
ELSE.
MESSAGE ID 'ZHRMSG' TYPE 'S' NUMBER 718 WITH lim_nivel.
ENDIF.
ENDMETHOD.
METHOD CHANGE_GRAPHIC.
FIELD-SYMBOLS: <ti> TYPE table.
ASSIGN ao_nodetab->* TO <ti>.
**************************************
DATA: wa TYPE REF TO data.
FIELD-SYMBOLS: <wi> TYPE ANY.
CREATE DATA wa TYPE (ap_i_struct_name).
ASSIGN wa->* TO <wi>.
DATA: ta TYPE REF TO data.
FIELD-SYMBOLS: <ta2> TYPE table.
CREATE DATA ta TYPE TABLE OF (ap_i_struct_name).
ASSIGN ta->* TO <ta2>.
REFRESH <ta2>.
LOOP AT <ti> INTO <wi>.
APPEND <wi> TO <ta2>.
ENDLOOP.
ao_nodetab_graph02 = ta.
CLEAR ao_nodetab3. "dentro de build_graphics
CLEAR ao_nodetab_graph01.
CLEAR at_fieldcatalog_graphic01.
CLEAR at_columns01.
CLEAR at_rows01.
*
CALL METHOD zcl_alv_tree_mainp=>build_graphics
EXPORTING
p_field_graph = ap_field_graphics
p_nodetab2 = ao_nodetab_graph02
p_nivel = ap_nivel_graphics
p_num_button = '01'
p_collect = ap_collect_graphics.
ENDMETHOD.
METHOD BUTTON_ACTIVATED.
ap_button_activated = p_button.
ENDMETHOD.
METHOD SELECT_ALL.
FIELD-SYMBOLS: <te> TYPE table.
ASSIGN ao_nodetab->* TO <te>.
DATA: wnode_tabe TYPE REF TO data.
FIELD-SYMBOLS: <we> TYPE ANY.
CREATE DATA wnode_tabe TYPE (ap_i_struct_name).
ASSIGN wnode_tabe->* TO <we>.
DATA: wnode_tabf TYPE REF TO data.
FIELD-SYMBOLS: <wf> TYPE ANY.
CREATE DATA wnode_tabf TYPE (ap_i_struct_name).
ASSIGN wnode_tabf->* TO <wf>.
DATA: titem_layout TYPE lvc_t_layi,
witem_layout TYPE lvc_s_layi.
DATA: wnode_layout TYPE lvc_s_layn.
DATA: tchange_item TYPE lvc_t_laci,
wchange_item TYPE lvc_s_laci.
FIELD-SYMBOLS: <fs_caden> TYPE xfeld.
FIELD-SYMBOLS: <fs_caden2> TYPE lvc_nkey.
FIELD-SYMBOLS: <fs_caden3> TYPE seu_type.
DATA: tnkey TYPE lvc_t_nkey.
DATA: wnkey TYPE lvc_s_nkey.
LOOP AT <te> ASSIGNING <we>.
ASSIGN (ap_field_wecheck) TO <fs_caden>.
ASSIGN (ap_field_wetkey) TO <fs_caden2>.
ASSIGN (ap_field_wetype) TO <fs_caden3>.
IF <fs_caden3> = ap_nivel_graphics OR ap_nivel_graphics = 0.
IF <fs_caden> IS ASSIGNED.
wnkey-node_key = <fs_caden2>.
REFRESH titem_layout.
CLEAR wnode_layout.
CALL METHOD ao_tree->get_outtab_line
EXPORTING
i_node_key = wnkey-node_key
IMPORTING
e_outtab_line = <wf>
et_item_layout = titem_layout
es_node_layout = wnode_layout.
<fs_caden> = 'X'.
REFRESH tchange_item.
LOOP AT titem_layout INTO witem_layout.
CLEAR wchange_item.
MOVE-CORRESPONDING witem_layout TO wchange_item.
IF wnode_layout-hidden = ' '.
wchange_item-chosen = 'X'.
wchange_item-u_chosen = 'X'.
ELSE.
wchange_item-chosen = ' '.
wchange_item-u_chosen = 'X'.
<fs_caden> = ' '.
ENDIF.
APPEND wchange_item TO tchange_item.
ENDLOOP.
IF tchange_item[] IS NOT INITIAL.
CALL METHOD ao_tree->change_node
EXPORTING
i_node_key = wnkey-node_key
i_outtab_line = <we>
it_item_layout = tchange_item.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
CALL METHOD ao_tree->frontend_update.
ENDMETHOD.
METHOD UNSELECT_ALL.
FIELD-SYMBOLS: <te> TYPE table.
ASSIGN ao_nodetab->* TO <te>.
DATA: wnode_tabe TYPE REF TO data.
FIELD-SYMBOLS: <we> TYPE ANY.
CREATE DATA wnode_tabe TYPE (ap_i_struct_name).
ASSIGN wnode_tabe->* TO <we>.
DATA: wnode_tabf TYPE REF TO data.
FIELD-SYMBOLS: <wf> TYPE ANY.
CREATE DATA wnode_tabf TYPE (ap_i_struct_name).
ASSIGN wnode_tabf->* TO <wf>.
DATA: titem_layout TYPE lvc_t_layi,
witem_layout TYPE lvc_s_layi.
DATA: wnode_layout TYPE lvc_s_layn.
DATA: tchange_item TYPE lvc_t_laci,
wchange_item TYPE lvc_s_laci.
FIELD-SYMBOLS: <fs_caden> TYPE xfeld.
FIELD-SYMBOLS: <fs_caden2> TYPE lvc_nkey.
FIELD-SYMBOLS: <fs_caden3> TYPE seu_type.
DATA: tnkey TYPE lvc_t_nkey.
DATA: wnkey TYPE lvc_s_nkey.
LOOP AT <te> ASSIGNING <we>.
ASSIGN (ap_field_wecheck) TO <fs_caden>.
ASSIGN (ap_field_wetkey) TO <fs_caden2>.
ASSIGN (ap_field_wetype) TO <fs_caden3>.
IF <fs_caden3> = ap_nivel_graphics OR ap_nivel_graphics = 0.
IF <fs_caden> IS ASSIGNED.
wnkey-node_key = <fs_caden2>.
REFRESH titem_layout.
CLEAR wnode_layout.
CALL METHOD ao_tree->get_outtab_line
EXPORTING
i_node_key = wnkey-node_key
IMPORTING
e_outtab_line = <wf>
et_item_layout = titem_layout
es_node_layout = wnode_layout
EXCEPTIONS
node_not_found = 0.
<fs_caden> = ' '.
REFRESH tchange_item.
LOOP AT titem_layout INTO witem_layout.
CLEAR wchange_item.
MOVE-CORRESPONDING witem_layout TO wchange_item.
IF wnode_layout-hidden = ' '.
wchange_item-chosen = ' '.
wchange_item-u_chosen = 'X'.
ENDIF.
APPEND wchange_item TO tchange_item.
ENDLOOP.
IF tchange_item[] IS NOT INITIAL.
CALL METHOD ao_tree->change_node
EXPORTING
i_node_key = wnkey-node_key
i_outtab_line = <we>
it_item_layout = tchange_item.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
CALL METHOD ao_tree->frontend_update.
ENDMETHOD.
METHOD MARK_FATHER.
FIELD-SYMBOLS: <te> TYPE table.
ASSIGN ao_nodetab->* TO <te>.
DATA: wnode_tabe TYPE REF TO data.
FIELD-SYMBOLS: <we> TYPE ANY.
CREATE DATA wnode_tabe TYPE (ap_i_struct_name).
ASSIGN wnode_tabe->* TO <we>.
DATA: wnode_tabf TYPE REF TO data.
FIELD-SYMBOLS: <wf> TYPE ANY.
CREATE DATA wnode_tabf TYPE (ap_i_struct_name).
ASSIGN wnode_tabf->* TO <wf>.
DATA: titem_layout TYPE lvc_t_layi,
witem_layout TYPE lvc_s_layi.
DATA: wnode_layout TYPE lvc_s_layn.
DATA: tchange_item TYPE lvc_t_laci,
wchange_item TYPE lvc_s_laci.
FIELD-SYMBOLS: <fs_caden> TYPE xfeld.
FIELD-SYMBOLS: <fs_caden2> TYPE lvc_nkey.
DATA: tnkey TYPE lvc_t_nkey.
DATA: wnkey TYPE lvc_s_nkey.
CALL METHOD ao_tree->get_subtree
EXPORTING
i_node_key = p_key
IMPORTING
et_subtree_nodes = tnkey.
DATA: cadenax TYPE string.
LOOP AT tnkey INTO wnkey.
REFRESH titem_layout.
CLEAR wnode_layout.
CALL METHOD ao_tree->get_outtab_line
EXPORTING
i_node_key = wnkey-node_key
IMPORTING
e_outtab_line = <wf>
et_item_layout = titem_layout
es_node_layout = wnode_layout.
LOOP AT <te> ASSIGNING <we>.
ASSIGN (ap_field_wecheck) TO <fs_caden>.
ASSIGN (ap_field_wetkey) TO <fs_caden2>.
IF <fs_caden2> = wnkey-node_key.
<fs_caden> = 'X'.
EXIT.
ENDIF.
ENDLOOP.
REFRESH tchange_item.
LOOP AT titem_layout INTO witem_layout.
CLEAR wchange_item.
MOVE-CORRESPONDING witem_layout TO wchange_item.
IF wnode_layout-hidden = ' '.
wchange_item-chosen = 'X'.
wchange_item-u_chosen = 'X'.
ELSE.
wchange_item-chosen = ' '.
wchange_item-u_chosen = 'X'.
<fs_caden> = ' '.
ENDIF.
APPEND wchange_item TO tchange_item.
ENDLOOP.
IF tchange_item[] IS NOT INITIAL.
CALL METHOD ao_tree->change_node
EXPORTING
i_node_key = wnkey-node_key
i_outtab_line = <we>
it_item_layout = tchange_item.
ENDIF.
ENDLOOP.
CALL METHOD ao_tree->frontend_update.
ENDMETHOD.
METHOD UNMARK_FATHER.
FIELD-SYMBOLS: <te> TYPE table.
ASSIGN ao_nodetab->* TO <te>.
DATA: wnode_tabe TYPE REF TO data.
FIELD-SYMBOLS: <we> TYPE ANY.
CREATE DATA wnode_tabe TYPE (ap_i_struct_name).
ASSIGN wnode_tabe->* TO <we>.
DATA: wnode_tabf TYPE REF TO data.
FIELD-SYMBOLS: <wf> TYPE ANY.
CREATE DATA wnode_tabf TYPE (ap_i_struct_name).
ASSIGN wnode_tabf->* TO <wf>.
DATA: titem_layout TYPE lvc_t_layi,
witem_layout TYPE lvc_s_layi.
DATA: wnode_layout TYPE lvc_s_layn.
DATA: tchange_item TYPE lvc_t_laci,
wchange_item TYPE lvc_s_laci.
FIELD-SYMBOLS: <fs_caden> TYPE xfeld.
FIELD-SYMBOLS: <fs_caden2> TYPE lvc_nkey.
DATA: tnkey TYPE lvc_t_nkey.
DATA: wnkey TYPE lvc_s_nkey.
CALL METHOD ao_tree->get_subtree
EXPORTING
i_node_key = p_key
IMPORTING
et_subtree_nodes = tnkey.
LOOP AT tnkey INTO wnkey.
REFRESH titem_layout.
CLEAR wnode_layout.
CALL METHOD ao_tree->get_outtab_line
EXPORTING
i_node_key = wnkey-node_key
IMPORTING
e_outtab_line = <wf>
et_item_layout = titem_layout
es_node_layout = wnode_layout.
LOOP AT <te> ASSIGNING <we>.
ASSIGN (ap_field_wecheck) TO <fs_caden>.
ASSIGN (ap_field_wetkey) TO <fs_caden2>.
IF <fs_caden2> = wnkey-node_key.
<fs_caden> = ' '.
EXIT.
ENDIF.
ENDLOOP.
REFRESH tchange_item.
LOOP AT titem_layout INTO witem_layout.
CLEAR wchange_item.
MOVE-CORRESPONDING witem_layout TO wchange_item.
IF wnode_layout-hidden = ' '.
wchange_item-chosen = ' '.
wchange_item-u_chosen = 'X'.
ENDIF.
APPEND wchange_item TO tchange_item.
ENDLOOP.
IF tchange_item[] IS NOT INITIAL.
CALL METHOD ao_tree->change_node
EXPORTING
i_node_key = wnkey-node_key
i_outtab_line = <we>
it_item_layout = tchange_item.
ENDIF.
ENDLOOP.
CALL METHOD ao_tree->frontend_update.
ENDMETHOD.
METHOD IS_HIDDEN.
FIELD-SYMBOLS: <te> TYPE table.
ASSIGN ao_nodetab->* TO <te>.
DATA: titem_layout TYPE lvc_t_layi,
witem_layout TYPE lvc_s_layi.
DATA: wnode_layout TYPE lvc_s_layn.
DATA: tchange_item TYPE lvc_t_laci,
wchange_item TYPE lvc_s_laci.
FIELD-SYMBOLS: <fs_caden> TYPE xfeld.
FIELD-SYMBOLS: <fs_caden2> TYPE lvc_nkey.
DATA: tnkey TYPE lvc_t_nkey.
DATA: wnkey TYPE lvc_s_nkey.
CLEAR wnkey.
wnkey-node_key = p_key.
REFRESH titem_layout.
CLEAR wnode_layout.
CALL METHOD ao_tree->get_outtab_line
EXPORTING
i_node_key = wnkey-node_key
IMPORTING
et_item_layout = titem_layout
es_node_layout = wnode_layout
EXCEPTIONS
node_not_found = 0.
IF wnode_layout-hidden = 'X'.
p_answer = 'X'.
ELSE.
p_answer = ' '.
ENDIF.
ENDMETHOD.
method update_field_dynpro.
DATA: lt_dynpf TYPE STANDARD TABLE OF dynpread.
DATA: lw_dynpf LIKE LINE OF lt_dynpf.
CLEAR: lt_dynpf, lw_dynpf.
lw_dynpf-fieldname = p_nombre_campo.
lw_dynpf-stepl = p_linea.
lw_dynpf-fieldvalue = p_valor.
APPEND lw_dynpf TO lt_dynpf.
CALL FUNCTION 'DYNP_UPDATE_FIELDS'
EXPORTING
dyname = p_nombre_programa
dynumb = p_nombre_dynpro
request = 'A'
TABLES
dynpfields = lt_dynpf
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
undefind_error = 7
OTHERS = 8.
endmethod.
METHOD FRAG_PATTERN.
DATA: lt_tabla_i TYPE ztydatafile.
FIELD-SYMBOLS: <lw_tabla_i> TYPE zwdatafile.
DATA: lt_trama_g TYPE ztydatafile.
FIELD-SYMBOLS: <lw_trama_r> TYPE zwdatafile.
DATA: delimitador TYPE c VALUE ','.
***********************************************
*dynamic structure
DATA: w_estructura TYPE REF TO data.
FIELD-SYMBOLS: <wa> TYPE ANY.
FIELD-SYMBOLS <wa2> TYPE ANY.
CREATE DATA w_estructura TYPE (ps_nombre_estructura).
ASSIGN w_estructura->* TO <wa>.
***********************************************
*dynamic table
DATA: t_tabla TYPE REF TO data.
FIELD-SYMBOLS: <ta> TYPE table.
FIELD-SYMBOLS <ta2> TYPE table.
CREATE DATA t_tabla TYPE TABLE OF (ps_nombre_estructura).
ASSIGN t_tabla->* TO <ta>.
***********************************************
* assign the parameter for the object table
FIELD-SYMBOLS: <ka> TYPE table.
CREATE DATA pt_tabla_o TYPE TABLE OF (ps_nombre_estructura).
ASSIGN pt_tabla_o->* TO <ka>.
*************************************************
* process
lt_tabla_i = pt_tabla_i.
IF ps_separador <> space.
delimitador = ps_separador.
ENDIF.
IF lt_tabla_i IS NOT INITIAL.
REFRESH lt_trama_g.
REFRESH lt_trama_o.
** la estructura debe tener el mismo número de campos que son fragmentados
LOOP AT lt_tabla_i ASSIGNING <lw_tabla_i>.
SPLIT <lw_tabla_i> AT delimitador INTO TABLE lt_trama_g.
INSERT LINES OF lt_trama_g INTO TABLE lt_trama_o.
LOOP AT lt_trama_g ASSIGNING <lw_trama_r>.
ASSIGN COMPONENT sy-tabix OF STRUCTURE <wa> TO <wa2>.
<wa2> = <lw_trama_r>.
ENDLOOP.
APPEND <wa> TO <ta>.
CLEAR <wa2>.
ENDLOOP.
************************************************
* assign the parameter to the object table
MOVE <ta> TO <ka>.
** Nota: cuando se llame a este metodo, y se quiera referenciar este objeto
** en un programa o reporte, haga lo siguiente:
** FIELD-SYMBOLS: <fs> TYPE table.
** assign param_pt_table_i->* TO <fs>.
ELSE.
sy-msgv1 = 'No se han encontrado datos'.
sy-msgid = 'ZFI'.
CALL METHOD zcl_alv_tree_mainp=>display
EXPORTING
ps_msgty = 'S'.
ENDIF.
** 001
ENDMETHOD.
METHOD DEFINE_MASK.
DATA: conta TYPE i.
DATA: p2_tabla_i TYPE ztydatafile.
FIELD-SYMBOLS: <fs_p2_tabla_i> TYPE zwdatafile.
DATA: numreg TYPE i.
DATA: mascara TYPE char255.
DATA: wtrama TYPE zwtrama.
DATA: ttrama TYPE zttrama.
DATA: wdatos_arch TYPE char2048.
CLEAR p2_tabla_i.
REFRESH p2_tabla_i[].
CALL METHOD zcl_alv_tree_mainp=>frag_pattern
EXPORTING
ps_separador = ','
ps_nombre_estructura = 'ZWDATAFILE'
pt_tabla_i = p_tabla_i
IMPORTING
lt_trama_o = p2_tabla_i.
DESCRIBE TABLE p2_tabla_i LINES numreg.
LOOP AT p2_tabla_i ASSIGNING <fs_p2_tabla_i>.
wtrama-contenido = 'X'.
wtrama-columna = <fs_p2_tabla_i>-line.
APPEND wtrama TO ttrama.
ENDLOOP.
** envio la tabla interna que será tratada como una estructura en este método.
CALL METHOD zcl_alv_tree_mainp=>fixed_frame_columns
EXPORTING
p_trama = ttrama
IMPORTING
pw_info_delimitada = wdatos_arch.
p_mascara = wdatos_arch.
ENDMETHOD.
METHOD FIXED_FRAME_COLUMNS.
** DESCRIPCION : ARMA UNA TRAMA Y COLOCA LA INFORMACION EN COLUMNAS ESPECIFICADAS.
DATA: lt_campos_tabla TYPE zttrama,
ls_resultado TYPE char2048,
ls_valor TYPE string,
tamano TYPE i,
acum_pos TYPE i.
FIELD-SYMBOLS: <l_to> TYPE ANY.
FIELD-SYMBOLS: <lw_campos_tabla> LIKE LINE OF lt_campos_tabla.
CLEAR ls_resultado.
LOOP AT p_trama ASSIGNING <lw_campos_tabla>.
acum_pos = <lw_campos_tabla>-columna.
ls_valor = <lw_campos_tabla>-contenido.
CONDENSE ls_valor.
tamano = STRLEN( ls_valor ).
IF tamano > 0.
ls_resultado+acum_pos(tamano) = ls_valor.
ENDIF.
ENDLOOP.
MOVE ls_resultado TO pw_info_delimitada.
ENDMETHOD.
method DISPLAY.
DATA: LS_MSGTY TYPE SYMSGTY.
* Permite cambiar el Tipo de Mensaje...
IF NOT PS_MSGTY IS INITIAL.
LS_MSGTY = PS_MSGTY.
ELSE.
LS_MSGTY = SY-MSGTY.
ENDIF.
* Diplay Message...
MESSAGE ID SY-MSGID TYPE LS_MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endmethod.
No hay comentarios:
Publicar un comentario