‎2007 Apr 30 8:36 AM
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
‎2007 Apr 30 9:46 PM
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
‎2007 May 02 6:29 AM
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.
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
.sum
as0
.Kindly explain why is it so?????
Thanks in advance,
Sachin
‎2007 May 02 7:16 AM
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^
‎2007 May 08 10:59 AM
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