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

ALV Tree problem!!

sonu_p2
Active Participant
0 Likes
802

Hello Gurus!!

Could you all please help me out to know about the function call method tree1->update_calculations.

The thing is I have already displayed an ALV Grid . But I want to display number of hours in total.

I have debugged the code in detail.

But I am not getting which parameter should I pass before while creating the tree???

Points will be rewarded for helpful answers....

Thanks in advance

Sachin

4 REPLIES 4
Read only

uwe_schieferstein
Active Contributor
0 Likes
632

Hello Sachin

The hierarchy of the ALV tree defines how column values are accumulated. In order to explain this I have copied sample report BCALV_TREE_DEMO and added to following coding:

<b>(1) Parameter for adding ROOT node added</b>

...

[code]DATA: gt_sflight TYPE sflight OCCURS 0, "Output-Table

gt_fieldcatalog TYPE lvc_t_fcat, "Fieldcatalog

ok_code LIKE sy-ucomm. "OK-Code

PARAMETERS:

p_root AS CHECKBOX. " $ADDED

START-OF-SELECTION.

...[/code]

<b>

(2) Add ROOT node if checkbox parameter p_root is marked</b>

[code]&----


*& Form create_hierarchy

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM create_hierarchy.

...

  • add data to tree

DATA: l_carrid_key TYPE lvc_nkey,

l_connid_key TYPE lvc_nkey,

l_last_key TYPE lvc_nkey.

DATA: l_root_key TYPE lvc_nkey. " $ADDED

IF ( p_root = 'X' ).

CLEAR: ls_sflight.

PERFORM add_root_node USING ls_sflight

''

CHANGING l_root_key.

ELSE.

l_root_key = ''.

ENDIF. " $ADDED

LOOP AT lt_sflight INTO ls_sflight.

ON CHANGE OF ls_sflight-carrid.

PERFORM add_carrid_line USING ls_sflight

l_root_key " ''

CHANGING l_carrid_key.

ENDON.

ON CHANGE OF ls_sflight-connid.

PERFORM add_connid_line USING ls_sflight

l_carrid_key

CHANGING l_connid_key.

ENDON.

PERFORM add_complete_line USING ls_sflight

l_connid_key

CHANGING l_last_key.

ENDLOOP.

...

ENDFORM. " create_hierarchy[/code]

<b>(3) Routine for adding ROOT node</b>

[code]&----


*& Form add_root_node

&----


  • add root node

----


  • -->P_LS_SFLIGHT sflight

  • -->P_RELEATKEY relatkey

  • <-->p_node_key new node-key

----


FORM add_root_node USING ps_sflight TYPE sflight

p_relat_key TYPE lvc_nkey

CHANGING p_node_key TYPE lvc_nkey.

DATA: l_node_text TYPE lvc_value,

ls_sflight TYPE sflight.

  • set item-layout

DATA: lt_item_layout TYPE lvc_t_layi,

ls_item_layout TYPE lvc_s_layi.

ls_item_layout-t_image = '@3P@'.

ls_item_layout-fieldname = tree1->c_hierarchy_column_name.

ls_item_layout-style =

cl_gui_column_tree=>style_intensifd_critical.

APPEND ls_item_layout TO lt_item_layout.

  • add node

l_node_text = 'Root = All Airlines'.

DATA: ls_node TYPE lvc_s_layn.

ls_node-n_image = space.

ls_node-exp_image = space.

CALL METHOD tree1->add_node

EXPORTING

i_relat_node_key = p_relat_key

i_relationship = cl_gui_column_tree=>relat_last_child

i_node_text = l_node_text

is_outtab_line = ls_sflight

is_node_layout = ls_node

it_item_layout = lt_item_layout

IMPORTING

e_new_node_key = p_node_key.

ENDFORM. " add_root_node[/code]

If you do not mark the checkbox (p_root) then the highest level of value aggregation are the airlines.

If you mark the checkbox (p_root) then the highest level of value aggregation is for all airlines together.

Thus, the hierarchy defines how the values are accumulated. Method <b>tree1->update_calcuations</b> has no parameters whatsoever to influence the accumlation, it simply DOES the accumulation.

Regards

Uwe

Read only

0 Likes
632

Hello Uwe,

The code is given below :-

PROGRAM ZSACH_TREE1.

DATA: g_alv_tree TYPE REF TO cl_gui_alv_tree,

g_custom_container TYPE REF TO cl_gui_custom_container.

DATA: g_emp TYPE zpm_emp_det OCCURS 0, "Output-Table

ok_code LIKE sy-ucomm,

save_ok LIKE sy-ucomm, "OK-Code

g_max TYPE i VALUE 255.

*&----


*

*& Module STATUS_0100 OUTPUT

*&----


*

  • text

*----


*

MODULE STATUS_0100 OUTPUT.

  • SET PF-STATUS 'xxxxxxxx'.

  • SET TITLEBAR 'xxx'.

IF g_alv_tree IS INITIAL.

PERFORM init_tree.

CALL METHOD cl_gui_cfw=>flush

EXCEPTIONS

cntl_system_error = 1

cntl_error = 2.

IF sy-subrc NE 0.

CALL FUNCTION 'POPUP_TO_INFORM'

EXPORTING

titel = 'Automation Queue failure'(801)

txt1 = 'Internal error:'(802)

txt2 = 'A method in the automation queue'(803)

txt3 = 'caused a failure.'(804).

ENDIF.

ENDIF.

ENDMODULE. " STATUS_0100 OUTPUT

*&----


*

*& Form init_tree

*&----


*

  • text

*----


*

  • --> p1 text

  • <-- p2 text

*----


*

FORM init_tree .

DATA: l_tree_container_name(30) TYPE c.

l_tree_container_name = 'SS_TREE'.

CREATE OBJECT g_custom_container

EXPORTING

  • PARENT =

container_name = l_tree_container_name

  • STYLE =

  • LIFETIME = lifetime_default

  • REPID =

  • DYNNR =

  • NO_AUTODEF_PROGID_DYNNR =

EXCEPTIONS

cntl_error = 1

cntl_system_error = 2

create_error = 3

lifetime_error = 4

lifetime_dynpro_dynpro_link = 5

  • others = 6

.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

CREATE OBJECT g_alv_tree

EXPORTING

  • LIFETIME =

parent = g_custom_container

  • SHELLSTYLE =

node_selection_mode = cl_gui_column_tree=>node_sel_mode_single

  • HIDE_SELECTION =

item_selection = 'X'

no_toolbar = ''

no_html_header = 'X'

  • I_PRINT =

  • I_FCAT_COMPLETE =

  • I_MODEL_MODE =

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

  • others = 8

.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

DATA l_hierarchy_header TYPE treev_hhdr.

PERFORM build_hierarchy_header CHANGING l_hierarchy_header.

CALL METHOD g_alv_tree->set_table_for_first_display

EXPORTING

i_structure_name = 'ZPM_EMP_DET'

  • IS_VARIANT =

  • I_SAVE =

  • I_DEFAULT = 'X'

is_hierarchy_header = l_hierarchy_header

  • IS_EXCEPTION_FIELD =

  • IT_SPECIAL_GROUPS =

  • IT_LIST_COMMENTARY =

  • I_LOGO =

  • I_BACKGROUND_ID =

  • IT_TOOLBAR_EXCLUDING =

  • IT_EXCEPT_QINFO =

CHANGING

it_outtab = g_emp

  • IT_FILTER =

  • IT_FIELDCATALOG =

.

PERFORM create_hierarchy.

CALL METHOD g_alv_tree->update_calculations.



CALL METHOD g_alv_tree->frontend_update.

ENDFORM. " init_tree

*&----


*

*& Form build_hierarchy_header

*&----


*

  • text

*----


*

  • <--P_L_HIERARCHY_HEADER text

*----


*

FORM build_hierarchy_header CHANGING p_hierarchy_header TYPE treev_hhdr.

p_hierarchy_header-heading = 'project name / Emp_ID '(300).

p_hierarchy_header-tooltip = 'Project Billing Details'(400).

p_hierarchy_header-width = 30.

p_hierarchy_header-width_pix = ' '.

ENDFORM. " build_hierarchy_header

*&----


*

*& Form create_hierarchy

*&----


*

  • text

*----


*

  • --> p1 text

  • <-- p2 text

*----


*

FORM create_hierarchy .

DATA: ls_emp TYPE zpm_emp_det,

lt_emp TYPE zpm_emp_det OCCURS 0,

l_projectname TYPE zpm_emp_item_det-project_name,

l_projectname_last TYPE zpm_emp_item_det-project_name,

l_empid TYPE zpm_emp_item_det-empid,

l_empid_last TYPE zpm_emp_item_det-empid.

DATA: l_projectname_key TYPE lvc_nkey,

l_ROLE_OF_EMP_key TYPE lvc_nkey,

l_last_key TYPE lvc_nkey.

DATA: lt_project TYPE zpm_emp_det OCCURS 0,

ls_project TYPE zpm_emp_det.

DATA: lt_project1 TYPE zpm_emp_det OCCURS 0,

ls_project1 TYPE zpm_emp_det.

  • §4a. Select data

SELECT * FROM zpm_project_det INTO CORRESPONDING FIELDS OF TABLE lt_project WHERE zpm_project_det~projectid = '0000000002'.

LOOP AT lt_project INTO ls_project.

ENDLOOP.

SELECT * FROM zpm_emp_item_det INTO CORRESPONDING FIELDS OF TABLE lt_project WHERE zpm_emp_item_det~project_name = ls_project-project_name.

SELECT employee_type empid FROM zpm_emp_head_det

INTO CORRESPONDING FIELDS OF TABLE lt_project1 FOR ALL ENTRIES IN lt_project

WHERE zpm_emp_head_det~empid = lt_project-empid.

LOOP AT lt_project1 INTO ls_project1.

MODIFY lt_project FROM ls_project1 TRANSPORTING employee_type WHERE empid = ls_project1-empid.

ENDLOOP.

REFRESH lt_project1.

SELECT employee_name empid DESIGNATION FROM zpm_emp_head_det INTO CORRESPONDING FIELDS OF TABLE lt_project1 FOR ALL ENTRIES IN lt_project

WHERE zpm_emp_head_det~empid = lt_project-empid.

LOOP AT lt_project1 INTO ls_project1.

MODIFY lt_project FROM ls_project1 TRANSPORTING employee_name DESIGNATION WHERE empid = ls_project1-empid.

ENDLOOP.

SORT lt_project BY project_name employee_type empid.

LOOP AT lt_project INTO ls_project.

ON CHANGE OF ls_project-project_name.

PERFORM add_projectname_line USING ls_project

''

CHANGING l_projectname_key.

ENDON.

ON CHANGE OF ls_project-ROLE_OF_EMP.

PERFORM add_employee_type_line USING ls_project

l_projectname_key

CHANGING l_ROLE_OF_EMP_key.

ENDON.

PERFORM add_complete_line USING ls_project

l_ROLE_OF_EMP_key

CHANGING l_last_key.

ENDLOOP.

ENDFORM. " create_hierarchy

*&----


*

*& Form add_projectname_line

*&----


*

  • text

*----


*

  • -->P_LS_PROJECT text

  • -->P_0399 text

  • <--P_L_PROJECTNAME_KEY text

*----


*

FORM add_projectname_line USING ps_emp TYPE zpm_emp_det

p_relat_key TYPE lvc_nkey

CHANGING p_node_key TYPE lvc_nkey.

DATA: l_node_text TYPE lvc_value,

ls_emp1 TYPE zpm_emp_det.

l_node_text = ps_emp-project_name.

CALL METHOD g_alv_tree->add_node

EXPORTING

i_relat_node_key = p_relat_key

i_relationship = cl_gui_column_tree=>relat_last_child

is_outtab_line = ls_emp1

  • IS_NODE_LAYOUT =

  • IT_ITEM_LAYOUT =

i_node_text = l_node_text

IMPORTING

e_new_node_key = p_node_key

  • EXCEPTIONS

  • RELAT_NODE_NOT_FOUND = 1

  • NODE_NOT_FOUND = 2

  • others = 3

.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDFORM. " add_projectname_line

*&----


*

*& Form add_employee_type_line

*&----


*

  • text

*----


*

  • -->P_LS_PROJECT text

  • -->P_L_PROJECTNAME_KEY text

  • <--P_L_ROLE_OF_EMP_KEY text

*----


*

FORM add_employee_type_line USING ps_emp TYPE zpm_emp_det

p_relat_key TYPE lvc_nkey

CHANGING p_node_key TYPE lvc_nkey.

DATA: l_node_text TYPE lvc_value,

ls_emp1 TYPE zpm_emp_det.

l_node_text = ps_emp-ROLE_OF_EMP.

CALL METHOD g_alv_tree->add_node

EXPORTING

i_relat_node_key = p_relat_key

i_relationship = cl_gui_column_tree=>relat_last_child

is_outtab_line = ls_emp1

  • IS_NODE_LAYOUT =

  • IT_ITEM_LAYOUT =

i_node_text = l_node_text

IMPORTING

e_new_node_key = p_node_key

  • EXCEPTIONS

  • RELAT_NODE_NOT_FOUND = 1

  • NODE_NOT_FOUND = 2

  • others = 3

.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDFORM. " add_employee_type_line

*&----


*

*& Form add_complete_line

*&----


*

  • text

*----


*

  • -->P_LS_PROJECT text

  • -->P_L_ROLE_OF_EMP_KEY text

  • <--P_L_LAST_KEY text

*----


*

FORM add_complete_line USING ps_emp TYPE zpm_emp_det

p_relat_key TYPE lvc_nkey

CHANGING p_node_key TYPE lvc_nkey.

DATA: l_node_text TYPE lvc_value,

ls_emp1 TYPE zpm_emp_det.

l_node_text = ps_emp-empid.

CALL METHOD g_alv_tree->add_node

EXPORTING

i_relat_node_key = p_relat_key

i_relationship = cl_gui_column_tree=>relat_last_child

is_outtab_line = ps_emp

  • IS_NODE_LAYOUT =

  • IT_ITEM_LAYOUT =

  • I_NODE_TEXT = l_node_text

IMPORTING

e_new_node_key = p_node_key

  • EXCEPTIONS

  • RELAT_NODE_NOT_FOUND = 1

  • NODE_NOT_FOUND = 2

  • others = 3

.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

ENDFORM. " add_complete_line

I have used the function in the above code

tree1->update_calcuations

.

But its displaying the

sum

as

0

.

Kindly explain why is it so?????

Thanks in advance,

Sachin

Read only

Former Member
0 Likes
632

hi

good

go to se38 put BCALV* and press F4,you ll find lots of program related to ALV TREE,test them and use them as per your requirements.

thanks

mrutyun^

Read only

sonu_p2
Active Participant
0 Likes
632

by using field catalog we can solve this problem

eg...

FORM build_fieldcatalog .

CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'

EXPORTING

I_STRUCTURE_NAME = 'ZSACH_PM'

CHANGING

CT_FIELDCAT = gt_fieldcatalog.

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

sort gt_fieldcatalog by scrtext_l.

data: ls_fieldcatalog type lvc_s_fcat.

loop at gt_fieldcatalog into ls_fieldcatalog.

case ls_fieldcatalog-fieldname.

when 'RATE_PER_HOUR'.

ls_fieldcatalog-do_sum = 'X'.

endcase.

modify gt_fieldcatalog from ls_fieldcatalog.

endloop.

ENDFORM. " build_fieldcatalog