该程序是初版,有一些BUG请见谅
主程序
*&---------------------------------------------------------------------* *& Report ZTYFIR00940 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* REPORT ztyfir00950. INCLUDE ZTYFIR00950_TOP. INCLUDE ZTYFIR00950_PBO . INCLUDE ZTYFIR00950_PAI . INCLUDE ZTYFIR00950_FRM. AT SELECTION-SCREEN. PERFORM frm_authority_check. START-OF-SELECTION. CALL SCREEN 0100.
TOP
1 *&---------------------------------------------------------------------* 2 *& 包含 ZTYFIR00950_TOP 3 *&---------------------------------------------------------------------* 4 TABLES:proj,prps. 5 6 TYPES:BEGIN OF ty_data, 7 posid TYPE prps-posid,"项目/WBS 8 post1 TYPE prps-post1,"项目/WBS名称 9 stufe TYPE prps-stufe,"层级 10 prart TYPE prps-prart,"项目类型 11 pratx TYPE tcj1t-pratx,"项目类型描述 12 rtcur TYPE char3,"币种 默认RMB 13 objnr TYPE prps-objnr,"对象编号 14 pspnr TYPE proj-pspnr,"项目内码 15 pspnr1 TYPE prps-pspnr,"WBS内码 16 ys_sum TYPE bpge-wlges,"总体-预算金额 17 cb_sum TYPE bpge-wlges,"总体-成本金额 18 jz_sum TYPE bpge-wlges,"总体-结转金额 19 fp_sum TYPE bpge-wlges,"总体-发票金额 20 fk_sum TYPE bpge-wlges,"总体-付款金额 21 zz_sum TYPE bpge-wlges,"总体-转资金额 22 ys_yy TYPE bpge-wlges, "2023-预算金额 23 cb_yy TYPE bpge-wlges,"2023-成本金额 24 jz_yy TYPE bpge-wlges,"2023-结转金额 25 fp_yy TYPE bpge-wlges,"2023-发票金额 26 fk_yy TYPE bpge-wlges,"2023-付款金额 27 zz_yy TYPE bpge-wlges,"2023-转资金额 28 cb_mm TYPE bpge-wlges,"5月-成本金额 29 jz_mm TYPE bpge-wlges,"5月-结转金额 30 fp_mm TYPE bpge-wlges,"5月-发票金额 31 fk_mm TYPE bpge-wlges,"5月-付款金额 32 zz_mm TYPE bpge-wlges,"5月-转资金额 33 END OF ty_data, 34 35 BEGIN OF ty_prps, 36 pspnr TYPE prps-pspnr, 37 post1 TYPE prps-post1, 38 prart TYPE prps-prart, 39 objnr TYPE prps-objnr, 40 END OF ty_prps. 41 42 DATA:lt_data TYPE TABLE OF ty_data, 43 ls_data TYPE ty_data, 44 lt_prps TYPE TABLE OF ty_prps, 45 ls_prps TYPE ty_prps. 46 DATA:BEGIN OF ls_bpge, 47 objnr TYPE bpge-objnr, 48 wlges TYPE bpge-wlges, 49 END OF ls_bpge, 50 lt_bpge LIKE STANDARD TABLE OF ls_bpge. 51 52 DATA ok_code TYPE sy-ucomm. 53 DATA tree1 TYPE REF TO cl_gui_alv_tree. 54 DATA: gt_data TYPE TABLE OF ty_data,"sflight OCCURS 0, "Output-Table 55 gt_sflight TYPE sflight OCCURS 0, 56 gt_fieldcatalog TYPE lvc_t_fcat. "Fieldcatalog 57 58 *&SPWIZARD: FUNCTION CODES FOR TABSTRIP 'TAB_SHEET' 59 CONSTANTS: BEGIN OF C_TAB_SHEET, 60 TAB1 LIKE SY-UCOMM VALUE 'TAB_SHEET_FC2', 61 TAB2 LIKE SY-UCOMM VALUE 'TAB_SHEET_FC3', 62 TAB3 LIKE SY-UCOMM VALUE 'TAB_SHEET_FC4', 63 TAB4 LIKE SY-UCOMM VALUE 'TAB_SHEET_FC5', 64 TAB5 LIKE SY-UCOMM VALUE 'TAB_SHEET_FC6', 65 TAB6 LIKE SY-UCOMM VALUE 'TAB_SHEET_FC7', 66 END OF C_TAB_SHEET. 67 *&SPWIZARD: DATA FOR TABSTRIP 'TAB_SHEET' 68 CONTROLS: TAB_SHEET TYPE TABSTRIP. 69 DATA: BEGIN OF G_TAB_SHEET, 70 SUBSCREEN LIKE SY-DYNNR, 71 PROG LIKE SY-REPID VALUE 'ZTYFIR00950', 72 PRESSED_TAB LIKE SY-UCOMM VALUE C_TAB_SHEET-TAB1, 73 END OF G_TAB_SHEET. 74 75 DATA gf_initialized TYPE abap_bool VALUE abap_false. 76 DATA gf_navigator_initialized TYPE abap_bool VALUE abap_false. 77 78 DATA:cont_docking TYPE REF TO cl_gui_docking_container, 79 ctrl_toolbar TYPE REF TO cl_gui_toolbar, 80 ctrl_splitter TYPE REF TO cl_gui_splitter_container, 81 82 go_docking TYPE REF TO cl_gui_docking_container, 83 go_splitter1 TYPE REF TO cl_gui_splitter_container, 84 go_sp_container1 TYPE REF TO cl_gui_container, "screen1 的容器 85 go_sp_container2 TYPE REF TO cl_gui_container, "screen2 的容器 86 go_alv_grid1 TYPE REF TO cl_gui_alv_grid, "alv1 87 88 cont_toolbar TYPE REF TO cl_gui_container, 89 ctrl_tree TYPE REF TO cl_gui_column_tree, 90 cont_tree TYPE REF TO cl_gui_container, 91 cont_tree_agenda TYPE REF TO cl_gui_container, 92 worklist_container TYPE REF TO cl_gui_container, 93 g_hierarchy_header TYPE treev_hhdr. 94 95 *----------------------------------------------------------------------* 96 * CLASS lcl_nav_event_receiver DEFINITION 97 *----------------------------------------------------------------------* 98 * 99 *----------------------------------------------------------------------* 100 CLASS lcl_tree_event_receiver DEFINITION. 101 PUBLIC SECTION. 102 METHODS: 103 handle_double_click 104 for event node_double_click of cl_gui_alv_tree 105 importing node_key, 106 handle_item_double_click 107 FOR EVENT item_double_click OF cl_gui_alv_tree 108 IMPORTING fieldname node_key. 109 110 ENDCLASS. "lcl_nav_event_receiver DEFINITION 111 *----------------------------------------------------------------------* 112 * CLASS lcl_nav_event_receiver IMPLEMENTATION 113 *----------------------------------------------------------------------* 114 * 115 *----------------------------------------------------------------------* 116 CLASS lcl_tree_event_receiver IMPLEMENTATION. 117 METHOD handle_double_click. 118 PERFORM tree_node_double_click USING node_key. 119 ENDMETHOD. "link_click 120 METHOD handle_item_double_click. 121 DATA: l_value TYPE lvc_value, 122 l_layi TYPE lvc_t_layi, 123 l_layn TYPE lvc_s_layn . 124 125 CALL METHOD tree1->get_outtab_line 126 EXPORTING 127 i_node_key = node_key 128 IMPORTING 129 e_outtab_line = ls_data 130 e_node_text = l_value 131 et_item_layout = l_layi 132 es_node_layout = l_layn 133 EXCEPTIONS 134 node_not_found = 1 135 OTHERS = 2. 136 IF sy-subrc = 0. 137 SET PARAMETER ID 'PRO' FIELD ls_data-posid. 138 CALL TRANSACTION 'CJ03' AND SKIP FIRST SCREEN. 139 ENDIF. 140 141 ENDMETHOD. 142 ENDCLASS. "lcl_nav_event_receiver IMPLEMENTATION 143 144 145 SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001. 146 PARAMETERS:p_bukrs TYPE bkpf-bukrs OBLIGATORY. 147 PARAMETERS:p_gjahr TYPE bkpf-gjahr OBLIGATORY DEFAULT sy-datum+0(4). 148 PARAMETERS:p_monat TYPE bkpf-monat OBLIGATORY DEFAULT sy-datum+4(2). 149 SELECT-OPTIONS:s_prart FOR prps-prart. 150 SELECT-OPTIONS:s_pspid FOR proj-pspid. 151 SELECT-OPTIONS:s_posid FOR prps-posid. 152 SELECTION-SCREEN END OF BLOCK b1.
PBO
1 *&---------------------------------------------------------------------* 2 *& Include ZTYFIR00950_PBO 3 *&---------------------------------------------------------------------* 4 5 *&SPWIZARD: OUTPUT MODULE FOR TS 'TAB_SHEET'. DO NOT CHANGE THIS LINE! 6 *&SPWIZARD: SETS ACTIVE TAB 7 MODULE TAB_SHEET_ACTIVE_TAB_SET OUTPUT. 8 TAB_SHEET-ACTIVETAB = G_TAB_SHEET-PRESSED_TAB. 9 CASE G_TAB_SHEET-PRESSED_TAB. 10 WHEN C_TAB_SHEET-TAB1. 11 G_TAB_SHEET-SUBSCREEN = '0102'. 12 WHEN C_TAB_SHEET-TAB2. 13 G_TAB_SHEET-SUBSCREEN = '0103'. 14 WHEN C_TAB_SHEET-TAB3. 15 G_TAB_SHEET-SUBSCREEN = '0104'. 16 WHEN C_TAB_SHEET-TAB4. 17 G_TAB_SHEET-SUBSCREEN = '0105'. 18 WHEN C_TAB_SHEET-TAB5. 19 G_TAB_SHEET-SUBSCREEN = '0106'. 20 WHEN C_TAB_SHEET-TAB6. 21 G_TAB_SHEET-SUBSCREEN = '0107'. 22 WHEN OTHERS. 23 *&SPWIZARD: DO NOTHING 24 ENDCASE. 25 ENDMODULE. 26 27 *&---------------------------------------------------------------------* 28 *& Module STATUS_0100 OUTPUT 29 *&---------------------------------------------------------------------* 30 * text 31 *----------------------------------------------------------------------* 32 MODULE status_0100 OUTPUT. 33 *工具栏 34 PERFORM status_0100. 35 36 *屏幕拆分 37 PERFORM init_docking. 38 39 *初始化 ALV 40 * PERFORM initial_alv. 41 42 ENDMODULE.
PAI
*&---------------------------------------------------------------------* *& Include ZTYFIR00950_PAI *&---------------------------------------------------------------------* *&SPWIZARD: INPUT MODULE FOR TS 'TAB_SHEET'. DO NOT CHANGE THIS LINE! *&SPWIZARD: GETS ACTIVE TAB MODULE TAB_SHEET_ACTIVE_TAB_GET INPUT. OK_CODE = SY-UCOMM. CASE OK_CODE. WHEN C_TAB_SHEET-TAB1. G_TAB_SHEET-PRESSED_TAB = C_TAB_SHEET-TAB1. WHEN C_TAB_SHEET-TAB2. G_TAB_SHEET-PRESSED_TAB = C_TAB_SHEET-TAB2. WHEN C_TAB_SHEET-TAB3. G_TAB_SHEET-PRESSED_TAB = C_TAB_SHEET-TAB3. WHEN C_TAB_SHEET-TAB4. G_TAB_SHEET-PRESSED_TAB = C_TAB_SHEET-TAB4. WHEN C_TAB_SHEET-TAB5. G_TAB_SHEET-PRESSED_TAB = C_TAB_SHEET-TAB5. WHEN C_TAB_SHEET-TAB6. G_TAB_SHEET-PRESSED_TAB = C_TAB_SHEET-TAB6. WHEN OTHERS. *&SPWIZARD: DO NOTHING ENDCASE. ENDMODULE. *&---------------------------------------------------------------------* *& Module USER_COMMAND_0100 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE user_command_0100 INPUT. PERFORM user_command_0100. ENDMODULE.
FRM
*&---------------------------------------------------------------------* *& 包含 ZTYFIR00950_FRM *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form TREE_NODE_LINK_CLICK *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_NODE_KEY text *----------------------------------------------------------------------* FORM tree_node_double_click USING p_node_key TYPE lvc_nkey. DATA:lv_tab_sheet TYPE char20. BREAK-POINT. CHECK NOT p_node_key IS INITIAL. lv_tab_sheet = tab_sheet. CASE lv_tab_sheet. WHEN 'TAB_SHEET_FC2'."预算 PERFORM frm_ys_data. ENDCASE. * CALL METHOD tree1->get_outtab_line * EXPORTING * i_node_key = p_node_key * IMPORTING * e_outtab_line = ls_400. * CHECK ls_400 IS NOT INITIAL. ENDFORM. *&---------------------------------------------------------------------* *& Form STATUS_0100 *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM status_0100. SET PF-STATUS '0100'. SET TITLEBAR '0100' WITH '项目执行情况表'. ENDFORM. *&---------------------------------------------------------------------* *& Form USER_COMMAND_0100 *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM user_command_0100. DATA lv_code TYPE sy-ucomm. CLEAR:lv_code. lv_code = ok_code. CLEAR:ok_code. CASE lv_code. WHEN 'BACK'. PERFORM call_back. WHEN 'EXIT'. PERFORM call_exit. WHEN 'CANLE'. PERFORM call_canle. WHEN OTHERS. ENDCASE. ENDFORM. *&---------------------------------------------------------------------* *& Form CALL_BACK *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM call_back. LEAVE TO SCREEN 0. ENDFORM. *&---------------------------------------------------------------------* *& Form CALL_EXIT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM call_exit. LEAVE TO SCREEN 0. ENDFORM. *&---------------------------------------------------------------------* *& Form CALL_CANLE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM call_canle. LEAVE TO SCREEN 0. ENDFORM. *&---------------------------------------------------------------------* *& Form INITIAL_ALV *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM initial_alv. DATA: l_repid LIKE sy-repid, l_dynnr LIKE sy-dynnr, l_hierarchy_header TYPE treev_hhdr, lt_events TYPE cntl_simple_events, l_events TYPE cntl_simple_event, l_extension TYPE i VALUE 200, l_pref_value TYPE char32. CHECK gf_navigator_initialized EQ abap_false. gf_navigator_initialized = abap_true. * CREATE OBJECT ctrl_event_receiver. CREATE OBJECT cont_docking EXPORTING extension = l_extension. CREATE OBJECT ctrl_splitter EXPORTING parent = cont_docking rows = 2 columns = 1 EXCEPTIONS cntl_error = 1 cntl_system_error = 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. CALL METHOD ctrl_splitter->set_row_height EXPORTING id = 1 height = 40 EXCEPTIONS cntl_error = 1 cntl_system_error = 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. * CALL METHOD ctrl_splitter->set_row_sash * EXPORTING * id = 1 * type = cl_gui_splitter_container=>type_movable * value = cl_gui_splitter_container=>false. * * CALL METHOD ctrl_splitter->set_border * EXPORTING * border = space. * * CALL METHOD ctrl_splitter->set_row_mode * EXPORTING * mode = cl_gui_splitter_container=>mode_absolute. * * CALL METHOD ctrl_splitter->get_container * EXPORTING * row = 2 * column = 1 * RECEIVING * container = cont_tree. ENDFORM. *&---------------------------------------------------------------------* *& Form INIT_DOCKING *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM init_docking. DATA: l_repid LIKE sy-repid, l_dynnr LIKE sy-dynnr, l_hierarchy_header TYPE treev_hhdr, lt_events TYPE cntl_simple_events, l_events TYPE cntl_simple_event, l_extension TYPE i VALUE 200, l_pref_value TYPE char32. CHECK gf_navigator_initialized EQ abap_false. gf_navigator_initialized = abap_true. **创建docking CREATE OBJECT go_docking EXPORTING repid = sy-repid dynnr = sy-dynnr extension = '150' "屏幕大小 side = cl_gui_docking_container=>dock_at_top. *将屏幕拆分成上下两个屏幕:两行一列 CREATE OBJECT go_splitter1 EXPORTING parent = go_docking rows = 1 "2 columns = 1. *第一个屏幕放在第一行第一列 CALL METHOD go_splitter1->get_container EXPORTING row = 1 column = 1 RECEIVING container = go_sp_container1. *第一个屏幕高度 CALL METHOD go_splitter1->set_row_height EXPORTING id = 1 height = 50. **第二个屏幕 放在第二行第一列 * CALL METHOD go_splitter1->get_container * EXPORTING * row = 2 * column = 1 * RECEIVING * container = go_sp_container2. **--容器1 * CREATE OBJECT go_alv_grid1 * EXPORTING * i_parent = go_sp_container1 * EXCEPTIONS * error_cntl_create = 1 * error_cntl_init = 2 * error_cntl_link = 3 * error_dp_create = 4 * OTHERS = 5. * IF sy-subrc <> 0. * MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno * WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. * ENDIF. **************************************** IF tree1 IS INITIAL. PERFORM init_tree. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form INIT_TREE *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM init_tree . * create fieldcatalog for structure sflight PERFORM build_fieldcatalog. * create container for alv-tree DATA: l_tree_container_name(30) TYPE c, l_custom_container TYPE REF TO cl_gui_custom_container. l_tree_container_name = 'TREE1'. * IF sy-batch IS INITIAL. * CREATE OBJECT l_custom_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 x208(00) WITH 'ERROR'. "#EC NOTEXT * ENDIF. * ENDIF. * create tree control CREATE OBJECT tree1 EXPORTING parent = go_sp_container1 "l_custom_container node_selection_mode = cl_gui_column_tree=>node_sel_mode_multiple item_selection = abap_true "YI3K118558 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 x208(00) WITH 'ERROR'. "#EC NOTEXT ENDIF. DATA: lt_list_commentary TYPE slis_t_listheader, l_logo TYPE sdydo_value. * repid for saving variants DATA: ls_variant TYPE disvariant. ls_variant-report = sy-repid. PERFORM build_hierarchy_header. * create emty tree-control CALL METHOD tree1->set_table_for_first_display EXPORTING is_hierarchy_header = g_hierarchy_header it_list_commentary = lt_list_commentary i_logo = l_logo i_background_id = 'ALV_BACKGROUND' i_save = 'A' is_variant = ls_variant CHANGING it_outtab = gt_data "table must be emty !! it_fieldcatalog = gt_fieldcatalog. * create hierarchy PERFORM create_hierarchy. * add own functioncodes to the toolbar * PERFORM change_toolbar. * register events PERFORM register_events. "YI3K118558 * adjust column_width * call method tree1->COLUMN_OPTIMIZE. CALL METHOD tree1->frontend_update. ENDFORM. *&---------------------------------------------------------------------* *& Form BUILD_FIELDCATALOG *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM build_fieldcatalog . DATA: ls_fieldcatalog TYPE lvc_s_fcat. REFRESH gt_fieldcatalog. CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'POSID'. ls_fieldcatalog-coltext = '项目/WBS元素'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '30'. ls_fieldcatalog-outputlen = '30'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'POST1'. ls_fieldcatalog-coltext = '项目/WBS名称'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '30'. ls_fieldcatalog-outputlen = '30'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'PRART'. ls_fieldcatalog-coltext = '项目类型'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '4'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'PRATX'. ls_fieldcatalog-coltext = '项目类型描述'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '10'. ls_fieldcatalog-outputlen = '10'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'RTCUR'. ls_fieldcatalog-coltext = '币种'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '4'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'YS_SUM'. ls_fieldcatalog-coltext = '总体预算金额'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '10'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'CB_SUM'. ls_fieldcatalog-coltext = '总体成本金额'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '10'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'JZ_SUM'. ls_fieldcatalog-coltext = '总体结转金额'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '10'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'FP_SUM'. ls_fieldcatalog-coltext = '总体发票金额'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '10'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'FK_SUM'. ls_fieldcatalog-coltext = '总体付款金额'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '10'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'ZZ_SUM'. ls_fieldcatalog-coltext = '总体转资金额'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '10'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'YS_YY'. ls_fieldcatalog-coltext = p_gjahr && '-预算金额'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '10'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'CB_YY'. ls_fieldcatalog-coltext = p_gjahr && '-成本金额'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '10'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'JZ_YY'. ls_fieldcatalog-coltext = p_gjahr && '-结转金额'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '10'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'FP_YY'. ls_fieldcatalog-coltext = p_gjahr && '-发票金额'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '10'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'FK_YY'. ls_fieldcatalog-coltext = p_gjahr && '-付款金额'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '10'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'ZZ_YY'. ls_fieldcatalog-coltext = p_gjahr && '-转资金额'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '10'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'CB_MM'. ls_fieldcatalog-coltext = p_monat && '月-成本金额'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '10'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'JZ_MM'. ls_fieldcatalog-coltext = p_monat && '月-结转金额'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '10'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'FP_MM'. ls_fieldcatalog-coltext = p_monat && '月-发票金额'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '10'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'FK_MM'. ls_fieldcatalog-coltext = p_monat && '月-付款金额'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '10'. APPEND ls_fieldcatalog TO gt_fieldcatalog . CLEAR ls_fieldcatalog. ls_fieldcatalog-fieldname = 'ZZ_MM'. ls_fieldcatalog-coltext = p_monat && '月-转资金额'. ls_fieldcatalog-key = ''. ls_fieldcatalog-dd_outlen = '10'. APPEND ls_fieldcatalog TO gt_fieldcatalog . ENDFORM. *&---------------------------------------------------------------------* *& Form CREATE_HIERARCHY *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM create_hierarchy . DATA: lt_nodes TYPE TABLE OF lvc_nkey WITH HEADER LINE, l_cur_node TYPE lvc_nkey, l_former_stufe TYPE prps-stufe, l_index TYPE i. *get data PERFORM frm_get_data. SORT lt_data BY posid stufe prart. LOOP AT lt_data INTO ls_data. IF ls_data-stufe = '1'. REFRESH lt_nodes. l_index = ls_data-stufe. PERFORM add_nodes USING ls_data '' CHANGING l_cur_node. READ TABLE lt_nodes INDEX l_index. IF sy-subrc NE 0. APPEND l_cur_node TO lt_nodes. ENDIF. ELSEIF ls_data-stufe > l_former_stufe. "on change of l_yyyymm l_index = ls_data-stufe - 1. READ TABLE lt_nodes INDEX l_index. PERFORM add_nodes USING ls_data lt_nodes CHANGING l_cur_node. *---->保存新的当前节点 APPEND l_cur_node TO lt_nodes. ELSEIF ls_data-stufe < l_former_stufe. l_index = ls_data-stufe - 1. READ TABLE lt_nodes INDEX l_index. PERFORM add_nodes USING ls_data lt_nodes CHANGING l_cur_node. *---->将当前节点及之后后的所有临时存储节点KEY删除 l_index = l_index + 1. DELETE lt_nodes INDEX l_index. DO. READ TABLE lt_nodes INDEX l_index. IF sy-subrc = 0. DELETE lt_nodes INDEX l_index. ELSE. EXIT. ENDIF. ENDDO. *---->保存新的当前节点 APPEND l_cur_node TO lt_nodes. ELSE. l_index = ls_data-stufe - 1. READ TABLE lt_nodes INDEX l_index. PERFORM add_nodes USING ls_data lt_nodes CHANGING l_cur_node. ENDIF. l_former_stufe = ls_data-stufe. ENDLOOP. * calculate totals CALL METHOD tree1->update_calculations. * this method must be called to send the data to the frontend CALL METHOD tree1->frontend_update. ENDFORM. *&---------------------------------------------------------------------* *& Form REGISTER_EVENTS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM register_events . "注册前端后后端事件 DATA: lt_events TYPE cntl_simple_events, l_event TYPE cntl_simple_event, l_event_receiver TYPE REF TO lcl_tree_event_receiver. "获取已注册的前端事件 CALL METHOD tree1->get_registered_events IMPORTING events = lt_events. CLEAR l_event. l_event-eventid = cl_gui_column_tree=>eventid_node_double_click. APPEND l_event TO lt_events. CLEAR l_event. l_event-eventid = cl_gui_column_tree=>eventid_expand_no_children. APPEND l_event TO lt_events. CLEAR l_event. l_event-eventid = cl_gui_column_tree=>eventid_header_click. APPEND l_event TO lt_events. CLEAR l_event. l_event-eventid = cl_gui_column_tree=>eventid_item_double_click. APPEND l_event TO lt_events. CALL METHOD tree1->set_registered_events EXPORTING events = lt_events EXCEPTIONS cntl_error = 1 cntl_system_error = 2 illegal_event_combination = 3. IF sy-subrc <> 0. MESSAGE x208(00) WITH 'ERROR'. "#EC NOTEXT ENDIF. CREATE OBJECT l_event_receiver. SET HANDLER l_event_receiver->handle_double_click FOR tree1. SET HANDLER l_event_receiver->handle_item_double_click FOR tree1. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_YS_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_ys_data . *SET PARAMETER ID 'PSP' FIELD '11205018395'. *SET PARAMETER ID 'PRO' FIELD '11205018395'. *call TRANSACTION 'CJI3'. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_AUTHORITY_CHECK *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_authority_check . AUTHORITY-CHECK OBJECT 'F_BKPF_BUK' ID 'BUKRS' FIELD p_bukrs. IF sy-subrc NE 0. DATA(lv_mess) = '您没有公司代码' && p_bukrs && '的查询权限' . MESSAGE lv_mess TYPE 'E'. RETURN. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form BUILD_HIERARCHY_HEADER *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM build_hierarchy_header . CLEAR g_hierarchy_header. g_hierarchy_header-heading = '项目/WBS'. g_hierarchy_header-tooltip = '项目/WBS'. g_hierarchy_header-width = 30. g_hierarchy_header-width_pix = ''. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GET_DATA *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_get_data . DATA: gt_prps TYPE TABLE OF prps_co. RANGES:wbs_to_select FOR prps-pspnr, wbs_to_select_up FOR prps-pspnr, r_pspnr FOR proj-pspnr. "获取符合条件的项目定义 SELECT DISTINCT a~pspnr INTO TABLE @DATA(lt_posid) FROM proj AS a INNER JOIN prps AS b ON a~pspnr = b~psphi WHERE a~pspid IN @s_pspid"项目定义 AND b~posid IN @s_posid"WBS元素 AND b~prart IN @s_prart AND a~vbukr = @p_bukrs AND b~pbukr = @p_bukrs. "根据项目定义获取WBS REFRESH:r_pspnr,wbs_to_select,wbs_to_select_up. CLEAR gt_prps. LOOP AT lt_posid INTO DATA(ls_posid). r_pspnr-sign = 'I'. r_pspnr-option = 'EQ'. r_pspnr-low = ls_posid-pspnr. APPEND r_pspnr. CLEAR r_pspnr. ENDLOOP. SORT r_pspnr. DELETE ADJACENT DUPLICATES FROM r_pspnr COMPARING ALL FIELDS. IF lt_posid IS INITIAL. MESSAGE '没有符合条件的数据' TYPE 'E'. LEAVE LIST-PROCESSING. ENDIF. CALL FUNCTION 'CJDB_FILL_HIERARCHY' TABLES i_proj = r_pspnr[] e_prps_co = gt_prps e_prps_not_yet_read = wbs_to_select e_prps_not_yet_read_up = wbs_to_select_up. IF gt_prps IS NOT INITIAL. SORT gt_prps BY psphi pspnr stufe. LOOP AT gt_prps INTO DATA(gs_prps). * "项目定义转外码 * CALL FUNCTION 'CONVERSION_EXIT_KONPD_OUTPUT' * EXPORTING * input = gs_prps-psphi * IMPORTING * output = ls_data-posid. "内外码转换 CALL FUNCTION 'CONVERSION_EXIT_ABPSP_OUTPUT' EXPORTING input = gs_prps-pspnr IMPORTING output = ls_data-posid. ls_data-pspnr = gs_prps-psphi."项目定义内码 ls_data-pspnr1 = gs_prps-pspnr."WBS内码 ls_data-stufe = gs_prps-stufe. APPEND ls_data TO lt_data. ENDLOOP. SORT lt_data BY posid stufe prart. IF lt_data IS NOT INITIAL. "项目定义描述 SELECT pspnr,post1 INTO TABLE @DATA(lt_proj) FROM proj FOR ALL ENTRIES IN @lt_data WHERE pspnr = @lt_data-pspnr. SORT lt_proj BY pspnr. "WBS元素描述 项目类型 SELECT pspnr post1 prart objnr INTO CORRESPONDING FIELDS OF TABLE lt_prps FROM prps FOR ALL ENTRIES IN lt_data WHERE pspnr = lt_data-pspnr1. SORT lt_prps BY pspnr objnr. "项目类型描述 SELECT prart,pratx INTO TABLE @DATA(lt_tcj1t) FROM tcj1t WHERE langu = @sy-langu. SORT lt_tcj1t BY prart. LOOP AT lt_data INTO ls_data. READ TABLE lt_proj INTO DATA(ls_proj) WITH KEY pspnr = ls_data-pspnr BINARY SEARCH. IF sy-subrc = 0. ls_data-post1 = ls_proj-post1. ENDIF. READ TABLE lt_prps INTO ls_prps WITH KEY pspnr = ls_data-pspnr1 BINARY SEARCH. IF sy-subrc = 0. ls_data-post1 = ls_prps-post1. ls_data-prart = ls_prps-prart. ls_data-objnr = ls_prps-objnr. ENDIF. READ TABLE lt_tcj1t INTO DATA(ls_tcj1t) WITH KEY prart = ls_data-prart BINARY SEARCH. IF sy-subrc = 0. ls_data-pratx = ls_tcj1t-pratx. ENDIF. ls_data-rtcur = 'RMB'. MODIFY lt_data FROM ls_data. ENDLOOP. IF lt_prps IS NOT INITIAL. "总体-预算金额 PERFORM frm_get_ys_sum. "2023年度-预算金额 PERFORM frm_get_ys_yy. ENDIF. " ENDIF. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form ADD_NODES *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_LS_DATA text * -->P_0592 text * <--P_L_CUR_NODE text *----------------------------------------------------------------------* FORM add_nodes USING ps_wbs TYPE ty_data p_cnode_key TYPE lvc_nkey CHANGING p_nnode_key TYPE lvc_nkey. DATA: l_node_text TYPE lvc_value. CALL FUNCTION 'CONVERSION_EXIT_ABPSN_OUTPUT' EXPORTING input = ps_wbs-posid IMPORTING output = l_node_text. CALL METHOD tree1->add_node EXPORTING i_relat_node_key = p_cnode_key i_relationship = cl_gui_column_tree=>relat_last_child i_node_text = l_node_text is_outtab_line = ps_wbs IMPORTING e_new_node_key = p_nnode_key. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GET_YS_SUM *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_get_ys_sum . SELECT objnr wlges INTO TABLE lt_bpge FROM bpge FOR ALL ENTRIES IN lt_prps WHERE objnr = lt_prps-objnr AND wrttp = '41'. SORT lt_bpge BY objnr. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_GET_YS_YY *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM frm_get_ys_yy . * SELECT objnr * wlges * INTO TABLE lt_bpge * FROM bpge * FOR ALL ENTRIES IN lt_prps * WHERE objnr = lt_prps-objnr * AND wrttp = '41'. * SORT lt_bpge BY objnr. ENDFORM.
100屏幕:
101屏幕在100屏幕基础上画页签自动生成代码