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
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
| User | Count |
|---|---|
| 6 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |