..3 Программа печати

Создайте отчет Z_ORGUNIT_HIERARCHY и вставьте в него этот код :

REPORT z_orgunit_hierarchy .


TYPE-POOLS:

abap .

TYPES:

BEGIN OF ty_s_alvtree_outtab ,

objid TYPE objec-objid ,

stras TYPE p1028-stras ,

ort01 TYPE p1028-ort01 ,

pstlz TYPE p1028-pstlz ,

land1 TYPE p1028-land1 ,

END OF ty_s_alvtree_outtab ,

ty_t_alvtree_outtab TYPE STANDARD TABLE OF ty_s_alvtree_outtab .

DATA:

gv_plvar TYPE objec-plvar ,

gr_alvtree TYPE REF TO cl_salv_tree ,

gt_alvtree_outtab TYPE ty_t_alvtree_outtab .


* fill the context

PERFORM fill_context .


* call the form

CALL FUNCTION 'ZXLWB_CALLFORM'

EXPORTING

iv_formname = 'ORGUNIT_HIERARCHY'

iv_context_ref = gr_alvtree

EXCEPTIONS

process_terminated = 1

OTHERS = 2.

IF sy-subrc NE 0 .

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 .

EXIT .

ENDIF .


*&---------------------------------------------------------------------*

*& Form fill_context

*&---------------------------------------------------------------------*

FORM fill_context .


CALL FUNCTION 'RH_GET_PLVAR'

IMPORTING

plvar = gv_plvar

EXCEPTIONS

OTHERS = 1.

IF sy-subrc NE 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

EXIT .

ENDIF .


* create tree

TRY .

cl_salv_tree=>factory( EXPORTING r_container = cl_gui_container=>default_screen

IMPORTING r_salv_tree = gr_alvtree

CHANGING t_table = gt_alvtree_outtab ) .

CATCH cx_salv_no_new_data_allowed cx_salv_error .

EXIT .

ENDTRY .


* add nodes to the tree

PERFORM fill_context_add_nodes

USING 'O' '00000001' space

CHANGING gr_alvtree .


* modify fieldcatalog (if required)

DATA:

lr_columns TYPE REF TO cl_salv_columns_tree ,

lr_column TYPE REF TO cl_salv_column ,

lt_column_ref TYPE salv_t_column_ref .

FIELD-SYMBOLS:

<column_ref> TYPE salv_s_column_ref .


lr_columns = gr_alvtree->get_columns( ) .

lr_columns->set_optimize( abap_on ) .

lt_column_ref = lr_columns->get( ) .

LOOP AT lt_column_ref ASSIGNING <column_ref> .

CASE <column_ref>-columnname .

WHEN 'OBJID' . <column_ref>-r_column->set_output_length( 15 ) .

WHEN 'LAND1' . <column_ref>-r_column->set_output_length( 15 ) .

ENDCASE .

ENDLOOP .


gr_alvtree->display( ) .


ENDFORM . "fill_context


*&---------------------------------------------------------------------*

*& Form add_nodes

*&---------------------------------------------------------------------*

FORM fill_context_add_nodes

USING pv_parent_otype TYPE any

pv_parent_objid TYPE any

pv_parent_nkey TYPE any

CHANGING

cr_alvtree TYPE REF TO cl_salv_tree .

DATA:

ls_result_struc TYPE struc ,

lt_result_struc TYPE STANDARD TABLE OF struc ,

ls_p1028 TYPE p1028 ,

lt_p1028 TYPE STANDARD TABLE OF p1028 .

DATA:

ls_salvtree_outtab TYPE ty_s_alvtree_outtab ,

lv_ntext TYPE lvc_value ,

lv_nkey TYPE lvc_nkey .


CALL FUNCTION 'RH_STRUC_GET'

EXPORTING

act_otype = pv_parent_otype

act_objid = pv_parent_objid

act_wegid = 'O-O_DOWN'

act_plvar = gv_plvar

act_begda = sy-datum

act_endda = sy-datum

act_tdepth = 2

act_tflag = abap_off

act_vflag = abap_off

authority_check = abap_off

TABLES

result_struc = lt_result_struc

EXCEPTIONS

OTHERS = 0.


DELETE lt_result_struc WHERE objid EQ pv_parent_objid .

CHECK lt_result_struc[] IS NOT INITIAL .


LOOP AT lt_result_struc INTO ls_result_struc .

CLEAR ls_salvtree_outtab .

CLEAR lv_ntext .

CLEAR lt_p1028 .


*---->> node text (org.unit name)

SELECT SINGLE orgtx

INTO lv_ntext

FROM t527x

WHERE sprsl EQ 'E'

AND orgeh EQ ls_result_struc-objid

AND begda LE sy-datum

AND endda GE sy-datum .

CHECK lv_ntext IS NOT INITIAL .


*---->> address fields

ls_salvtree_outtab-objid = ls_result_struc-objid .

CALL FUNCTION 'RH_GET_ADDRESS'

EXPORTING

plvar = gv_plvar

otype = 'O'

objid = ls_salvtree_outtab-objid

begda = sy-datum

endda = sy-datum

TABLES

address = lt_p1028.

READ TABLE lt_p1028 INTO ls_p1028 INDEX 1 .

IF sy-subrc EQ 0 .

MOVE-CORRESPONDING ls_p1028 TO ls_salvtree_outtab .

ENDIF .


*---->> add current node to the tree

TRY .

DATA:

lr_nodes TYPE REF TO cl_salv_nodes ,

lr_node TYPE REF TO cl_salv_node ,

lr_item TYPE REF TO cl_salv_item .

lr_nodes = cr_alvtree->get_nodes( ) .

lr_node = lr_nodes->add_node( related_node = pv_parent_nkey

data_row = ls_salvtree_outtab

relationship = cl_gui_column_tree=>relat_last_child

text = lv_ntext ) .

lv_nkey = lr_node->get_key( ) .

CATCH cx_salv_msg .

ENDTRY .


*---->> recursively adding child nodes

PERFORM fill_context_add_nodes

USING ls_result_struc-otype

ls_result_struc-objid

lv_nkey

CHANGING

cr_alvtree .

ENDLOOP .


ENDFORM . "fill_context_add_nodes

Результат работы программы: