SAP ABAP OO ALV TREE(项目 WBS展开)
该程序是初版,有一些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
1 *&---------------------------------------------------------------------* 2 *& 包含 ZTYFIR00950_FRM 3 *&---------------------------------------------------------------------* 4 *&---------------------------------------------------------------------* 5 *& Form TREE_NODE_LINK_CLICK 6 *&---------------------------------------------------------------------* 7 * text 8 *----------------------------------------------------------------------* 9 * -->P_NODE_KEY text 10 *----------------------------------------------------------------------* 11 FORM tree_node_double_click USING p_node_key. 12 DATA:lv_tab_sheet TYPE char20. 13 CHECK NOT p_node_key IS INITIAL. 14 lv_tab_sheet = tab_sheet. 15 CASE lv_tab_sheet. 16 WHEN 'TAB_SHEET_FC2'."预算 17 gv_sheet = 2. 18 PERFORM frm_ys_sheet USING p_node_key. 19 WHEN 'TAB_SHEET_FC3'."成本 20 gv_sheet = 3. 21 PERFORM frm_cb_sheet USING p_node_key. 22 WHEN 'TAB_SHEET_FC4'."结转 23 gv_sheet = 4. 24 PERFORM frm_jz_sheet USING p_node_key. 25 WHEN 'TAB_SHEET_FC5'."发票 26 gv_sheet = 5. 27 PERFORM frm_fp_sheet USING p_node_key. 28 WHEN 'TAB_SHEET_FC6'."付款 29 gv_sheet = 6. 30 PERFORM frm_fk_sheet USING p_node_key. 31 32 WHEN 'TAB_SHEET_FC7'."转资 33 gv_sheet = 7. 34 PERFORM frm_zz_sheet USING p_node_key. 35 ENDCASE. 36 37 PERFORM frm_refresh_alv USING gv_sheet. 38 39 40 ENDFORM. 41 42 *&---------------------------------------------------------------------* 43 *& Form STATUS_0100 44 *&---------------------------------------------------------------------* 45 * text 46 *----------------------------------------------------------------------* 47 FORM status_0100. 48 SET PF-STATUS '0100'. 49 SET TITLEBAR '0100' WITH '项目执行情况表'. 50 ENDFORM. 51 *&---------------------------------------------------------------------* 52 *& Form USER_COMMAND_0100 53 *&---------------------------------------------------------------------* 54 * text 55 *----------------------------------------------------------------------* 56 FORM user_command_0100. 57 DATA lv_code TYPE sy-ucomm. 58 CLEAR:lv_code. 59 lv_code = ok_code. 60 61 CLEAR:ok_code. 62 CASE lv_code. 63 WHEN 'BACK'. 64 PERFORM call_back. 65 WHEN 'EXIT'. 66 PERFORM call_exit. 67 WHEN 'CANLE'. 68 PERFORM call_canle. 69 WHEN OTHERS. 70 ENDCASE. 71 72 ENDFORM. 73 *&---------------------------------------------------------------------* 74 *& Form CALL_BACK 75 *&---------------------------------------------------------------------* 76 * text 77 *----------------------------------------------------------------------* 78 FORM call_back. 79 LEAVE TO SCREEN 0. 80 ENDFORM. 81 *&---------------------------------------------------------------------* 82 *& Form CALL_EXIT 83 *&---------------------------------------------------------------------* 84 * text 85 *----------------------------------------------------------------------* 86 FORM call_exit. 87 LEAVE TO SCREEN 0. 88 ENDFORM. 89 *&---------------------------------------------------------------------* 90 *& Form CALL_CANLE 91 *&---------------------------------------------------------------------* 92 * text 93 *----------------------------------------------------------------------* 94 FORM call_canle. 95 LEAVE TO SCREEN 0. 96 ENDFORM. 97 *&---------------------------------------------------------------------* 98 *& Form INITIAL_ALV 99 *&---------------------------------------------------------------------* 100 * text 101 *----------------------------------------------------------------------* 102 FORM initial_alv. 103 104 DATA: l_repid LIKE sy-repid, 105 l_dynnr LIKE sy-dynnr, 106 l_hierarchy_header TYPE treev_hhdr, 107 lt_events TYPE cntl_simple_events, 108 l_events TYPE cntl_simple_event, 109 l_extension TYPE i VALUE 200, 110 l_pref_value TYPE char32. 111 112 CHECK gf_navigator_initialized EQ abap_false. 113 gf_navigator_initialized = abap_true. 114 115 116 * CREATE OBJECT ctrl_event_receiver. 117 118 CREATE OBJECT cont_docking 119 EXPORTING 120 extension = l_extension. 121 122 CREATE OBJECT ctrl_splitter 123 EXPORTING 124 parent = cont_docking 125 rows = 2 126 columns = 1 127 EXCEPTIONS 128 cntl_error = 1 129 cntl_system_error = 2 130 OTHERS = 3. 131 IF sy-subrc <> 0. 132 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 133 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 134 ENDIF. 135 136 CALL METHOD ctrl_splitter->set_row_height 137 EXPORTING 138 id = 1 139 height = 40 140 EXCEPTIONS 141 cntl_error = 1 142 cntl_system_error = 2 143 OTHERS = 3. 144 IF sy-subrc <> 0. 145 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 146 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 147 ENDIF. 148 149 * CALL METHOD ctrl_splitter->set_row_sash 150 * EXPORTING 151 * id = 1 152 * type = cl_gui_splitter_container=>type_movable 153 * value = cl_gui_splitter_container=>false. 154 * 155 * CALL METHOD ctrl_splitter->set_border 156 * EXPORTING 157 * border = space. 158 * 159 * CALL METHOD ctrl_splitter->set_row_mode 160 * EXPORTING 161 * mode = cl_gui_splitter_container=>mode_absolute. 162 * 163 * CALL METHOD ctrl_splitter->get_container 164 * EXPORTING 165 * row = 2 166 * column = 1 167 * RECEIVING 168 * container = cont_tree. 169 170 ENDFORM. 171 *&---------------------------------------------------------------------* 172 *& Form INIT_DOCKING 173 *&---------------------------------------------------------------------* 174 * text 175 *----------------------------------------------------------------------* 176 FORM init_docking. 177 178 DATA: l_repid LIKE sy-repid, 179 l_dynnr LIKE sy-dynnr, 180 l_hierarchy_header TYPE treev_hhdr, 181 lt_events TYPE cntl_simple_events, 182 l_events TYPE cntl_simple_event, 183 l_extension TYPE i VALUE 200, 184 l_pref_value TYPE char32. 185 186 CHECK gf_navigator_initialized EQ abap_false. 187 gf_navigator_initialized = abap_true. 188 189 **创建docking 190 CREATE OBJECT go_docking 191 EXPORTING 192 repid = sy-repid 193 dynnr = sy-dynnr 194 extension = '150' "屏幕大小 195 side = cl_gui_docking_container=>dock_at_top. 196 197 *将屏幕拆分成上下两个屏幕:两行一列 198 CREATE OBJECT go_splitter1 199 EXPORTING 200 parent = go_docking 201 rows = 1 "2 202 columns = 1. 203 204 *第一个屏幕放在第一行第一列 205 CALL METHOD go_splitter1->get_container 206 EXPORTING 207 row = 1 208 column = 1 209 RECEIVING 210 container = go_sp_container1. 211 212 *第一个屏幕高度 213 CALL METHOD go_splitter1->set_row_height 214 EXPORTING 215 id = 1 216 height = 50. 217 218 **第二个屏幕 放在第二行第一列 219 * CALL METHOD go_splitter1->get_container 220 * EXPORTING 221 * row = 2 222 * column = 1 223 * RECEIVING 224 * container = go_sp_container2. 225 226 **--容器1 227 * CREATE OBJECT go_alv_grid1 228 * EXPORTING 229 * i_parent = go_sp_container1 230 * EXCEPTIONS 231 * error_cntl_create = 1 232 * error_cntl_init = 2 233 * error_cntl_link = 3 234 * error_dp_create = 4 235 * OTHERS = 5. 236 * IF sy-subrc <> 0. 237 * MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 238 * WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 239 * ENDIF. 240 **************************************** 241 IF tree1 IS INITIAL. 242 PERFORM init_tree. 243 ENDIF. 244 245 ENDFORM. 246 *&---------------------------------------------------------------------* 247 *& Form INIT_TREE 248 *&---------------------------------------------------------------------* 249 * text 250 *----------------------------------------------------------------------* 251 FORM init_tree . 252 253 * create fieldcatalog for structure sflight 254 PERFORM build_fieldcatalog. 255 256 * create container for alv-tree 257 DATA: l_tree_container_name(30) TYPE c, 258 l_custom_container TYPE REF TO cl_gui_custom_container. 259 l_tree_container_name = 'TREE1'. 260 261 * IF sy-batch IS INITIAL. 262 * CREATE OBJECT l_custom_container 263 * EXPORTING 264 * container_name = l_tree_container_name 265 * EXCEPTIONS 266 * cntl_error = 1 267 * cntl_system_error = 2 268 * create_error = 3 269 * lifetime_error = 4 270 * lifetime_dynpro_dynpro_link = 5. 271 * IF sy-subrc <> 0. 272 * MESSAGE x208(00) WITH 'ERROR'. "#EC NOTEXT 273 * ENDIF. 274 * ENDIF. 275 276 * create tree control 277 CREATE OBJECT tree1 278 EXPORTING 279 parent = go_sp_container1 "l_custom_container 280 node_selection_mode = cl_gui_column_tree=>node_sel_mode_multiple 281 item_selection = abap_true "YI3K118558 282 no_html_header = 'X' 283 no_toolbar = '' 284 EXCEPTIONS 285 cntl_error = 1 286 cntl_system_error = 2 287 create_error = 3 288 lifetime_error = 4 289 illegal_node_selection_mode = 5 290 failed = 6 291 illegal_column_name = 7. 292 IF sy-subrc <> 0. 293 MESSAGE x208(00) WITH 'ERROR'. "#EC NOTEXT 294 ENDIF. 295 296 DATA: lt_list_commentary TYPE slis_t_listheader, 297 l_logo TYPE sdydo_value. 298 299 300 * repid for saving variants 301 DATA: ls_variant TYPE disvariant. 302 ls_variant-report = sy-repid. 303 304 PERFORM build_hierarchy_header. 305 * create emty tree-control 306 CALL METHOD tree1->set_table_for_first_display 307 EXPORTING 308 is_hierarchy_header = g_hierarchy_header 309 it_list_commentary = lt_list_commentary 310 i_logo = l_logo 311 i_background_id = 'ALV_BACKGROUND' 312 i_save = 'A' 313 is_variant = ls_variant 314 CHANGING 315 it_outtab = gt_data "table must be emty !! 316 it_fieldcatalog = gt_fieldcatalog. 317 318 * create hierarchy 319 PERFORM create_hierarchy. 320 321 * add own functioncodes to the toolbar 322 * PERFORM change_toolbar. 323 324 * register events 325 PERFORM register_events. "YI3K118558 326 * adjust column_width 327 * call method tree1->COLUMN_OPTIMIZE. 328 CALL METHOD tree1->frontend_update. 329 ENDFORM. 330 *&---------------------------------------------------------------------* 331 *& Form BUILD_FIELDCATALOG 332 *&---------------------------------------------------------------------* 333 * text 334 *----------------------------------------------------------------------* 335 * --> p1 text 336 * <-- p2 text 337 *----------------------------------------------------------------------* 338 FORM build_fieldcatalog . 339 DATA: ls_fieldcatalog TYPE lvc_s_fcat. 340 REFRESH gt_fieldcatalog. 341 342 * CLEAR ls_fieldcatalog. 343 * ls_fieldcatalog-fieldname = 'POSID'. 344 * ls_fieldcatalog-coltext = '项目/WBS元素'. 345 * ls_fieldcatalog-key = ''. 346 * ls_fieldcatalog-dd_outlen = '30'. 347 * ls_fieldcatalog-outputlen = '30'. 348 * APPEND ls_fieldcatalog TO gt_fieldcatalog . 349 350 CLEAR ls_fieldcatalog. 351 ls_fieldcatalog-fieldname = 'POST1'. 352 ls_fieldcatalog-coltext = '项目/WBS名称'. 353 ls_fieldcatalog-key = ''. 354 ls_fieldcatalog-dd_outlen = '30'. 355 ls_fieldcatalog-outputlen = '30'. 356 APPEND ls_fieldcatalog TO gt_fieldcatalog . 357 358 CLEAR ls_fieldcatalog. 359 ls_fieldcatalog-fieldname = 'PRART'. 360 ls_fieldcatalog-coltext = '项目类型'. 361 ls_fieldcatalog-key = ''. 362 ls_fieldcatalog-dd_outlen = '4'. 363 ls_fieldcatalog-outputlen = '8'. 364 APPEND ls_fieldcatalog TO gt_fieldcatalog . 365 366 CLEAR ls_fieldcatalog. 367 ls_fieldcatalog-fieldname = 'PRATX'. 368 ls_fieldcatalog-coltext = '项目类型描述'. 369 ls_fieldcatalog-key = ''. 370 ls_fieldcatalog-dd_outlen = '10'. 371 ls_fieldcatalog-outputlen = '20'. 372 APPEND ls_fieldcatalog TO gt_fieldcatalog . 373 374 CLEAR ls_fieldcatalog. 375 ls_fieldcatalog-fieldname = 'RTCUR'. 376 ls_fieldcatalog-coltext = '币种'. 377 ls_fieldcatalog-key = ''. 378 ls_fieldcatalog-dd_outlen = '4'. 379 ls_fieldcatalog-outputlen = '8'. 380 APPEND ls_fieldcatalog TO gt_fieldcatalog . 381 382 CLEAR ls_fieldcatalog. 383 ls_fieldcatalog-fieldname = 'YS_SUM'. 384 ls_fieldcatalog-coltext = '总体预算金额'. 385 ls_fieldcatalog-key = ''. 386 ls_fieldcatalog-dd_outlen = '20'. 387 ls_fieldcatalog-outputlen = '20'. 388 ls_fieldcatalog-just = 'R'. 389 ls_fieldcatalog-ref_field = 'DMBTR'. 390 ls_fieldcatalog-ref_table = 'BSEG'. 391 APPEND ls_fieldcatalog TO gt_fieldcatalog . 392 393 CLEAR ls_fieldcatalog. 394 ls_fieldcatalog-fieldname = 'CB_SUM'. 395 ls_fieldcatalog-coltext = '总体成本金额'. 396 ls_fieldcatalog-key = ''. 397 ls_fieldcatalog-dd_outlen = '20'. 398 ls_fieldcatalog-outputlen = '20'. 399 ls_fieldcatalog-just = 'R'. 400 ls_fieldcatalog-ref_field = 'DMBTR'. 401 ls_fieldcatalog-ref_table = 'BSEG'. 402 APPEND ls_fieldcatalog TO gt_fieldcatalog . 403 404 CLEAR ls_fieldcatalog. 405 ls_fieldcatalog-fieldname = 'JZ_SUM'. 406 ls_fieldcatalog-coltext = '总体结转金额'. 407 ls_fieldcatalog-key = ''. 408 ls_fieldcatalog-dd_outlen = '20'. 409 ls_fieldcatalog-outputlen = '20'. 410 ls_fieldcatalog-just = 'R'. 411 ls_fieldcatalog-ref_field = 'DMBTR'. 412 ls_fieldcatalog-ref_table = 'BSEG'. 413 APPEND ls_fieldcatalog TO gt_fieldcatalog . 414 415 CLEAR ls_fieldcatalog. 416 ls_fieldcatalog-fieldname = 'FP_SUM'. 417 ls_fieldcatalog-coltext = '总体发票金额'. 418 ls_fieldcatalog-key = ''. 419 ls_fieldcatalog-dd_outlen = '20'. 420 ls_fieldcatalog-outputlen = '20'. 421 ls_fieldcatalog-just = 'R'. 422 ls_fieldcatalog-ref_field = 'DMBTR'. 423 ls_fieldcatalog-ref_table = 'BSEG'. 424 APPEND ls_fieldcatalog TO gt_fieldcatalog . 425 426 CLEAR ls_fieldcatalog. 427 ls_fieldcatalog-fieldname = 'FK_SUM'. 428 ls_fieldcatalog-coltext = '总体付款金额'. 429 ls_fieldcatalog-key = ''. 430 ls_fieldcatalog-dd_outlen = '20'. 431 ls_fieldcatalog-outputlen = '20'. 432 ls_fieldcatalog-just = 'R'. 433 ls_fieldcatalog-ref_field = 'DMBTR'. 434 ls_fieldcatalog-ref_table = 'BSEG'. 435 APPEND ls_fieldcatalog TO gt_fieldcatalog . 436 437 CLEAR ls_fieldcatalog. 438 ls_fieldcatalog-fieldname = 'ZZ_SUM'. 439 ls_fieldcatalog-coltext = '总体转资金额'. 440 ls_fieldcatalog-key = ''. 441 ls_fieldcatalog-dd_outlen = '20'. 442 ls_fieldcatalog-outputlen = '20'. 443 ls_fieldcatalog-just = 'R'. 444 ls_fieldcatalog-ref_field = 'DMBTR'. 445 ls_fieldcatalog-ref_table = 'BSEG'. 446 APPEND ls_fieldcatalog TO gt_fieldcatalog . 447 448 CLEAR ls_fieldcatalog. 449 ls_fieldcatalog-fieldname = 'YS_YY'. 450 ls_fieldcatalog-coltext = p_gjahr && '-预算金额'. 451 ls_fieldcatalog-key = ''. 452 ls_fieldcatalog-dd_outlen = '20'. 453 ls_fieldcatalog-outputlen = '20'. 454 ls_fieldcatalog-just = 'R'. 455 ls_fieldcatalog-ref_field = 'DMBTR'. 456 ls_fieldcatalog-ref_table = 'BSEG'. 457 APPEND ls_fieldcatalog TO gt_fieldcatalog . 458 459 CLEAR ls_fieldcatalog. 460 ls_fieldcatalog-fieldname = 'CB_YY'. 461 ls_fieldcatalog-coltext = p_gjahr && '-成本金额'. 462 ls_fieldcatalog-key = ''. 463 ls_fieldcatalog-dd_outlen = '20'. 464 ls_fieldcatalog-outputlen = '20'. 465 ls_fieldcatalog-just = 'R'. 466 ls_fieldcatalog-ref_field = 'DMBTR'. 467 ls_fieldcatalog-ref_table = 'BSEG'. 468 APPEND ls_fieldcatalog TO gt_fieldcatalog . 469 470 CLEAR ls_fieldcatalog. 471 ls_fieldcatalog-fieldname = 'JZ_YY'. 472 ls_fieldcatalog-coltext = p_gjahr && '-结转金额'. 473 ls_fieldcatalog-key = ''. 474 ls_fieldcatalog-dd_outlen = '20'. 475 ls_fieldcatalog-outputlen = '20'. 476 ls_fieldcatalog-just = 'R'. 477 ls_fieldcatalog-ref_field = 'DMBTR'. 478 ls_fieldcatalog-ref_table = 'BSEG'. 479 APPEND ls_fieldcatalog TO gt_fieldcatalog . 480 481 CLEAR ls_fieldcatalog. 482 ls_fieldcatalog-fieldname = 'FP_YY'. 483 ls_fieldcatalog-coltext = p_gjahr && '-发票金额'. 484 ls_fieldcatalog-key = ''. 485 ls_fieldcatalog-dd_outlen = '20'. 486 ls_fieldcatalog-outputlen = '20'. 487 ls_fieldcatalog-just = 'R'. 488 ls_fieldcatalog-ref_field = 'DMBTR'. 489 ls_fieldcatalog-ref_table = 'BSEG'. 490 APPEND ls_fieldcatalog TO gt_fieldcatalog . 491 492 CLEAR ls_fieldcatalog. 493 ls_fieldcatalog-fieldname = 'FK_YY'. 494 ls_fieldcatalog-coltext = p_gjahr && '-付款金额'. 495 ls_fieldcatalog-key = ''. 496 ls_fieldcatalog-dd_outlen = '20'. 497 ls_fieldcatalog-outputlen = '20'. 498 ls_fieldcatalog-just = 'R'. 499 ls_fieldcatalog-ref_field = 'DMBTR'. 500 ls_fieldcatalog-ref_table = 'BSEG'. 501 APPEND ls_fieldcatalog TO gt_fieldcatalog . 502 503 CLEAR ls_fieldcatalog. 504 ls_fieldcatalog-fieldname = 'ZZ_YY'. 505 ls_fieldcatalog-coltext = p_gjahr && '-转资金额'. 506 ls_fieldcatalog-key = ''. 507 ls_fieldcatalog-dd_outlen = '20'. 508 ls_fieldcatalog-outputlen = '20'. 509 ls_fieldcatalog-just = 'R'. 510 ls_fieldcatalog-ref_field = 'DMBTR'. 511 ls_fieldcatalog-ref_table = 'BSEG'. 512 APPEND ls_fieldcatalog TO gt_fieldcatalog . 513 514 CLEAR ls_fieldcatalog. 515 ls_fieldcatalog-fieldname = 'CB_MM'. 516 ls_fieldcatalog-coltext = p_monat && '月-成本金额'. 517 ls_fieldcatalog-key = ''. 518 ls_fieldcatalog-dd_outlen = '20'. 519 ls_fieldcatalog-outputlen = '20'. 520 ls_fieldcatalog-just = 'R'. 521 ls_fieldcatalog-ref_field = 'DMBTR'. 522 ls_fieldcatalog-ref_table = 'BSEG'. 523 APPEND ls_fieldcatalog TO gt_fieldcatalog . 524 525 CLEAR ls_fieldcatalog. 526 ls_fieldcatalog-fieldname = 'JZ_MM'. 527 ls_fieldcatalog-coltext = p_monat && '月-结转金额'. 528 ls_fieldcatalog-key = ''. 529 ls_fieldcatalog-dd_outlen = '20'. 530 ls_fieldcatalog-outputlen = '20'. 531 ls_fieldcatalog-just = 'R'. 532 ls_fieldcatalog-ref_field = 'DMBTR'. 533 ls_fieldcatalog-ref_table = 'BSEG'. 534 APPEND ls_fieldcatalog TO gt_fieldcatalog . 535 536 CLEAR ls_fieldcatalog. 537 ls_fieldcatalog-fieldname = 'FP_MM'. 538 ls_fieldcatalog-coltext = p_monat && '月-发票金额'. 539 ls_fieldcatalog-key = ''. 540 ls_fieldcatalog-dd_outlen = '20'. 541 ls_fieldcatalog-outputlen = '20'. 542 ls_fieldcatalog-just = 'R'. 543 ls_fieldcatalog-ref_field = 'DMBTR'. 544 ls_fieldcatalog-ref_table = 'BSEG'. 545 APPEND ls_fieldcatalog TO gt_fieldcatalog . 546 547 CLEAR ls_fieldcatalog. 548 ls_fieldcatalog-fieldname = 'FK_MM'. 549 ls_fieldcatalog-coltext = p_monat && '月-付款金额'. 550 ls_fieldcatalog-key = ''. 551 ls_fieldcatalog-dd_outlen = '20'. 552 ls_fieldcatalog-outputlen = '20'. 553 ls_fieldcatalog-just = 'R'. 554 ls_fieldcatalog-ref_field = 'DMBTR'. 555 ls_fieldcatalog-ref_table = 'BSEG'. 556 APPEND ls_fieldcatalog TO gt_fieldcatalog . 557 558 CLEAR ls_fieldcatalog. 559 ls_fieldcatalog-fieldname = 'ZZ_MM'. 560 ls_fieldcatalog-coltext = p_monat && '月-转资金额'. 561 ls_fieldcatalog-key = ''. 562 ls_fieldcatalog-dd_outlen = '20'. 563 ls_fieldcatalog-outputlen = '20'. 564 ls_fieldcatalog-just = 'R'. 565 ls_fieldcatalog-ref_field = 'DMBTR'. 566 ls_fieldcatalog-ref_table = 'BSEG'. 567 APPEND ls_fieldcatalog TO gt_fieldcatalog . 568 569 570 ENDFORM. 571 *&---------------------------------------------------------------------* 572 *& Form CREATE_HIERARCHY 573 *&---------------------------------------------------------------------* 574 * text 575 *----------------------------------------------------------------------* 576 FORM create_hierarchy . 577 DATA: lt_nodes TYPE TABLE OF lvc_nkey WITH HEADER LINE, 578 l_cur_node TYPE lvc_nkey, 579 l_former_stufe TYPE prps-stufe, 580 l_index TYPE i, 581 lv_node_key TYPE lvc_nkey. 582 DATA:is_node_layout TYPE lvc_s_layn. 583 DATA:l_node_text TYPE lvc_value. 584 *get data 585 PERFORM frm_get_data. 586 587 SORT lt_data BY sort. 588 LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<fs_data>). 589 IF <fs_data>-stufe = '1'. 590 591 "ALV TREE图标隐藏 592 is_node_layout-n_image = 'BNONE'. 593 is_node_layout-exp_image = 'BNONE'. 594 595 CALL FUNCTION 'CONVERSION_EXIT_ABPSN_OUTPUT' 596 EXPORTING 597 input = <fs_data>-posid 598 IMPORTING 599 output = l_node_text. 600 601 CALL METHOD tree1->add_node 602 EXPORTING 603 i_relat_node_key = '' 604 i_relationship = cl_gui_column_tree=>relat_last_child 605 is_outtab_line = <fs_data> 606 i_node_text = l_node_text 607 is_node_layout = is_node_layout 608 IMPORTING 609 e_new_node_key = lv_node_key. 610 611 <fs_data>-node_key = lv_node_key. 612 ELSE. 613 CLEAR lv_node_key. 614 CONTINUE. 615 ENDIF. 616 LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<fs_data1>) WHERE stufe <> 1 AND pspnr = <fs_data>-pspnr. 617 READ TABLE lt_data INTO ls_data WITH KEY pspnr1 = <fs_data1>-above. 618 IF sy-subrc = 0. 619 "ALV TREE图标隐藏 620 is_node_layout-n_image = 'BNONE'. 621 is_node_layout-exp_image = 'BNONE'. 622 623 CALL FUNCTION 'CONVERSION_EXIT_ABPSN_OUTPUT' 624 EXPORTING 625 input = <fs_data1>-posid 626 IMPORTING 627 output = l_node_text. 628 629 CALL METHOD tree1->add_node 630 EXPORTING 631 i_relat_node_key = ls_data-node_key 632 i_relationship = cl_gui_column_tree=>relat_last_child 633 is_outtab_line = <fs_data1> 634 i_node_text = l_node_text 635 is_node_layout = is_node_layout 636 IMPORTING 637 e_new_node_key = lv_node_key. 638 <fs_data1>-node_key = lv_node_key. 639 ENDIF. 640 ENDLOOP. 641 ENDLOOP. 642 643 * calculate totals 644 CALL METHOD tree1->update_calculations. 645 646 * this method must be called to send the data to the frontend 647 CALL METHOD tree1->frontend_update. 648 649 ENDFORM. 650 651 652 *&---------------------------------------------------------------------* 653 *& Form REGISTER_EVENTS 654 *&---------------------------------------------------------------------* 655 * text 656 *----------------------------------------------------------------------* 657 * --> p1 text 658 * <-- p2 text 659 *----------------------------------------------------------------------* 660 FORM register_events . 661 "注册前端后后端事件 662 DATA: lt_events TYPE cntl_simple_events, 663 l_event TYPE cntl_simple_event, 664 l_event_receiver TYPE REF TO lcl_tree_event_receiver. 665 "获取已注册的前端事件 666 CALL METHOD tree1->get_registered_events 667 IMPORTING 668 events = lt_events. 669 CLEAR l_event. 670 l_event-eventid = cl_gui_column_tree=>eventid_node_double_click. 671 APPEND l_event TO lt_events. 672 673 CLEAR l_event. 674 l_event-eventid = cl_gui_column_tree=>eventid_expand_no_children. 675 APPEND l_event TO lt_events. 676 677 CLEAR l_event. 678 l_event-eventid = cl_gui_column_tree=>eventid_header_click. 679 APPEND l_event TO lt_events. 680 681 CLEAR l_event. 682 l_event-eventid = cl_gui_column_tree=>eventid_item_double_click. 683 APPEND l_event TO lt_events. 684 685 CALL METHOD tree1->set_registered_events 686 EXPORTING 687 events = lt_events 688 EXCEPTIONS 689 cntl_error = 1 690 cntl_system_error = 2 691 illegal_event_combination = 3. 692 IF sy-subrc <> 0. 693 MESSAGE x208(00) WITH 'ERROR'. "#EC NOTEXT 694 ENDIF. 695 696 CREATE OBJECT l_event_receiver. 697 SET HANDLER l_event_receiver->handle_item_double_click FOR tree1. 698 699 ENDFORM. 700 *&---------------------------------------------------------------------* 701 *& Form FRM_YS_DATA 702 *&---------------------------------------------------------------------* 703 * text 704 *----------------------------------------------------------------------* 705 * --> p1 text 706 * <-- p2 text 707 *----------------------------------------------------------------------* 708 FORM frm_ys_sheet USING node_key. 709 DATA: l_value TYPE lvc_value, 710 l_layi TYPE lvc_t_layi, 711 l_layn TYPE lvc_s_layn, 712 lv_time TYPE sy-tabix, 713 lv_xjys TYPE rpsco-wlp01, 714 lv_flg TYPE c, 715 lv_above TYPE prps_co-above. 716 717 CALL METHOD tree1->get_outtab_line 718 EXPORTING 719 i_node_key = node_key 720 IMPORTING 721 e_outtab_line = ls_data 722 e_node_text = l_value 723 et_item_layout = l_layi 724 es_node_layout = l_layn 725 EXCEPTIONS 726 node_not_found = 1 727 OTHERS = 2. 728 IF sy-subrc = 0. 729 CLEAR:gv_text,lv_above. 730 gv_text = ls_data-posid && ls_data-post1. 731 lv_above = ls_data-above. 732 lt_data_tmp = lt_data. 733 *& 1、根据双击行所属项目首层查询BPJA 确定展示条目 734 READ TABLE lt_data INTO ls_data_tmp WITH KEY pspnr = ls_data-pspnr stufe = 1. 735 CHECK sy-subrc = 0. 736 SELECT DISTINCT gjahr 737 INTO TABLE @DATA(lt_gjahr) 738 FROM bpja 739 WHERE objnr = @ls_data_tmp-objnr 740 AND wrttp = '41'. 741 SORT lt_gjahr BY gjahr. 742 743 CLEAR:ls_ys_sheet,lt_ys_sheet,gv_cnz,gv_syz,gv_yfp,gv_ky,gv_bcky, 744 gv_gjahr,gv_sum_bcky,ls_ys_sheet_tmp,ls_ys_sheet_sum,gv_sum_bcky1. 745 746 SORT lt_ys_year BY objnr gjahr. 747 SORT lt_cb_sheet BY posid gjahr. 748 BREAK gxsk_guoyp. 749 LOOP AT lt_gjahr INTO DATA(ls_gjahr). 750 CLEAR:ls_ys_sheet_tmp,ls_data_tmp,lv_flg,gv_gjahr. 751 752 ls_ys_sheet-gjahr = ls_gjahr-gjahr. 753 gv_gjahr = ls_gjahr-gjahr. 754 755 ls_ys_sheet_tmp = ls_ys_sheet. 756 "获取不同年度 实际 承诺 剩余计划 757 PERFORM frm_get_sheet_field_value USING ls_data CHANGING ls_ys_sheet_tmp. 758 759 ls_ys_sheet = ls_ys_sheet_tmp. 760 761 "已分配 = 实际 + 承诺 + 剩余计划 762 ls_ys_sheet-yfp = ls_ys_sheet-sj + ls_ys_sheet-cnz + ls_ys_sheet-syz. 763 "可用(统计值) = 预算 - 已分配 764 ls_ys_sheet-ky = ls_ys_sheet-ys - ls_ys_sheet-yfp. 765 "本层可用预算 766 CLEAR:gv_bcky,lv_time,lv_xjys. 767 "本层预算不为0 768 IF ls_ys_sheet-ys IS NOT INITIAL. 769 "本层可用预算= 可用 - (直接下级预算 - 直接下级预算不为0的已分配) 770 PERFORM frm_get_sheet_bcky USING ls_ys_sheet_tmp ls_data CHANGING gv_bcky. 771 ls_ys_sheet-bcky = ls_ys_sheet-ky - gv_bcky. 772 ELSE. 773 "本层预算为0 找父节点 直到找到 774 "若为首层 没有父节点 则本层预算直接为0 775 IF ls_data-stufe = 1. 776 gv_bcky = 0. 777 ls_ys_sheet-bcky = ls_ys_sheet-ky - gv_bcky. 778 ELSE. 779 CLEAR lv_time. 780 DO . 781 lv_time = lv_time + 1. 782 IF lv_time > 10. 783 EXIT. 784 ENDIF. 785 IF gv_bcky <> 0. 786 EXIT. 787 ENDIF. 788 789 READ TABLE lt_data_tmp INTO ls_data_tmp WITH KEY pspnr1 = lv_above."读取成功则ls_data_tmp变为上层WBS结构 790 IF sy-subrc = 0. 791 "找上层 792 PERFORM frm_get_ys_sheet_up USING ls_data_tmp. 793 * PERFORM frm_get_sheet_bcky USING ls_ys_sheet_tmp ls_data_tmp CHANGING gv_bcky. 794 ENDIF. 795 IF ls_data_tmp-stufe = '1'. 796 EXIT. 797 ENDIF. 798 lv_above = ls_data_tmp-above."赋值后继续寻找ls_data_tmp的上一层 799 ENDDO. 800 ls_ys_sheet-bcky = ls_ys_sheet_tmp-bcky. 801 ENDIF. 802 ENDIF. 803 804 805 806 807 "汇总行相关字段 808 gv_cnz = gv_cnz + ls_ys_sheet-cnz. 809 gv_syz = gv_syz + ls_ys_sheet-syz. 810 gv_yfp = gv_yfp + ls_ys_sheet-yfp. 811 gv_ky = gv_ky + ls_ys_sheet-ky. 812 813 APPEND ls_ys_sheet TO lt_ys_sheet. 814 CLEAR:ls_ys_sheet,ls_ys_sheet_tmp,ls_data_tmp. 815 816 ENDLOOP. 817 818 819 "最后一行 820 ls_ys_sheet-gjahr = '全部'. 821 ls_ys_sheet-ys = ls_data-ys_sum. 822 ls_ys_sheet-sj = ls_data-cb_sum. 823 ls_ys_sheet-cnz = gv_cnz."承诺值 824 ls_ys_sheet-syz = gv_syz."剩余计划值 825 ls_ys_sheet-yfp = ls_ys_sheet-sj + ls_ys_sheet-cnz + ls_ys_sheet-syz."已分配 = 实际 + 承诺 + 剩余计划 826 ls_ys_sheet-ky = ls_ys_sheet-ys - ls_ys_sheet-yfp."gv_ky."可用 = 预算 - 已分配 827 CLEAR:gv_bcky. 828 "本层可用 829 CLEAR:gv_gjahr,gv_bcky,gv_sum_bcky1. 830 831 IF ls_ys_sheet-ys IS NOT INITIAL. 832 CLEAR ls_data_tmp. 833 gv_gjahr = ls_gjahr-gjahr. 834 PERFORM frm_get_sheet_bcky_sum USING ls_ys_sheet ls_data CHANGING gv_bcky. 835 ls_ys_sheet-bcky = ls_ys_sheet-ky - gv_bcky. 836 CLEAR ls_data_tmp. 837 ELSE. 838 CLEAR:lv_time,lv_above,ls_data_tmp,gv_sum_bcky. 839 lv_above = ls_data-above. 840 DO . 841 lv_time = lv_time + 1. 842 IF lv_time > 10. 843 EXIT. 844 ENDIF. 845 IF gv_sum_bcky IS NOT INITIAL. 846 EXIT. 847 ENDIF. 848 * LOOP AT lt_gjahr INTO ls_gjahr. 849 "找上层WBS对应的全部汇总行 即类似重新调用该sheet页签逻辑 850 READ TABLE lt_data_tmp INTO ls_data_sum WITH KEY pspnr1 = lv_above."读取成功则ls_data_tmp变为上层WBS结构 851 IF sy-subrc = 0. 852 * PERFORM frm_ys_sheet USING 853 PERFORM frm_get_sum_sheet."gv_sum_bcky计算 854 ENDIF. 855 lv_above = ls_data_sum-above. 856 gv_sum_bcky1 = gv_sum_bcky1 + gv_sum_bcky. 857 858 * ENDLOOP. 859 "查到首层截止 860 IF ls_data_sum-stufe = '1'. 861 EXIT. 862 ENDIF. 863 ENDDO. 864 ls_ys_sheet-bcky = gv_sum_bcky1. 865 ENDIF. 866 867 APPEND ls_ys_sheet TO lt_ys_sheet. 868 SORT lt_ys_sheet BY gjahr. 869 ENDIF. 870 ENDFORM. 871 *&---------------------------------------------------------------------* 872 *& Form FRM_AUTHORITY_CHECK 873 *&---------------------------------------------------------------------* 874 * text 875 *----------------------------------------------------------------------* 876 * --> p1 text 877 * <-- p2 text 878 *----------------------------------------------------------------------* 879 FORM frm_authority_check . 880 AUTHORITY-CHECK OBJECT 'F_BKPF_BUK' 881 ID 'BUKRS' FIELD p_bukrs. 882 IF sy-subrc NE 0. 883 DATA(lv_mess) = '您没有公司代码' && p_bukrs && '的查询权限' . 884 MESSAGE lv_mess TYPE 'E'. 885 RETURN. 886 ENDIF. 887 ENDFORM. 888 *&---------------------------------------------------------------------* 889 *& Form BUILD_HIERARCHY_HEADER 890 *&---------------------------------------------------------------------* 891 * text 892 *----------------------------------------------------------------------* 893 * --> p1 text 894 * <-- p2 text 895 *----------------------------------------------------------------------* 896 FORM build_hierarchy_header . 897 CLEAR g_hierarchy_header. 898 g_hierarchy_header-heading = '项目/WBS'. 899 g_hierarchy_header-tooltip = '项目/WBS'. 900 g_hierarchy_header-width = 30. 901 g_hierarchy_header-width_pix = ''. 902 ENDFORM. 903 *&---------------------------------------------------------------------* 904 *& Form FRM_GET_DATA 905 *&---------------------------------------------------------------------* 906 * text 907 *----------------------------------------------------------------------* 908 * --> p1 text 909 * <-- p2 text 910 *----------------------------------------------------------------------* 911 FORM frm_get_data . 912 RANGES:wbs_to_select FOR prps-pspnr, 913 wbs_to_select_up FOR prps-pspnr, 914 r_pspnr FOR proj-pspnr. 915 "获取符合条件的项目定义 916 SELECT DISTINCT a~pspnr 917 INTO TABLE @DATA(lt_posid) 918 FROM proj AS a 919 INNER JOIN prps AS b ON a~pspnr = b~psphi 920 WHERE a~pspid IN @s_pspid"项目定义 921 AND b~posid IN @s_posid"WBS元素 922 AND b~prart IN @s_prart 923 AND a~vbukr = @p_bukrs 924 AND b~pbukr = @p_bukrs 925 AND b~loevm = ''."删除标记 926 "根据项目定义获取WBS 927 REFRESH:r_pspnr,wbs_to_select,wbs_to_select_up. 928 CLEAR:gt_prps,ls_cnz,lt_cnz,ls_syz,lt_syz. 929 LOOP AT lt_posid INTO DATA(ls_posid). 930 r_pspnr-sign = 'I'. 931 r_pspnr-option = 'EQ'. 932 r_pspnr-low = ls_posid-pspnr. 933 APPEND r_pspnr. 934 CLEAR r_pspnr. 935 ENDLOOP. 936 SORT r_pspnr. 937 DELETE ADJACENT DUPLICATES FROM r_pspnr COMPARING ALL FIELDS. 938 IF lt_posid IS INITIAL. 939 MESSAGE '没有符合条件的数据' TYPE 'S' DISPLAY LIKE 'E'. 940 RETURN. 941 ENDIF. 942 CALL FUNCTION 'CJDB_FILL_HIERARCHY' 943 TABLES 944 i_proj = r_pspnr[] 945 e_prps_co = gt_prps 946 e_prps_not_yet_read = wbs_to_select 947 e_prps_not_yet_read_up = wbs_to_select_up. 948 IF gt_prps IS NOT INITIAL. 949 LOOP AT gt_prps INTO DATA(gs_prps). 950 ls_data-sort = sy-tabix. 951 "内外码转换 952 CALL FUNCTION 'CONVERSION_EXIT_ABPSP_OUTPUT' 953 EXPORTING 954 input = gs_prps-pspnr 955 IMPORTING 956 output = ls_data-posid. 957 ls_data-pspnr = gs_prps-psphi."项目定义内码 958 ls_data-pspnr1 = gs_prps-pspnr."WBS内码 959 ls_data-down = gs_prps-down. 960 ls_data-above = gs_prps-above. 961 ls_data-stufe = gs_prps-stufe. 962 APPEND ls_data TO lt_data. 963 ENDLOOP. 964 SORT lt_data BY sort. 965 SORT lt_data BY posid stufe prart. 966 967 "含有下级节点的WBS元素 记录其下面所有WBS元素 用于预算sheet页 本层可用预算逻辑 968 PERFORM frm_process_wbs. 969 970 IF lt_data IS NOT INITIAL. 971 "项目定义描述 972 SELECT pspnr,post1 973 INTO TABLE @DATA(lt_proj) 974 FROM proj 975 FOR ALL ENTRIES IN @lt_data 976 WHERE pspnr = @lt_data-pspnr. 977 SORT lt_proj BY pspnr. 978 "WBS元素描述 项目类型 979 SELECT pspnr post1 prart objnr 980 INTO CORRESPONDING FIELDS OF TABLE lt_prps 981 FROM prps 982 FOR ALL ENTRIES IN lt_data 983 WHERE pspnr = lt_data-pspnr1. 984 SORT lt_prps BY pspnr objnr. 985 "项目类型描述 986 SELECT prart,pratx 987 INTO TABLE @DATA(lt_tcj1t) 988 FROM tcj1t 989 WHERE langu = @sy-langu. 990 SORT lt_tcj1t BY prart. 991 992 "总体-预算金额 993 PERFORM frm_get_ys_sum. 994 "总体-成本金额 年度-成本金额 月度-成本金额 995 PERFORM frm_get_cb_sum. 996 "总体-结转金额 年度-结转金额 月度-结转金额 997 PERFORM frm_get_jz_sum. 998 "总体-发票金额 年度-发票金额 月度-发票金额 999 PERFORM frm_get_fp_sum. 1000 "总体-付款金额 年度-付款金额 月度-付款金额 1001 PERFORM frm_get_fk_sum. 1002 "总体-转资金额 年度-转资金额 月度-转资金额 1003 PERFORM frm_get_zz_sum. 1004 1005 "年度-预算金额 1006 PERFORM frm_get_ys_yy. 1007 1008 1009 "数据整理 1010 **&& 1、只是针对当前每条数据对应WBS的金额进行赋值,针对于有下层节点的WBS后续有汇总逻辑 1011 LOOP AT lt_data INTO ls_data. 1012 READ TABLE lt_proj INTO DATA(ls_proj) 1013 WITH KEY pspnr = ls_data-pspnr BINARY SEARCH. 1014 IF sy-subrc = 0. 1015 ls_data-post1 = ls_proj-post1. 1016 ENDIF. 1017 READ TABLE lt_prps INTO ls_prps 1018 WITH KEY pspnr = ls_data-pspnr1 BINARY SEARCH. 1019 IF sy-subrc = 0. 1020 ls_data-post1 = ls_prps-post1. 1021 ls_data-prart = ls_prps-prart. 1022 ls_data-objnr = ls_prps-objnr. 1023 ENDIF. 1024 READ TABLE lt_tcj1t INTO DATA(ls_tcj1t) 1025 WITH KEY prart = ls_data-prart BINARY SEARCH. 1026 IF sy-subrc = 0. 1027 ls_data-pratx = ls_tcj1t-pratx. 1028 ENDIF. 1029 ls_data-rtcur = 'RMB'. 1030 "总体 预算金额 1031 READ TABLE lt_bpge INTO ls_bpge 1032 WITH KEY objnr = ls_data-objnr BINARY SEARCH. 1033 IF sy-subrc = 0. 1034 ls_data-ys_sum = ls_bpge-wlges. 1035 ENDIF. 1036 "总体-成本金额 1037 READ TABLE lt_cb_sum INTO ls_cb_sum 1038 WITH KEY posid = ls_data-posid BINARY SEARCH. 1039 IF sy-subrc = 0. 1040 ls_data-cb_sum = ls_cb_sum-wtgbtr. 1041 ENDIF. 1042 "总体-结转金额 1043 READ TABLE lt_jz_sum INTO ls_jz_sum 1044 WITH KEY posid = ls_data-posid BINARY SEARCH. 1045 IF sy-subrc = 0. 1046 ls_data-jz_sum = ls_jz_sum-wtgbtr. 1047 ENDIF. 1048 "总体-发票金额 1049 READ TABLE lt_fp_sum INTO ls_fp_sum 1050 WITH KEY ps_psp_pnr = ls_data-pspnr1 BINARY SEARCH. 1051 IF sy-subrc = 0. 1052 ls_data-fp_sum = ls_fp_sum-rmwwr. 1053 ENDIF. 1054 "总体-付款金额 1055 READ TABLE lt_fkje_sum INTO ls_fkje_sum 1056 WITH KEY ps_psp_pnr = ls_data-pspnr1 BINARY SEARCH. 1057 IF sy-subrc = 0. 1058 ls_data-fk_sum = ls_fkje_sum-hzje_bwb. 1059 ENDIF. 1060 "总体-转资金额 1061 READ TABLE lt_zzje_sum INTO ls_zzje_sum 1062 WITH KEY posnr = ls_data-pspnr1 BINARY SEARCH. 1063 IF sy-subrc = 0. 1064 ls_data-zz_sum = ls_zzje_sum-anbtr. 1065 ENDIF. 1066 "2023-预算金额 1067 READ TABLE lt_ys_sum INTO ls_ys_sum 1068 WITH KEY objnr = ls_data-pspnr1 BINARY SEARCH. 1069 IF sy-subrc = 0. 1070 ls_data-ys_yy = ls_ys_sum-wljhr. 1071 ENDIF. 1072 "2023-成本金额 1073 READ TABLE lt_cb_year INTO ls_cb_year 1074 WITH KEY posid = ls_data-posid BINARY SEARCH. 1075 IF sy-subrc = 0. 1076 ls_data-cb_yy = ls_cb_year-wtgbtr. 1077 ENDIF. 1078 "2023-结转金额 1079 READ TABLE lt_jz_year INTO ls_jz_year 1080 WITH KEY posid = ls_data-posid BINARY SEARCH. 1081 IF sy-subrc = 0. 1082 ls_data-jz_yy = ls_jz_year-wtgbtr. 1083 ENDIF. 1084 "2023-发票金额 1085 READ TABLE lt_fp_year INTO ls_fp_year 1086 WITH KEY ps_psp_pnr = ls_data-pspnr1 BINARY SEARCH. 1087 IF sy-subrc = 0. 1088 ls_data-fp_yy = ls_fp_year-rmwwr. 1089 ENDIF. 1090 "2023-付款金额 1091 READ TABLE lt_fkje_year INTO ls_fkje_year 1092 WITH KEY ps_psp_pnr = ls_data-pspnr1 BINARY SEARCH. 1093 IF sy-subrc = 0. 1094 ls_data-fk_yy = ls_fkje_year-hzje_bwb. 1095 ENDIF. 1096 "2023-转资金额 1097 READ TABLE lt_zzje_year INTO ls_zzje_year 1098 WITH KEY posnr = ls_data-pspnr1 BINARY SEARCH. 1099 IF sy-subrc = 0. 1100 ls_data-zz_yy = ls_zzje_year-anbtr. 1101 ENDIF. 1102 "月度-成本金额 1103 READ TABLE lt_cb_month INTO ls_cb_month 1104 WITH KEY posid = ls_data-posid BINARY SEARCH. 1105 IF sy-subrc = 0. 1106 ls_data-cb_mm = ls_cb_month-wtgbtr. 1107 ENDIF. 1108 "月度-结转金额 1109 READ TABLE lt_jz_month INTO ls_jz_month 1110 WITH KEY posid = ls_data-posid BINARY SEARCH. 1111 IF sy-subrc = 0. 1112 ls_data-jz_mm = ls_jz_month-wtgbtr. 1113 ENDIF. 1114 "月度-发票金额 1115 READ TABLE lt_fp_month INTO ls_fp_month 1116 WITH KEY ps_psp_pnr = ls_data-pspnr1 BINARY SEARCH. 1117 IF sy-subrc = 0. 1118 ls_data-fp_mm = ls_fp_month-rmwwr. 1119 ENDIF. 1120 "月度-付款金额 1121 READ TABLE lt_fkje_month INTO ls_fkje_month 1122 WITH KEY ps_psp_pnr = ls_data-pspnr1 BINARY SEARCH. 1123 IF sy-subrc = 0. 1124 ls_data-fk_mm = ls_fkje_month-hzje_bwb. 1125 ENDIF. 1126 "年度-转资金额 1127 READ TABLE lt_zzje_month INTO ls_zzje_month 1128 WITH KEY posnr = ls_data-pspnr1 BINARY SEARCH. 1129 IF sy-subrc = 0. 1130 ls_data-zz_mm = ls_zzje_month-anbtr. 1131 ENDIF. 1132 1133 MOVE-CORRESPONDING ls_data TO ls_cnz."预算sheet页签 承诺值字段内表 1134 APPEND ls_cnz TO lt_cnz. 1135 IF ls_data-posid+0(1) = 'V'. 1136 MOVE-CORRESPONDING ls_data TO ls_syz."预算sheet页签 剩余计划值字段内表 1137 APPEND ls_syz TO lt_syz. 1138 ENDIF. 1139 MODIFY lt_data FROM ls_data. 1140 CLEAR ls_cnz. 1141 ENDLOOP. 1142 1143 **&& 2、针对有下层WBS节点的WBS元素相关字段进行汇总 例:首层项目行,所有字段都应该累加其下层所有WBS元素对应值 1144 "根据层级倒序排序从最底层汇总 1145 SORT lt_data BY pspnr pspnr1 DESCENDING stufe DESCENDING. "倒序不要删除 该排序是汇总的关键 从底层向上层汇总 1146 LOOP AT lt_data INTO ls_data. 1147 "存在上层wbs 1148 IF ls_data-above NE ''. "above = 空为首层项目 1149 LOOP AT lt_data ASSIGNING FIELD-SYMBOL(<fs_data>) WHERE pspnr1 = ls_data-above. 1150 "对相关字段进行汇总 1151 <fs_data>-cb_sum = <fs_data>-cb_sum + ls_data-cb_sum."成本金额 1152 <fs_data>-jz_sum = <fs_data>-jz_sum + ls_data-jz_sum."结转金额 1153 <fs_data>-fp_sum = <fs_data>-fp_sum + ls_data-fp_sum."发票金额 1154 <fs_data>-fk_sum = <fs_data>-fk_sum + ls_data-fk_sum."付款金额 1155 <fs_data>-zz_sum = <fs_data>-zz_sum + ls_data-zz_sum."转资金额 1156 1157 <fs_data>-cb_yy = <fs_data>-cb_yy + ls_data-cb_yy. "年度-成本 1158 <fs_data>-jz_yy = <fs_data>-jz_yy + ls_data-jz_yy."年度-结转 1159 <fs_data>-fp_yy = <fs_data>-fp_yy + ls_data-fp_yy."年度-发票 1160 <fs_data>-fk_yy = <fs_data>-fk_yy + ls_data-fk_yy."年度-付款 1161 <fs_data>-zz_yy = <fs_data>-zz_yy + ls_data-zz_yy."年度-转资 1162 1163 <fs_data>-cb_mm = <fs_data>-cb_mm + ls_data-cb_mm. "月度-成本 1164 <fs_data>-jz_mm = <fs_data>-jz_mm + ls_data-jz_mm."月度-结转 1165 <fs_data>-fp_mm = <fs_data>-fp_mm + ls_data-fp_mm."月度-发票 1166 <fs_data>-fk_mm = <fs_data>-fk_mm + ls_data-fk_mm."月度-付款 1167 <fs_data>-zz_mm = <fs_data>-zz_mm + ls_data-zz_mm."月度-转资 1168 ENDLOOP. 1169 ENDIF. 1170 ENDLOOP. 1171 1172 ***& 3、预算sheet页相关内表处理 1173 PERFORM frm_get_ys_sheet. 1174 1175 1176 ENDIF. 1177 1178 ENDIF. 1179 ENDFORM. 1180 1181 *&---------------------------------------------------------------------* 1182 *& Form ADD_NODES 1183 *&---------------------------------------------------------------------* 1184 * text 1185 *----------------------------------------------------------------------* 1186 * -->P_LS_DATA text 1187 * -->P_0592 text 1188 * <--P_L_CUR_NODE text 1189 *----------------------------------------------------------------------* 1190 FORM add_nodes USING ps_wbs TYPE ty_data 1191 p_cnode_key TYPE lvc_nkey 1192 CHANGING p_nnode_key TYPE lvc_nkey. 1193 DATA:is_node_layout TYPE lvc_s_layn. 1194 DATA:l_node_text TYPE lvc_value. 1195 "ALV TREE图标隐藏 1196 is_node_layout-n_image = 'BNONE'. 1197 is_node_layout-exp_image = 'BNONE'. 1198 1199 CALL FUNCTION 'CONVERSION_EXIT_ABPSN_OUTPUT' 1200 EXPORTING 1201 input = ps_wbs-posid 1202 IMPORTING 1203 output = l_node_text. 1204 1205 CALL METHOD tree1->add_node 1206 EXPORTING 1207 i_relat_node_key = p_cnode_key 1208 i_relationship = cl_gui_column_tree=>relat_last_child 1209 i_node_text = l_node_text 1210 is_outtab_line = ps_wbs 1211 is_node_layout = is_node_layout 1212 IMPORTING 1213 e_new_node_key = p_nnode_key. 1214 1215 ENDFORM. 1216 *&---------------------------------------------------------------------* 1217 *& Form FRM_GET_YS_SUM 1218 *&---------------------------------------------------------------------* 1219 * text 1220 *----------------------------------------------------------------------* 1221 * --> p1 text 1222 * <-- p2 text 1223 *----------------------------------------------------------------------* 1224 FORM frm_get_ys_sum . 1225 1226 IF lt_prps IS NOT INITIAL. 1227 SELECT objnr 1228 trgkz 1229 vorga 1230 versn 1231 wlges 1232 INTO TABLE lt_bpge 1233 FROM bpge 1234 FOR ALL ENTRIES IN lt_prps 1235 WHERE objnr = lt_prps-objnr 1236 AND wrttp = '41'. 1237 SORT lt_bpge BY objnr. 1238 ENDIF. 1239 1240 ENDFORM. 1241 *&---------------------------------------------------------------------* 1242 *& Form FRM_GET_YS_YY 1243 *&---------------------------------------------------------------------* 1244 * text 1245 *----------------------------------------------------------------------* 1246 * --> p1 text 1247 * <-- p2 text 1248 *----------------------------------------------------------------------* 1249 FORM frm_get_ys_yy . 1250 IF lt_prps IS NOT INITIAL. 1251 SELECT objnr 1252 gjahr 1253 lednr 1254 trgkz 1255 vorga 1256 wljhr 1257 INTO CORRESPONDING FIELDS OF TABLE lt_bpja 1258 FROM bpja 1259 FOR ALL ENTRIES IN lt_prps 1260 WHERE objnr = lt_prps-objnr 1261 AND wrttp = '41'. 1262 SORT lt_bpja BY objnr gjahr. 1263 1264 CLEAR:ls_ys_sum,lt_ys_sum. 1265 LOOP AT lt_bpja INTO ls_bpja. 1266 IF ls_bpja-gjahr = p_gjahr. 1267 ls_ys_sum-objnr = ls_bpja-objnr. 1268 ls_ys_sum-wljhr = ls_bpja-wljhr. 1269 COLLECT ls_ys_sum INTO lt_ys_sum. 1270 ENDIF. 1271 ENDLOOP. 1272 SORT lt_ys_sum BY objnr. 1273 ENDIF. 1274 ENDFORM. 1275 *&---------------------------------------------------------------------* 1276 *& Form FRM_GET_CB_SUM 1277 *&---------------------------------------------------------------------* 1278 * text 1279 *----------------------------------------------------------------------* 1280 * --> p1 text 1281 * <-- p2 text 1282 *----------------------------------------------------------------------* 1283 FORM frm_get_cb_sum . 1284 DATA:lr_cb TYPE REF TO data. 1285 FIELD-SYMBOLS:<lt_cb> TYPE ANY TABLE. 1286 RANGES:rg_pspid FOR proj-pspid, 1287 rg_budat FOR cobk-budat. 1288 REFRESH:rg_pspid. 1289 IF lt_data IS NOT INITIAL. 1290 LOOP AT lt_data INTO ls_data. 1291 CLEAR:rg_pspid. 1292 IF ls_data-stufe = '1'."项目 1293 CLEAR rg_pspid. 1294 rg_pspid-sign = 'I'. 1295 rg_pspid-option = 'EQ'. 1296 rg_pspid-low = ls_data-posid. 1297 APPEND rg_pspid. 1298 ENDIF. 1299 ENDLOOP. 1300 1301 IF rg_pspid[] IS NOT INITIAL. 1302 SET PARAMETER ID 'CAC' FIELD 'JSGX'. 1303 SET PARAMETER ID 'PDB' FIELD '000000000001'. 1304 cl_salv_bs_runtime_info=>set( EXPORTING display = abap_false metadata = abap_false data = abap_true ). 1305 SUBMIT rkpep003 1306 WITH cn_projn IN rg_pspid[] 1307 WITH p_disvar = '1SAP' 1308 WITH r_budat IN rg_budat[] 1309 EXPORTING LIST TO MEMORY AND RETURN. 1310 IF sy-subrc = 0. 1311 TRY. 1312 cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = lr_cb ). 1313 ASSIGN lr_cb->* TO <lt_cb>. 1314 CATCH cx_salv_bs_sc_runtime_info. 1315 * MESSAGE 'Unable to retrieve ALV data' TYPE 'E'. 1316 ENDTRY. 1317 ENDIF. 1318 cl_salv_bs_runtime_info=>clear_all( ). 1319 ENDIF. 1320 IF <lt_cb> IS NOT INITIAL. 1321 CLEAR:ls_cb,ls_jz,lt_cb,lt_jz,lt_cb_sheet,ls_cb_sheet. 1322 MOVE-CORRESPONDING <lt_cb> TO lt_cb."成本金额 1323 MOVE-CORRESPONDING <lt_cb> TO lt_jz."结转金额 1324 1325 SORT lt_cb. 1326 SORT lt_jz. 1327 DELETE lt_cb WHERE kstar = '8001990000'. 1328 CLEAR:lt_cb_sum,ls_cb_sum,lt_cb_year,ls_cb_year,lt_cb_month,ls_cb_month. 1329 1330 LOOP AT lt_cb INTO ls_cb. 1331 "成本汇总 1332 MOVE-CORRESPONDING ls_cb TO ls_cb_sum."按WBS成本汇总 1333 COLLECT ls_cb_sum INTO lt_cb_sum. 1334 "年度维度 1335 IF ls_cb-gjahr = p_gjahr. 1336 MOVE-CORRESPONDING ls_cb TO ls_cb_year. 1337 COLLECT ls_cb_year INTO lt_cb_year. 1338 ENDIF. 1339 "年度+月份维度 1340 IF ls_cb-gjahr = p_gjahr AND ls_cb-budat+4(2) = p_monat. 1341 MOVE-CORRESPONDING ls_cb TO ls_cb_month. 1342 COLLECT ls_cb_month INTO lt_cb_month. 1343 ENDIF. 1344 "预算sheet页‘实际’字段 1345 MOVE-CORRESPONDING ls_cb TO ls_cb_sheet. 1346 COLLECT ls_cb_sheet INTO lt_cb_sheet. 1347 1348 CLEAR:ls_cb,ls_cb_sum,ls_cb_year,ls_cb_month. 1349 ENDLOOP. 1350 SORT lt_cb_sum BY pspid posid. 1351 SORT lt_cb_year BY pspid posid. 1352 SORT lt_cb_month BY pspid posid. 1353 SORT lt_cb_sheet BY posid posid gjahr. 1354 * LOOP AT lt_cb_sheet INTO ls_cb_sheet. 1355 * READ TABLE lt_cb_sheet_tmp INTO ls_cb_sheet_tmp WITH KEY posid = ls_cb_sheet-posid BINARY SEARCH. 1356 * IF sy-subrc = 0. 1357 * ls_cb_sheet-wtgbtr = ls_cb_sheet_tmp-wtgbtr. 1358 * MODIFY lt_cb_sheet FROM ls_cb_sheet TRANSPORTING wtgbtr. 1359 * ENDIF. 1360 * ENDLOOP. 1361 1362 ENDIF. 1363 ENDIF. 1364 ENDFORM. 1365 *&---------------------------------------------------------------------* 1366 *& Form FRM_GET_JZ_SUM 1367 *&---------------------------------------------------------------------* 1368 * text 1369 *----------------------------------------------------------------------* 1370 * --> p1 text 1371 * <-- p2 text 1372 *----------------------------------------------------------------------* 1373 FORM frm_get_jz_sum . 1374 SORT lt_jz. 1375 DELETE lt_jz WHERE kstar NE '8001990000'. 1376 CLEAR:ls_jz_sum,lt_jz_sum,ls_jz_year,lt_jz_year,ls_jz_month,lt_jz_month. 1377 LOOP AT lt_jz INTO ls_jz. 1378 MOVE-CORRESPONDING ls_jz TO ls_jz_sum."按WBS成本汇总 1379 COLLECT ls_jz_sum INTO lt_jz_sum. 1380 "年度维度 结转金额 1381 IF ls_jz-gjahr = p_gjahr. 1382 MOVE-CORRESPONDING ls_jz TO ls_jz_year. 1383 COLLECT ls_jz_year INTO lt_jz_year. 1384 ENDIF. 1385 "年度+月份维度 1386 IF ls_jz-gjahr = p_gjahr AND ls_jz-budat+4(2) = p_monat. 1387 MOVE-CORRESPONDING ls_jz TO ls_jz_month. 1388 COLLECT ls_jz_month INTO lt_jz_month. 1389 ENDIF. 1390 CLEAR:ls_jz,ls_jz_sum,ls_jz_year,ls_jz_month. 1391 ENDLOOP. 1392 SORT lt_jz_sum BY pspid posid. 1393 SORT lt_jz_year BY pspid posid. 1394 SORT lt_jz_month BY pspid posid. 1395 ENDFORM. 1396 *&---------------------------------------------------------------------* 1397 *& Form FRM_GET_FP_SUM 1398 *&---------------------------------------------------------------------* 1399 * text 1400 *----------------------------------------------------------------------* 1401 * --> p1 text 1402 * <-- p2 text 1403 *----------------------------------------------------------------------* 1404 FORM frm_get_fp_sum . 1405 IF lt_data IS NOT INITIAL. 1406 "根据PSPID查ekkn 1407 SELECT ps_psp_pnr, 1408 ebeln, 1409 ebelp, 1410 zekkn 1411 FROM ekkn 1412 INTO TABLE @DATA(lt_ekkn) 1413 FOR ALL ENTRIES IN @lt_data 1414 WHERE ps_psp_pnr = @lt_data-pspnr1 1415 AND loekz = ''. 1416 1417 SORT lt_ekkn BY ps_psp_pnr ebeln ebelp. 1418 "查询rseg 1419 IF lt_ekkn IS NOT INITIAL. 1420 SELECT a~belnr, 1421 a~gjahr, 1422 a~ebeln, 1423 a~ebelp, 1424 a~buzei, 1425 b~rmwwr, 1426 b~budat 1427 FROM rseg AS a 1428 INNER JOIN rbkp AS b ON a~belnr = b~belnr AND a~gjahr = b~gjahr 1429 FOR ALL ENTRIES IN @lt_ekkn 1430 WHERE a~ebeln = @lt_ekkn-ebeln 1431 AND a~ebelp = @lt_ekkn-ebelp 1432 AND a~bukrs = @p_bukrs 1433 * AND a~gjahr = @p_gjahr 1434 * AND b~gjahr = @p_gjahr 1435 INTO TABLE @DATA(lt_rseg). 1436 SORT lt_rseg BY belnr ebeln ebelp. 1437 ENDIF. 1438 1439 CLEAR:ls_fp_sum,lt_fp_sum,ls_fp_year,lt_fp_year,ls_fp_month,lt_fp_month,ls_belnr,lt_belnr. 1440 LOOP AT lt_ekkn INTO DATA(ls_ekkn). 1441 READ TABLE lt_rseg INTO DATA(ls_resg) WITH KEY ebeln = ls_ekkn-ebeln ebelp = ls_ekkn-ebelp BINARY SEARCH. 1442 IF sy-subrc = 0. 1443 ls_fp_sum-ps_psp_pnr = ls_ekkn-ps_psp_pnr. 1444 ls_fp_sum-rmwwr = ls_resg-rmwwr. 1445 COLLECT ls_fp_sum INTO lt_fp_sum. 1446 "双击项目对应发票sheet页限制发票号 年度 1447 ls_belnr-ps_psp_pnr = ls_ekkn-ps_psp_pnr. 1448 ls_belnr-belnr = ls_resg-belnr. 1449 ls_belnr-gjahr = ls_resg-gjahr. 1450 APPEND ls_belnr TO lt_belnr. 1451 CLEAR ls_belnr. 1452 IF ls_resg-gjahr = p_gjahr. 1453 ls_fp_year-ps_psp_pnr = ls_ekkn-ps_psp_pnr. 1454 ls_fp_year-rmwwr = ls_resg-rmwwr. 1455 COLLECT ls_fp_year INTO lt_fp_year. 1456 ENDIF. 1457 IF ls_resg-gjahr = p_gjahr AND ls_resg-budat+4(2) = p_monat. 1458 ls_fp_month-ps_psp_pnr = ls_ekkn-ps_psp_pnr. 1459 ls_fp_month-rmwwr = ls_resg-rmwwr. 1460 COLLECT ls_fp_month INTO lt_fp_month. 1461 ENDIF. 1462 ENDIF. 1463 ENDLOOP. 1464 SORT lt_fp_sum BY ps_psp_pnr. 1465 SORT lt_fp_year BY ps_psp_pnr. 1466 SORT lt_fp_month BY ps_psp_pnr. 1467 SORT lt_belnr BY ps_psp_pnr belnr. 1468 ENDIF. 1469 ENDFORM. 1470 *&---------------------------------------------------------------------* 1471 *& Form FRM_PROCESS_WBS 1472 *&---------------------------------------------------------------------* 1473 * text 1474 *----------------------------------------------------------------------* 1475 * --> p1 text 1476 * <-- p2 text 1477 *----------------------------------------------------------------------* 1478 FORM frm_process_wbs . 1479 1480 DATA:lt_pspnr_tmp TYPE TABLE OF ty_pspnr, 1481 ls_pspnr_tmp TYPE ty_pspnr, 1482 lt_pspnr_wbs TYPE TABLE OF ty_pspnr_wbs, 1483 ls_pspnr_wbs TYPE ty_pspnr_wbs, 1484 gt_prps_tmp TYPE TABLE OF prps_co. 1485 CLEAR:ls_pspnr_tmp,lt_pspnr_tmp. 1486 "非首层项目 下层WBS下含有子WBS 1487 SORT gt_prps BY psphi stufe DESCENDING. 1488 gt_prps_tmp = gt_prps. 1489 1490 LOOP AT gt_prps INTO DATA(gs_prps) WHERE stufe NE 1 AND down NE ''. 1491 ls_pspnr_wbs-pspnr = gs_prps-pspnr. 1492 *** "子WBS包含自身 汇总金额时使用 1493 CLEAR:ls_pspnr_tmp,lt_pspnr_tmp. 1494 "根据wbs 找出其下面所有子节点 1495 LOOP AT gt_prps_tmp INTO DATA(gs_prps_tmp) WHERE above = gs_prps-pspnr AND psphi = gs_prps-psphi. 1496 CLEAR:ls_pspnr_tmp. 1497 1498 CALL FUNCTION 'CONVERSION_EXIT_ABPSP_OUTPUT' 1499 EXPORTING 1500 input = gs_prps_tmp-pspnr 1501 IMPORTING 1502 output = ls_pspnr_tmp-posid. 1503 1504 ls_pspnr_tmp-pspnr = gs_prps_tmp-pspnr. 1505 ls_pspnr_tmp-stufe = gs_prps_tmp-stufe. 1506 APPEND ls_pspnr_tmp TO lt_pspnr_tmp. 1507 "查询子节点下是否存在子节点 1508 READ TABLE lt_pspnr_wbs INTO DATA(ls_wbs_tmp) WITH KEY pspnr = gs_prps_tmp-pspnr. 1509 IF sy-subrc = 0. 1510 LOOP AT ls_wbs_tmp-pspnr_list INTO DATA(ls_list). 1511 APPEND ls_list TO lt_pspnr_tmp. 1512 ENDLOOP. 1513 ENDIF. 1514 "减少内表数据 优化 1515 DELETE gt_prps_tmp WHERE pspcode = gs_prps_tmp-pspcode. 1516 ENDLOOP. 1517 1518 SORT lt_pspnr_tmp. 1519 DELETE ADJACENT DUPLICATES FROM lt_pspnr_tmp COMPARING ALL FIELDS. 1520 1521 ls_pspnr_wbs-pspnr_list = lt_pspnr_tmp. 1522 APPEND ls_pspnr_wbs TO lt_pspnr_wbs. 1523 CLEAR:ls_pspnr_wbs,lt_pspnr_tmp. 1524 ENDLOOP. 1525 1526 SORT lt_pspnr_wbs BY pspnr. 1527 1528 LOOP AT lt_data INTO ls_data. 1529 IF ls_data-stufe = '1' AND ls_data-down NE ''. 1530 "首层 list表为该项目下所有WBS 不包含本层 1531 LOOP AT gt_prps INTO gs_prps WHERE psphi = ls_data-pspnr AND pspnr NE ls_data-pspnr1. 1532 CALL FUNCTION 'CONVERSION_EXIT_ABPSP_OUTPUT' 1533 EXPORTING 1534 input = gs_prps-pspnr 1535 IMPORTING 1536 output = ls_pspnr_tmp-posid. 1537 ls_pspnr_tmp-pspnr = gs_prps-pspnr. 1538 ls_pspnr_tmp-stufe = gs_prps-stufe. 1539 APPEND ls_pspnr_tmp TO lt_pspnr_tmp. 1540 CLEAR ls_pspnr_tmp. 1541 ENDLOOP. 1542 SORT lt_pspnr_tmp BY posid pspnr. 1543 ls_data-pspnr_list = lt_pspnr_tmp. 1544 ls_data-pspnr_list1 = lt_pspnr_tmp. 1545 ENDIF. 1546 IF ls_data-stufe NE '1' AND ls_data-down NE ''. 1547 READ TABLE lt_pspnr_wbs INTO ls_pspnr_wbs WITH KEY pspnr = ls_data-pspnr1 BINARY SEARCH. 1548 IF sy-subrc = 0. 1549 ls_data-pspnr_list = ls_pspnr_wbs-pspnr_list. 1550 ls_data-pspnr_list1 = ls_pspnr_wbs-pspnr_list. 1551 ENDIF. 1552 ENDIF. 1553 "包含当前父节点 1554 CLEAR:ls_pspnr_tmp,lt_pspnr_tmp. 1555 ls_pspnr_tmp-posid = ls_data-posid. 1556 ls_pspnr_tmp-pspnr = ls_data-pspnr1. 1557 ls_pspnr_tmp-stufe = ls_data-stufe. 1558 APPEND ls_pspnr_tmp TO ls_data-pspnr_list1. 1559 SORT ls_data-pspnr_list1 BY posid pspnr. 1560 MODIFY lt_data FROM ls_data TRANSPORTING pspnr_list pspnr_list1. 1561 ENDLOOP. 1562 ENDFORM. 1563 *&---------------------------------------------------------------------* 1564 *& Form FRM_GET_FK_SUM 1565 *&---------------------------------------------------------------------* 1566 * text 1567 *----------------------------------------------------------------------* 1568 * --> p1 text 1569 * <-- p2 text 1570 *----------------------------------------------------------------------* 1571 FORM frm_get_fk_sum . 1572 IF lt_data IS NOT INITIAL. 1573 "根据PSPID查ekkn 1574 SELECT ps_psp_pnr, 1575 ebeln, 1576 ebelp, 1577 zekkn 1578 FROM ekkn 1579 INTO TABLE @DATA(lt_ekkn) 1580 FOR ALL ENTRIES IN @lt_data 1581 WHERE ps_psp_pnr = @lt_data-pspnr1 1582 AND loekz = ''. 1583 SORT lt_ekkn BY ps_psp_pnr ebeln ebelp. 1584 "查询资金支付 付款金额 1585 SELECT a~ebeln, 1586 a~ebelp, 1587 b~applyno, 1588 b~apply_item, 1589 b~gjahr, 1590 b~monat, 1591 b~hzje_bwb 1592 FROM ztyfit00050 AS a 1593 INNER JOIN ztyfit00030 AS b ON a~bukrs = b~bukrs AND a~applyno = b~applyno AND a~apply_item = b~apply_item 1594 FOR ALL ENTRIES IN @lt_ekkn 1595 WHERE a~ebeln = @lt_ekkn-ebeln 1596 AND a~ebelp = @lt_ekkn-ebelp 1597 AND b~status IN ('07','11','21') 1598 AND a~bukrs = @p_bukrs 1599 INTO TABLE @DATA(lt_hzje). 1600 * AND a~gjahr = p_gjahr. 1601 SORT lt_hzje BY ebeln ebelp. 1602 CLEAR:ls_fkje_sum,ls_fkje_year,ls_fkje_month,lt_fkje_sum,lt_fkje_year,lt_fkje_month,ls_applyno,lt_applyno. 1603 LOOP AT lt_ekkn INTO DATA(ls_ekkn). 1604 READ TABLE lt_hzje INTO DATA(ls_hzje) WITH KEY ebeln = ls_ekkn-ebeln ebelp = ls_ekkn-ebelp BINARY SEARCH. 1605 IF sy-subrc = 0. 1606 ls_fkje_sum-ps_psp_pnr = ls_ekkn-ps_psp_pnr. 1607 ls_fkje_sum-hzje_bwb = ls_hzje-hzje_bwb. 1608 COLLECT ls_fkje_sum INTO lt_fkje_sum. 1609 ls_applyno-ps_psp_pnr = ls_ekkn-ps_psp_pnr. 1610 ls_applyno-applyno = ls_hzje-applyno. 1611 APPEND ls_applyno TO lt_applyno. 1612 CLEAR ls_applyno. 1613 IF ls_hzje-gjahr = p_gjahr. 1614 ls_fkje_year-ps_psp_pnr = ls_ekkn-ps_psp_pnr. 1615 ls_fkje_year-hzje_bwb = ls_hzje-hzje_bwb.. 1616 COLLECT ls_fkje_year INTO lt_fkje_year. 1617 ENDIF. 1618 IF ls_hzje-gjahr = p_gjahr AND ls_hzje-monat = p_monat. 1619 ls_fkje_month-ps_psp_pnr = ls_ekkn-ps_psp_pnr. 1620 ls_fkje_month-hzje_bwb = ls_hzje-hzje_bwb.. 1621 COLLECT ls_fkje_month INTO lt_fkje_month. 1622 ENDIF. 1623 ENDIF. 1624 ENDLOOP. 1625 SORT lt_fkje_sum BY ps_psp_pnr. 1626 SORT lt_fkje_year BY ps_psp_pnr. 1627 SORT lt_fkje_month BY ps_psp_pnr. 1628 SORT lt_applyno BY ps_psp_pnr. 1629 ENDIF. 1630 ENDFORM. 1631 *&---------------------------------------------------------------------* 1632 *& Form FRM_GET_ZZ_SUM 1633 *&---------------------------------------------------------------------* 1634 * text 1635 *----------------------------------------------------------------------* 1636 * --> p1 text 1637 * <-- p2 text 1638 *----------------------------------------------------------------------* 1639 FORM frm_get_zz_sum . 1640 IF lt_data IS NOT INITIAL. 1641 SELECT a~posnr, 1642 b~anln1, 1643 b~anln2, 1644 b~gjahr, 1645 b~monat, 1646 b~lnran, 1647 c~afabe, 1648 c~zujhr, 1649 c~zucod, 1650 c~anbtr 1651 FROM anla AS a 1652 INNER JOIN anek AS b ON a~bukrs = b~bukrs AND a~anln1 = b~anln1 AND a~anln2 = b~anln2 1653 INNER JOIN anep AS c ON b~bukrs = c~bukrs AND b~anln1 = c~anln1 AND b~anln2 = c~anln2 AND b~gjahr = c~gjahr AND b~lnran = c~lnran 1654 FOR ALL ENTRIES IN @lt_data 1655 WHERE a~posnr = @lt_data-pspnr1 1656 AND a~anln1 NOT LIKE '3%' 1657 AND c~afabe = '1' 1658 AND c~bwasl IN ('300','310','320','330','341','346') 1659 INTO TABLE @DATA(lt_zz) . 1660 1661 SORT lt_zz BY posnr. 1662 CLEAR:ls_zzje_sum,lt_zzje_sum,ls_zzje_year,lt_zzje_year,ls_zzje_month,lt_zzje_month. 1663 LOOP AT lt_zz INTO DATA(ls_zz). 1664 ls_zzje_sum-posnr = ls_zz-posnr. 1665 ls_zzje_sum-anbtr = ls_zz-anbtr. 1666 COLLECT ls_zzje_sum INTO lt_zzje_sum. 1667 IF ls_zz-gjahr = p_gjahr. 1668 ls_zzje_year-posnr = ls_zz-posnr. 1669 ls_zzje_year-anbtr = ls_zz-anbtr. 1670 COLLECT ls_zzje_year INTO lt_zzje_year. 1671 ENDIF. 1672 IF ls_zz-gjahr = p_gjahr AND ls_zz-monat = p_monat. 1673 ls_zzje_month-posnr = ls_zz-posnr. 1674 ls_zzje_month-anbtr = ls_zz-anbtr. 1675 COLLECT ls_zzje_month INTO lt_zzje_month. 1676 ENDIF. 1677 ENDLOOP. 1678 ENDIF. 1679 ENDFORM. 1680 *&---------------------------------------------------------------------* 1681 *& Form FRM_REFRESH_ALV 1682 *&---------------------------------------------------------------------* 1683 * text 1684 *----------------------------------------------------------------------* 1685 * -->P_GV_SHEET text 1686 *----------------------------------------------------------------------* 1687 FORM frm_refresh_alv USING gv_sheet. 1688 DATA: lr_grid TYPE REF TO cl_gui_alv_grid. 1689 CASE gv_sheet. 1690 WHEN 2. 1691 lr_grid = go_grid_102. 1692 WHEN 3. 1693 lr_grid = go_grid_103. 1694 WHEN 4. 1695 lr_grid = go_grid_104. 1696 WHEN 5. 1697 lr_grid = go_grid_105. 1698 WHEN 6. 1699 lr_grid = go_grid_106. 1700 WHEN 7. 1701 lr_grid = go_grid_107. 1702 1703 WHEN OTHERS. 1704 ENDCASE. 1705 CALL METHOD lr_grid->refresh_table_display 1706 EXPORTING 1707 i_soft_refresh = 'X'. 1708 "刷新子屏幕101 显示GV_TEXT 1709 CLEAR gv_zrefresh. 1710 DATA:pa_ucomm TYPE sy-ucomm VALUE 'ZREFRESH'. 1711 1712 cl_gui_cfw=>set_new_ok_code( pa_ucomm ). 1713 ENDFORM. 1714 *&---------------------------------------------------------------------* 1715 *& Form FRM_ALV_DISPLAY_102 1716 *&---------------------------------------------------------------------* 1717 * text 1718 *----------------------------------------------------------------------* 1719 * --> p1 text 1720 * <-- p2 text 1721 *----------------------------------------------------------------------* 1722 FORM frm_alv_display_102 . 1723 DATA: lo_event TYPE REF TO lcl_tree_event_receiver. 1724 1725 DATA: ls_layout TYPE lvc_s_layo. 1726 1727 1728 ls_layout-sel_mode = 'D'. 1729 * ls_layout-cwidth_opt = 'X'. 1730 * ls_layout-no_toolbar = 'X'. 1731 REFRESH lt_fieldcat_102. 1732 PERFORM build_fieldcat_main_102 CHANGING lt_fieldcat_102. 1733 CALL METHOD go_grid_102->set_table_for_first_display 1734 EXPORTING 1735 is_layout = ls_layout 1736 i_save = 'A' 1737 CHANGING 1738 it_outtab = lt_ys_sheet 1739 it_fieldcatalog = lt_fieldcat_102. 1740 ENDFORM. 1741 *&---------------------------------------------------------------------* 1742 *& Form BUILD_FIELDCAT_MAIN_102 1743 *&---------------------------------------------------------------------* 1744 * text 1745 *----------------------------------------------------------------------* 1746 * <--P_LT_FIELDCAT_102 text 1747 *----------------------------------------------------------------------* 1748 FORM build_fieldcat_main_102 CHANGING pt_fieldcat TYPE lvc_t_fcat. 1749 DATA: ls_fieldcat TYPE lvc_s_fcat. 1750 1751 DEFINE mac_fieldcat. 1752 CLEAR ls_fieldcat. 1753 ls_fieldcat-col_pos = &1. 1754 ls_fieldcat-fieldname = &2. 1755 1756 ls_fieldcat-scrtext_s = 1757 ls_fieldcat-scrtext_m = 1758 ls_fieldcat-coltext = 1759 ls_fieldcat-scrtext_l = &3. 1760 1761 ls_fieldcat-edit = &4. 1762 ls_fieldcat-outputlen = &5. 1763 ls_fieldcat-ref_table = &6. 1764 ls_fieldcat-ref_field = &7. 1765 ls_fieldcat-checkbox = &8. 1766 APPEND ls_fieldcat TO pt_fieldcat. 1767 END-OF-DEFINITION. 1768 1769 mac_fieldcat 1 'GJAHR' '年度' space '10' space space space. 1770 mac_fieldcat 2 'YS' '预算' space '15' space space space. 1771 mac_fieldcat 3 'SJ' '实际' space '15' space space space. 1772 mac_fieldcat 4 'CNZ' '承诺' space '15' space space space. 1773 mac_fieldcat 5 'SYZ' '剩余计划' space '15' space space space. 1774 mac_fieldcat 6 'YFP' '已分配' space '15' space space space. 1775 mac_fieldcat 7 'KY' '可用' space '15' space space space. 1776 mac_fieldcat 8 'BCKY' '本层可用' space '15' space space space. 1777 ENDFORM. 1778 *&---------------------------------------------------------------------* 1779 *& Form FRM_GET_YS_SHEET 1780 *&---------------------------------------------------------------------* 1781 * text 1782 *----------------------------------------------------------------------* 1783 * --> p1 text 1784 * <-- p2 text 1785 *----------------------------------------------------------------------* 1786 FORM frm_get_ys_sheet . 1787 CLEAR:ls_ys_year,lt_ys_year,ls_cnz_sum,lt_cnz_sum. 1788 "预算sheet页 实际金额字段内表 1789 * LOOP AT lt_cb_sheet INTO ls_cb_sheet. 1790 * READ TABLE lt_data INTO ls_data WITH KEY posid = ls_cb_sheet-posid. 1791 * IF sy-subrc = 0. 1792 * ls_cb_sheet-stufe = ls_data-stufe. 1793 * ls_cb_sheet-above = ls_data-above. 1794 * ls_cb_sheet-down = ls_data-down. 1795 * ls_cb_sheet-pspnr1 = ls_data-pspnr1. 1796 * MODIFY lt_cb_sheet FROM ls_cb_sheet TRANSPORTING stufe above down pspnr1. 1797 * ENDIF. 1798 * ENDLOOP. 1799 "预算列 内表处理 1800 LOOP AT lt_bpja INTO ls_bpja. "WHERE objnr = ls_data-objnr. 1801 ls_ys_year-objnr = ls_bpja-objnr. 1802 ls_ys_year-gjahr = ls_bpja-gjahr. 1803 ls_ys_year-wljhr = ls_bpja-wljhr. 1804 COLLECT ls_ys_year INTO lt_ys_year. 1805 ENDLOOP. 1806 SORT lt_ys_year BY objnr gjahr. 1807 SORT lt_cb_sheet BY pspid posid DESCENDING stufe DESCENDING. 1808 "实际列 成本 汇总下层有WBS的项目 1809 * LOOP AT lt_cb_sheet INTO ls_cb_sheet. 1810 * "存在上层wbs 下层WBS金额汇总到上层WBS金额上进行累加 1811 * IF ls_cb_sheet-above NE ''. "above = 空为首层项目 1812 * LOOP AT lt_cb_sheet ASSIGNING FIELD-SYMBOL(<fs_cb>) WHERE pspnr1 = ls_cb_sheet-above AND gjahr = ls_cb_sheet-gjahr. 1813 * IF <fs_cb> IS ASSIGNED. 1814 * "对相关字段进行汇总 1815 * <fs_cb>-wtgbtr = <fs_cb>-wtgbtr + ls_cb_sheet-wtgbtr. 1816 * ENDIF. 1817 * ENDLOOP. 1818 * ENDIF. 1819 * ENDLOOP. 1820 1821 "承诺值列 1822 SORT lt_cnz BY posid stufe objnr. 1823 IF lt_cnz IS NOT INITIAL. 1824 SELECT objnr,lednr,trgkz,gjahr,acpos,vorga,versn,abkat,geber,twaer,perbl, 1825 wlp01,wlp02,wlp03,wlp04,wlp05,wlp06,wlp07,wlp08,wlp09,wlp10,wlp11, 1826 wlp12,wlp13,wlp14,wlp15,wlp16 1827 FROM rpsco 1828 INTO TABLE @DATA(lt_rpsco1) 1829 FOR ALL ENTRIES IN @lt_cnz 1830 WHERE objnr = @lt_cnz-objnr 1831 AND wrttp IN ('21','22'). 1832 "汇总 1833 SORT lt_cnz BY objnr. 1834 LOOP AT lt_rpsco1 INTO DATA(ls_rpsco1). 1835 READ TABLE lt_cnz INTO ls_cnz WITH KEY objnr = ls_rpsco1-objnr BINARY SEARCH. 1836 IF sy-subrc = 0. 1837 MOVE-CORRESPONDING ls_cnz TO ls_cnz_sum. 1838 ls_cnz_sum-gjahr = ls_rpsco1-gjahr. 1839 ls_cnz_sum-cnz = ls_rpsco1-wlp01 + ls_rpsco1-wlp02 + ls_rpsco1-wlp03 + ls_rpsco1-wlp04 + ls_rpsco1-wlp05 + ls_rpsco1-wlp06 + 1840 ls_rpsco1-wlp07 + ls_rpsco1-wlp08 + ls_rpsco1-wlp09 + ls_rpsco1-wlp10 + ls_rpsco1-wlp11 + ls_rpsco1-wlp12 + 1841 ls_rpsco1-wlp13 + ls_rpsco1-wlp14 + ls_rpsco1-wlp15 + ls_rpsco1-wlp16. 1842 COLLECT ls_cnz_sum INTO lt_cnz_sum. 1843 CLEAR ls_cnz_sum. 1844 ENDIF. 1845 ENDLOOP. 1846 * SORT lt_cnz_sum BY posid DESCENDING stufe DESCENDING gjahr."累加排序 1847 * LOOP AT lt_cnz_sum INTO ls_cnz_sum. 1848 * IF ls_cnz_sum-above NE ''. 1849 * LOOP AT lt_cnz_sum ASSIGNING FIELD-SYMBOL(<fs_cnz>) WHERE pspnr1 = ls_cnz_sum-above AND gjahr = ls_cnz_sum-gjahr. 1850 * IF <fs_cnz> IS ASSIGNED. 1851 * <fs_cnz>-cnz = <fs_cnz>-cnz + ls_cnz_sum-cnz. 1852 * ENDIF. 1853 * ENDLOOP. 1854 * ENDIF. 1855 * ENDLOOP. 1856 SORT lt_cnz_sum BY posid stufe gjahr. 1857 ENDIF. 1858 1859 "剩余计划值 1860 SORT lt_syz BY posid stufe objnr. 1861 IF lt_syz IS NOT INITIAL. 1862 SELECT a~pspel,a~objnr,b~lednr,b~wrttp,b~trgkz,b~gjahr,b~acpos,b~vorga,b~versn,b~abkat,b~geber, 1863 b~twaer,b~perbl,b~wlp01,b~wlp02,b~wlp03,b~wlp04,b~wlp05,b~wlp06,b~wlp07,b~wlp08,b~wlp09, 1864 b~wlp10,b~wlp11,b~wlp12,b~wlp13,b~wlp14,b~wlp15,b~wlp16 1865 FROM aufk AS a 1866 INNER JOIN rpsco AS b ON a~objnr = b~objnr 1867 INTO TABLE @DATA(lt_aufk) 1868 FOR ALL ENTRIES IN @lt_syz 1869 WHERE a~pspel = @lt_syz-pspnr1 1870 AND a~bukrs = @p_bukrs 1871 AND a~idat2 IS NULL 1872 AND b~wrttp IN ('1','4'). 1873 SORT lt_aufk BY pspel. 1874 CLEAR:ls_syz_sum,lt_syz_sum. 1875 LOOP AT lt_aufk INTO DATA(ls_aufk). 1876 READ TABLE lt_syz INTO ls_syz WITH KEY posid = ls_aufk-pspel BINARY SEARCH. 1877 IF sy-subrc = 0. 1878 MOVE-CORRESPONDING ls_syz TO ls_syz_sum. 1879 IF ls_aufk-wrttp = '4'. 1880 ls_aufk-wlp01 = -1 * ls_aufk-wlp01. 1881 ls_aufk-wlp02 = -1 * ls_aufk-wlp02. 1882 ls_aufk-wlp03 = -1 * ls_aufk-wlp03. 1883 ls_aufk-wlp04 = -1 * ls_aufk-wlp04. 1884 ls_aufk-wlp05 = -1 * ls_aufk-wlp05. 1885 ls_aufk-wlp06 = -1 * ls_aufk-wlp06. 1886 ls_aufk-wlp07 = -1 * ls_aufk-wlp07. 1887 ls_aufk-wlp08 = -1 * ls_aufk-wlp08. 1888 ls_aufk-wlp09 = -1 * ls_aufk-wlp09. 1889 ls_aufk-wlp10 = -1 * ls_aufk-wlp10. 1890 ls_aufk-wlp11 = -1 * ls_aufk-wlp11. 1891 ls_aufk-wlp12 = -1 * ls_aufk-wlp12. 1892 ls_aufk-wlp13 = -1 * ls_aufk-wlp13. 1893 ls_aufk-wlp14 = -1 * ls_aufk-wlp14. 1894 ls_aufk-wlp15 = -1 * ls_aufk-wlp15. 1895 ls_aufk-wlp16 = -1 * ls_aufk-wlp16. 1896 ENDIF. 1897 ls_syz_sum-gjahr = ls_aufk-gjahr. 1898 ls_syz_sum-cnz = ls_aufk-wlp01 + ls_aufk-wlp02 + ls_aufk-wlp03 + ls_aufk-wlp04 + ls_aufk-wlp05 + ls_aufk-wlp06 + 1899 ls_aufk-wlp07 + ls_aufk-wlp08 + ls_aufk-wlp09 + ls_aufk-wlp10 + ls_aufk-wlp11 + ls_aufk-wlp12 + 1900 ls_aufk-wlp13 + ls_aufk-wlp14 + ls_aufk-wlp15 + ls_aufk-wlp16. 1901 COLLECT ls_syz_sum INTO lt_syz_sum. 1902 CLEAR:ls_aufk,ls_syz,ls_syz_sum. 1903 ENDIF. 1904 ENDLOOP. 1905 SORT lt_syz_sum BY posid DESCENDING stufe DESCENDING gjahr."累加排序 1906 LOOP AT lt_syz_sum INTO ls_syz_sum. 1907 IF ls_syz_sum-above NE ''. 1908 LOOP AT lt_syz_sum ASSIGNING FIELD-SYMBOL(<fs_syz>) WHERE pspnr1 = ls_syz_sum-above AND gjahr = ls_syz_sum-gjahr. 1909 IF <fs_syz> IS ASSIGNED. 1910 <fs_syz>-cnz = <fs_syz>-cnz + ls_syz_sum-cnz. 1911 ENDIF. 1912 ENDLOOP. 1913 ENDIF. 1914 ENDLOOP. 1915 SORT lt_syz_sum BY posid stufe gjahr. 1916 ENDIF. 1917 1918 1919 1920 ENDFORM. 1921 *&---------------------------------------------------------------------* 1922 *& Form FRM_GET_SHEET_BCKY 1923 *&---------------------------------------------------------------------* 1924 * text 1925 *----------------------------------------------------------------------* 1926 * -->P_LS_DATA text 1927 *----------------------------------------------------------------------* 1928 FORM frm_get_sheet_bcky USING ps_sheet TYPE ty_ys_sheet ps_data TYPE ty_data 1929 CHANGING ps_bcky TYPE rpsco-wlp01. 1930 DATA:lv_ys TYPE rpsco-wlp01, 1931 lv_sj TYPE rpsco-wlp01, 1932 lv_cnz TYPE rpsco-wlp01, 1933 lv_syz TYPE rpsco-wlp01, 1934 lv_yfp TYPE rpsco-wlp01, 1935 lv_xjyfp TYPE rpsco-wlp01. "下级已分配 1936 CLEAR:lv_ys,lv_sj,lv_cnz,lv_syz,lv_xjyfp,ls_ys_year. 1937 "预算= ps_sheet-ys 1938 "下级 ps_data-pspnr_list 1939 LOOP AT ps_data-pspnr_list INTO DATA(ps_list) . 1940 "下级 预算 汇总 1941 READ TABLE lt_ys_year INTO ls_ys_year 1942 WITH KEY objnr = ps_list-pspnr gjahr = gv_gjahr . 1943 IF sy-subrc = 0. 1944 lv_ys = lv_ys + ls_ys_year-wljhr. 1945 ELSE. 1946 CONTINUE. 1947 ENDIF. 1948 "下级预算为0 1949 IF ls_ys_year-wljhr IS INITIAL. 1950 CONTINUE. 1951 ENDIF. 1952 "获取预算不为0对应WBS下的所有节点 1953 READ TABLE lt_data INTO DATA(ls_data1) WITH KEY pspnr1 = ps_list-pspnr. 1954 IF sy-subrc = 0. 1955 LOOP AT ls_data1-pspnr_list1 INTO DATA(ls_list1). 1956 "实际 1957 READ TABLE lt_cb_sheet INTO ls_cb_sheet 1958 WITH KEY posid = ls_list1-posid gjahr = gv_gjahr BINARY SEARCH. 1959 IF sy-subrc = 0. 1960 lv_sj = ls_cb_sheet-wtgbtr. 1961 ENDIF. 1962 1963 "承诺值 1964 READ TABLE lt_cnz_sum INTO ls_cnz_sum 1965 WITH KEY posid = ls_list1-posid gjahr = gv_gjahr BINARY SEARCH. 1966 IF sy-subrc = 0. 1967 lv_cnz = ls_cnz_sum-cnz. 1968 ENDIF. 1969 "剩余计划值 1970 READ TABLE lt_syz_sum INTO ls_syz_sum 1971 WITH KEY posid = ls_list1-posid gjahr = gv_gjahr BINARY SEARCH. 1972 IF sy-subrc = 0. 1973 lv_syz = ls_syz_sum-cnz. 1974 ENDIF. 1975 "下级已分配=实际+承诺+剩余计划 1976 IF lv_sj IS NOT INITIAL OR lv_cnz IS NOT INITIAL OR lv_syz IS NOT INITIAL. 1977 lv_xjyfp = lv_xjyfp + ( lv_sj + lv_cnz + lv_syz ). 1978 ENDIF. 1979 1980 CLEAR:lv_sj,lv_cnz,lv_syz,ls_ys_year. 1981 1982 ENDLOOP. 1983 1984 ENDIF. 1985 1986 ENDLOOP. 1987 "直接下级预算 - 已分配 1988 ps_bcky = lv_ys - lv_xjyfp . 1989 ENDFORM. 1990 *&---------------------------------------------------------------------* 1991 *& Form FRM_GET_SHEET_FIELD_VALUE 1992 *&---------------------------------------------------------------------* 1993 * text 1994 *----------------------------------------------------------------------* 1995 * <--P_LS_YS_SHEET text 1996 *----------------------------------------------------------------------* 1997 FORM frm_get_sheet_field_value USING p_s_data TYPE ty_data 1998 CHANGING p_ys_sheet TYPE ty_ys_sheet. 1999 "预算 2000 READ TABLE lt_ys_year INTO ls_ys_year 2001 WITH KEY objnr = p_s_data-objnr gjahr = gv_gjahr BINARY SEARCH. 2002 IF sy-subrc = 0. 2003 p_ys_sheet-ys = ls_ys_year-wljhr. 2004 ENDIF. 2005 2006 SORT lt_cb_sheet BY posid gjahr. 2007 SORT lt_cnz_sum BY posid gjahr. 2008 CLEAR:p_ys_sheet-sj,p_ys_sheet-cnz,p_ys_sheet-cnz. 2009 LOOP AT p_s_data-pspnr_list1 INTO DATA(pr_list). 2010 "实际 2011 READ TABLE lt_cb_sheet INTO ls_cb_sheet WITH KEY posid = pr_list-posid gjahr = gv_gjahr BINARY SEARCH. 2012 IF sy-subrc = 0. 2013 p_ys_sheet-sj = p_ys_sheet-sj + ls_cb_sheet-wtgbtr. 2014 ENDIF. 2015 "承诺值 2016 READ TABLE lt_cnz_sum INTO ls_cnz_sum 2017 WITH KEY posid = pr_list-posid gjahr = gv_gjahr BINARY SEARCH. 2018 IF sy-subrc = 0. 2019 p_ys_sheet-cnz = p_ys_sheet-cnz + ls_cnz_sum-cnz. 2020 ENDIF. 2021 ENDLOOP. 2022 2023 "剩余计划值 2024 READ TABLE lt_syz_sum INTO ls_syz_sum 2025 WITH KEY posid = p_s_data-posid gjahr = gv_gjahr BINARY SEARCH. 2026 IF sy-subrc = 0. 2027 p_ys_sheet-syz = ls_syz_sum-cnz. 2028 ENDIF. 2029 ENDFORM. 2030 *&---------------------------------------------------------------------* 2031 *& Form FRM_ZZ_SHEET 2032 *&---------------------------------------------------------------------* 2033 * text 2034 *----------------------------------------------------------------------* 2035 * -->P_P_NODE_KEY text 2036 *----------------------------------------------------------------------* 2037 FORM frm_zz_sheet USING node_key. 2038 RANGES:r_posid FOR prps-posid, 2039 r_pspnr FOR prps-pspnr. 2040 DATA: l_value TYPE lvc_value, 2041 l_layi TYPE lvc_t_layi, 2042 l_layn TYPE lvc_s_layn, 2043 lv_time TYPE sy-tabix. 2044 CALL METHOD tree1->get_outtab_line 2045 EXPORTING 2046 i_node_key = node_key 2047 IMPORTING 2048 e_outtab_line = ls_data 2049 e_node_text = l_value 2050 et_item_layout = l_layi 2051 es_node_layout = l_layn 2052 EXCEPTIONS 2053 node_not_found = 1 2054 OTHERS = 2. 2055 IF sy-subrc = 0. 2056 CLEAR:gv_text. 2057 gv_text = ls_data-posid && ls_data-post1. 2058 2059 IF ls_data-pspnr_list IS NOT INITIAL. 2060 REFRESH:r_posid,r_pspnr. 2061 CLEAR:r_posid,r_pspnr. 2062 "wbs元素汇总 本层和下级所有wbs 2063 r_posid-sign = 'I'. 2064 r_posid-option = 'EQ'. 2065 r_posid-low = ls_data-posid. 2066 APPEND r_posid. 2067 2068 r_pspnr-sign = 'I'. 2069 r_pspnr-option = 'EQ'. 2070 r_pspnr-low = ls_data-pspnr. 2071 APPEND r_pspnr. 2072 2073 2074 LOOP AT ls_data-pspnr_list INTO DATA(ls_list). 2075 r_posid-sign = 'I'. 2076 r_posid-option = 'EQ'. 2077 r_posid-low = ls_list-posid. 2078 APPEND r_posid. 2079 2080 r_pspnr-sign = 'I'. 2081 r_pspnr-option = 'EQ'. 2082 r_pspnr-low = ls_list-pspnr. 2083 APPEND r_pspnr. 2084 CLEAR:r_posid,r_pspnr. 2085 ENDLOOP. 2086 2087 SELECT a~gjahr a~monat a~budat a~anln1 a~lnran 2088 b~txt50 b~posnr a~sgtxt a~anlu1 a~anlu2 2089 a~tcode a~cpudt a~cputm c~anbtr c~bwasl c~bzdat 2090 INTO CORRESPONDING FIELDS OF TABLE lt_zz 2091 FROM anek AS a 2092 INNER JOIN anla AS b ON a~bukrs = b~bukrs AND a~anln1 = b~anln1 AND a~anln2 = b~anln2 2093 INNER JOIN anep AS c ON a~bukrs = c~bukrs AND a~gjahr = c~gjahr AND a~anln1 = c~anln1 AND a~anln2 = c~anln2 AND a~lnran = c~lnran 2094 WHERE a~bukrs = p_bukrs 2095 AND a~gjahr = p_gjahr 2096 AND a~monat = p_monat 2097 AND b~posnr IN r_posid 2098 AND a~anln1 NOT LIKE '3%' 2099 AND c~bwasl IN ('300','310','320','330','341','346'). 2100 2101 SORT lt_zz. 2102 "资产WBS描述 2103 SELECT pspnr, 2104 posid, 2105 post1 2106 INTO TABLE @DATA(lt_post1) 2107 FROM prps 2108 WHERE posid IN @r_posid. 2109 SORT lt_post1 BY pspnr posid. 2110 "转出卡片描述 2111 IF lt_zz IS NOT INITIAL. 2112 SELECT anln1, 2113 anln2, 2114 txt50 2115 INTO TABLE @DATA(lt_anlu1) 2116 FROM anla 2117 FOR ALL ENTRIES IN @lt_zz 2118 WHERE anln1 = @lt_zz-anlu1 2119 AND anln2 = @lt_zz-anlu2. 2120 2121 SORT lt_anlu1 BY anln1 anln2. 2122 2123 LOOP AT lt_zz INTO ls_zz. 2124 READ TABLE lt_post1 INTO DATA(ls_post1) WITH KEY pspnr = ls_zz-posnr BINARY SEARCH. 2125 IF sy-subrc = 0. 2126 ls_zz-post1 = ls_post1-post1. 2127 ENDIF. 2128 READ TABLE lt_anlu1 INTO DATA(ls_anlu1) WITH KEY anln1 = ls_zz-anlu1 anln2 = ls_zz-anlu2 BINARY SEARCH. 2129 IF sy-subrc = 0. 2130 ls_zz-anlu1_t = ls_anlu1-txt50. 2131 ENDIF. 2132 MODIFY lt_zz FROM ls_zz TRANSPORTING post1 anlu1_t. 2133 ENDLOOP. 2134 ENDIF. 2135 2136 ENDIF. 2137 ENDIF. 2138 ENDFORM. 2139 *&---------------------------------------------------------------------* 2140 *& Form FRM_ALV_DISPLAY_107 2141 *&---------------------------------------------------------------------* 2142 * text 2143 *----------------------------------------------------------------------* 2144 * --> p1 text 2145 * <-- p2 text 2146 *----------------------------------------------------------------------* 2147 FORM frm_alv_display_107 . 2148 DATA: ls_layout TYPE lvc_s_layo. 2149 ls_layout-sel_mode = 'D'. 2150 * ls_layout-cwidth_opt = 'X'. 2151 * ls_layout-no_toolbar = 'X'. 2152 REFRESH lt_fieldcat_107. 2153 PERFORM build_fieldcat_main_107 CHANGING lt_fieldcat_107. 2154 CALL METHOD go_grid_107->set_table_for_first_display 2155 EXPORTING 2156 is_layout = ls_layout 2157 i_save = 'A' 2158 CHANGING 2159 it_outtab = lt_zz 2160 it_fieldcatalog = lt_fieldcat_107. 2161 ENDFORM. 2162 *&---------------------------------------------------------------------* 2163 *& Form BUILD_FIELDCAT_MAIN_107 2164 *&---------------------------------------------------------------------* 2165 * text 2166 *----------------------------------------------------------------------* 2167 * <--P_LT_FIELDCAT_107 text 2168 *----------------------------------------------------------------------* 2169 FORM build_fieldcat_main_107 CHANGING pt_fieldcat TYPE lvc_t_fcat. 2170 DATA: ls_fieldcat TYPE lvc_s_fcat. 2171 2172 DEFINE mac_fieldcat. 2173 CLEAR ls_fieldcat. 2174 ls_fieldcat-col_pos = &1. 2175 ls_fieldcat-fieldname = &2. 2176 2177 ls_fieldcat-scrtext_s = 2178 ls_fieldcat-scrtext_m = 2179 ls_fieldcat-coltext = 2180 ls_fieldcat-scrtext_l = &3. 2181 2182 ls_fieldcat-edit = &4. 2183 ls_fieldcat-outputlen = &5. 2184 ls_fieldcat-ref_table = &6. 2185 ls_fieldcat-ref_field = &7. 2186 ls_fieldcat-checkbox = &8. 2187 APPEND ls_fieldcat TO pt_fieldcat. 2188 END-OF-DEFINITION. 2189 mac_fieldcat 1 'GJAHR' '年度' space '6' space space space. 2190 mac_fieldcat 2 'MONAT' '期间' space '6' space space space. 2191 mac_fieldcat 3 'BUDAT' '过账日期' space '10' space space space. 2192 mac_fieldcat 4 'ANLN1' '资产卡片' space '10' space space space. 2193 mac_fieldcat 5 'TXT50' '资产描述' space '10' space space space. 2194 mac_fieldcat 6 'POSNR' '资产WBS' space '10' space space space. 2195 mac_fieldcat 7 'POST1' '资产WBS描述' space '10' space space space. 2196 mac_fieldcat 8 'ANBTR' '转账金额' space '10' space space space. 2197 mac_fieldcat 9 'SGTXT' '摘要' space '10' space space space. 2198 mac_fieldcat 10 'BWASL' '事务类型' space '10' space space space. 2199 mac_fieldcat 11 'BZDAT' '资产价值日' space '10' space space space. 2200 mac_fieldcat 12 'ANLU1' '转出卡片' space '10' space space space. 2201 mac_fieldcat 13 'ANLU1_T' '转出卡片描述' space '10' space space space. 2202 mac_fieldcat 14 'TCODE' '事务代码' space '10' space space space. 2203 mac_fieldcat 15 'CPUDT' '创建日期' space '10' space space space. 2204 mac_fieldcat 16 'CPUTM' '创建时间' space '10' space space space. 2205 ENDFORM. 2206 *&---------------------------------------------------------------------* 2207 *& Form FRM_CB_SHEET 2208 *&---------------------------------------------------------------------* 2209 * text 2210 *----------------------------------------------------------------------* 2211 * -->P_P_NODE_KEY text 2212 *----------------------------------------------------------------------* 2213 FORM frm_cb_sheet USING node_key. 2214 RANGES:rg_pspid FOR proj-pspid, 2215 rg_pspnr FOR prps-posid, 2216 rg_budat FOR cobk-budat. 2217 REFRESH:rg_pspid,rg_budat,rg_pspnr. 2218 DATA:lr_cb_sheet TYPE REF TO data. 2219 FIELD-SYMBOLS:<lt_cb_sheet> TYPE ANY TABLE. 2220 DATA: l_value TYPE lvc_value, 2221 l_layi TYPE lvc_t_layi, 2222 l_layn TYPE lvc_s_layn. 2223 2224 CALL METHOD tree1->get_outtab_line 2225 EXPORTING 2226 i_node_key = node_key 2227 IMPORTING 2228 e_outtab_line = ls_data 2229 e_node_text = l_value 2230 et_item_layout = l_layi 2231 es_node_layout = l_layn 2232 EXCEPTIONS 2233 node_not_found = 1 2234 OTHERS = 2. 2235 IF sy-subrc = 0. 2236 CLEAR:gv_text. 2237 gv_text = ls_data-posid && ls_data-post1. 2238 "调用CJI3 传入项目定义 本层WBS 记账日期本年年底 2239 rg_pspid-sign = 'I'. 2240 rg_pspid-option = 'EQ'. 2241 CALL FUNCTION 'CONVERSION_EXIT_KONPD_OUTPUT' 2242 EXPORTING 2243 input = ls_data-pspnr 2244 IMPORTING 2245 output = rg_pspid-low. 2246 APPEND rg_pspid. 2247 CLEAR rg_pspid. 2248 2249 "本层WBS 2250 rg_pspnr-sign = 'I'. 2251 rg_pspnr-option = 'EQ'. 2252 rg_pspnr-low = ls_data-posid. 2253 APPEND rg_pspnr. 2254 CLEAR rg_pspnr. 2255 "本年最后一天 2256 rg_budat-sign = 'I'. 2257 rg_budat-option = 'EQ'. 2258 rg_budat-high = p_gjahr && '1231'. 2259 APPEND rg_budat. 2260 CLEAR rg_budat. 2261 2262 cl_salv_bs_runtime_info=>set( EXPORTING display = abap_false metadata = abap_false data = abap_true ). 2263 SUBMIT rkpep003 2264 WITH cn_projn IN rg_pspid[] 2265 WITH cn_pspnr IN rg_pspnr[] 2266 WITH p_disvar = '1SAP' 2267 WITH r_budat IN rg_budat[] 2268 EXPORTING LIST TO MEMORY AND RETURN. 2269 IF sy-subrc = 0. 2270 TRY. 2271 cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = lr_cb_sheet ). 2272 ASSIGN lr_cb_sheet->* TO <lt_cb_sheet>. 2273 CATCH cx_salv_bs_sc_runtime_info. 2274 ENDTRY. 2275 ENDIF. 2276 cl_salv_bs_runtime_info=>clear_all( ). 2277 CHECK <lt_cb_sheet> IS ASSIGNED. 2278 IF <lt_cb_sheet> IS NOT INITIAL. 2279 MOVE-CORRESPONDING <lt_cb_sheet> TO lt_cb_sheet1. 2280 LOOP AT lt_cb_sheet1 INTO ls_cb_sheet1. 2281 CALL FUNCTION 'CONVERSION_EXIT_OBART_OUTPUT' 2282 EXPORTING 2283 input = ls_cb_sheet1-obart 2284 IMPORTING 2285 output = ls_cb_sheet1-obart. 2286 MODIFY lt_cb_sheet1 FROM ls_cb_sheet1 TRANSPORTING obart. 2287 ENDLOOP. 2288 SORT lt_cb_sheet1 BY gjahr perab. 2289 ENDIF. 2290 2291 ENDIF. 2292 ENDFORM. 2293 *&---------------------------------------------------------------------* 2294 *& Form FRM_ALV_DISPLAY_103 2295 *&---------------------------------------------------------------------* 2296 * text 2297 *----------------------------------------------------------------------* 2298 * --> p1 text 2299 * <-- p2 text 2300 *----------------------------------------------------------------------* 2301 FORM frm_alv_display_103 . 2302 DATA: ls_layout TYPE lvc_s_layo. 2303 ls_layout-sel_mode = 'D'. 2304 * ls_layout-cwidth_opt = 'X'. 2305 * ls_layout-no_toolbar = 'X'. 2306 REFRESH lt_fieldcat_103. 2307 PERFORM build_fieldcat_main_103 CHANGING lt_fieldcat_103. 2308 * PERFORM frm_sort_field. 2309 CALL METHOD go_grid_103->set_table_for_first_display 2310 EXPORTING 2311 is_layout = ls_layout 2312 i_save = 'A' 2313 CHANGING 2314 it_outtab = lt_cb_sheet1 2315 it_fieldcatalog = lt_fieldcat_103 2316 it_sort = gt_sort[]. 2317 ENDFORM. 2318 *&---------------------------------------------------------------------* 2319 *& Form BUILD_FIELDCAT_MAIN_103 2320 *&---------------------------------------------------------------------* 2321 * text 2322 *----------------------------------------------------------------------* 2323 * <--P_LT_FIELDCAT_103 text 2324 *----------------------------------------------------------------------* 2325 FORM build_fieldcat_main_103 CHANGING pt_fieldcat TYPE lvc_t_fcat. 2326 DATA: ls_fieldcat TYPE lvc_s_fcat. 2327 2328 DEFINE mac_fieldcat. 2329 CLEAR ls_fieldcat. 2330 ls_fieldcat-col_pos = &1. 2331 ls_fieldcat-fieldname = &2. 2332 2333 ls_fieldcat-scrtext_s = 2334 ls_fieldcat-scrtext_m = 2335 ls_fieldcat-coltext = 2336 ls_fieldcat-scrtext_l = &3. 2337 2338 ls_fieldcat-edit = &4. 2339 ls_fieldcat-outputlen = &5. 2340 ls_fieldcat-ref_table = &6. 2341 ls_fieldcat-ref_field = &7. 2342 ls_fieldcat-do_sum = &8. 2343 APPEND ls_fieldcat TO pt_fieldcat. 2344 END-OF-DEFINITION. 2345 2346 mac_fieldcat 1 'GJAHR' '年度' space '10' space space space. 2347 mac_fieldcat 2 'PERAB' '起始期间' space '10' space space space. 2348 mac_fieldcat 3 'CPUDT' '创建日期' space '10' space space space. 2349 mac_fieldcat 4 'BLDAT' '凭证日期' space '10' space space space. 2350 mac_fieldcat 5 'BUDAT' '过账日期' space '10' space space space. 2351 mac_fieldcat 6 'OBART' '对象类型' space '8' space space space. 2352 mac_fieldcat 7 'OBJID' '对象' space '20' space space space. 2353 mac_fieldcat 8 'KSTAR' '成本要素' space '10' space space space. 2354 mac_fieldcat 9 'CEL_KTXT' '成本要素名称' space '20' space space space. 2355 mac_fieldcat 10 'WKGBTR' '成控范围货币值' space '10' space space 'X'. 2356 mac_fieldcat 11 'KWAER' 'CO货币' space '6' space space space. 2357 mac_fieldcat 12 'WTGBTR' '业务货币值' space '10' space space 'X'. 2358 mac_fieldcat 13 'TWAER' '交易货币' space '6' space space space. 2359 mac_fieldcat 14 'BELNR' '凭证编号' space '10' space space space. 2360 mac_fieldcat 15 'BUZEI' '凭证行' space '10' space space space. 2361 mac_fieldcat 16 'AWTYP' '参考过程' space '10' space space space. 2362 mac_fieldcat 17 'REFBT' '参考凭证类型' space '10' space space space. 2363 mac_fieldcat 18 'BLART' '凭证类型' space '10' space space space. 2364 mac_fieldcat 19 'REFBN' '参考凭证号码' space '10' space space space. 2365 mac_fieldcat 20 'REFBK' '参考公司代码' space '10' space space space. 2366 mac_fieldcat 21 'REFGJ' '参考会计年度' space '10' space space space. 2367 mac_fieldcat 22 'ORGVG' '源业务处理' space '10' space space space. 2368 mac_fieldcat 23 'WSDAT' '起息日' space '10' space space space. 2369 mac_fieldcat 24 'EBELN' '采购凭证号' space '10' space space space. 2370 mac_fieldcat 25 'EBELP' '行项目' space '6' space space space. 2371 mac_fieldcat 26 'EBTXT' '采购订单文本' space '15' space space space. 2372 mac_fieldcat 27 'BUKRS' '公司代码' space '8' space space space. 2373 mac_fieldcat 28 'OBJART_TXT' '对象类型' space '8' space space space. 2374 mac_fieldcat 29 'POSID' 'WBS元素' space '20' space space space. 2375 mac_fieldcat 30 'OBJ_TXT' 'CO对象名' space '10' space space space. 2376 mac_fieldcat 31 'OBJNR_N1' '辅助科目设置_1' space '10' space space space. 2377 mac_fieldcat 32 'GKONT' '冲销科目记账' space '10' space space space. 2378 mac_fieldcat 33 'GKOAR' '冲销科目类型' space '4' space space space. 2379 mac_fieldcat 34 'GKONT_KTXT' '冲转科目名' space '4' space space space. 2380 mac_fieldcat 35 'MATNR' '物料' space '10' space space space. 2381 mac_fieldcat 36 'MAT_TXT' '物料描述' space '10' space space space. 2382 mac_fieldcat 37 'ZZ00011' '核算供应商' space '10' space space space. 2383 ENDFORM. 2384 *&---------------------------------------------------------------------* 2385 *& Form FRM_SORT_FIELD 2386 *&---------------------------------------------------------------------* 2387 * text 2388 *----------------------------------------------------------------------* 2389 * --> p1 text 2390 * <-- p2 text 2391 *----------------------------------------------------------------------* 2392 FORM frm_sort_field . 2393 REFRESH gt_sort. 2394 2395 CLEAR:gt_sort. 2396 gt_sort-spos = 1. 2397 gt_sort-fieldname = 'OBJID'. 2398 gt_sort-up = 'X'. 2399 APPEND gt_sort. 2400 2401 CLEAR:gt_sort. 2402 gt_sort-spos = 2. 2403 gt_sort-fieldname = 'KSTAR'. 2404 gt_sort-up = 'X'. 2405 APPEND gt_sort. 2406 ENDFORM. 2407 *&---------------------------------------------------------------------* 2408 *& Module INITIAL_ALV_104 OUTPUT 2409 *&---------------------------------------------------------------------* 2410 * text 2411 *----------------------------------------------------------------------* 2412 MODULE initial_alv_104 OUTPUT. 2413 IF go_grid_104 IS INITIAL. 2414 CREATE OBJECT go_container_104 2415 EXPORTING 2416 container_name = 'SHEET4'. 2417 2418 CREATE OBJECT go_grid_104 2419 EXPORTING 2420 i_parent = go_container_104. 2421 PERFORM frm_alv_display_104. 2422 2423 2424 ELSE. 2425 CALL METHOD go_grid_104->refresh_table_display 2426 EXPORTING 2427 is_stable = stbl. 2428 ENDIF. 2429 ENDMODULE. 2430 *&---------------------------------------------------------------------* 2431 *& Form FRM_ALV_DISPLAY_104 2432 *&---------------------------------------------------------------------* 2433 * text 2434 *----------------------------------------------------------------------* 2435 * --> p1 text 2436 * <-- p2 text 2437 *----------------------------------------------------------------------* 2438 FORM frm_alv_display_104 . 2439 DATA: ls_layout TYPE lvc_s_layo. 2440 ls_layout-sel_mode = 'D'. 2441 * ls_layout-cwidth_opt = 'X'. 2442 * ls_layout-no_toolbar = 'X'. 2443 REFRESH lt_fieldcat_103. 2444 "结转展示字段与成本相同 2445 PERFORM build_fieldcat_main_103 CHANGING lt_fieldcat_103. 2446 * PERFORM frm_sort_field. 2447 CALL METHOD go_grid_104->set_table_for_first_display 2448 EXPORTING 2449 is_layout = ls_layout 2450 i_save = 'A' 2451 CHANGING 2452 it_outtab = lt_jz_sheet 2453 it_fieldcatalog = lt_fieldcat_103 2454 it_sort = gt_sort[]. 2455 ENDFORM. 2456 *&---------------------------------------------------------------------* 2457 *& Form FRM_JZ_SHEET 2458 *&---------------------------------------------------------------------* 2459 * text 2460 *----------------------------------------------------------------------* 2461 * -->P_P_NODE_KEY text 2462 *----------------------------------------------------------------------* 2463 FORM frm_jz_sheet USING node_key. 2464 RANGES:rg_pspid FOR proj-pspid, 2465 rg_pspnr FOR prps-posid, 2466 rg_budat FOR cobk-budat, 2467 rg_kstar FOR cskb-kstar. 2468 REFRESH:rg_pspid,rg_budat,rg_pspnr,rg_kstar. 2469 DATA:lr_jz_sheet TYPE REF TO data. 2470 FIELD-SYMBOLS:<lt_jz_sheet> TYPE ANY TABLE. 2471 DATA: l_value TYPE lvc_value, 2472 l_layi TYPE lvc_t_layi, 2473 l_layn TYPE lvc_s_layn. 2474 2475 CALL METHOD tree1->get_outtab_line 2476 EXPORTING 2477 i_node_key = node_key 2478 IMPORTING 2479 e_outtab_line = ls_data 2480 e_node_text = l_value 2481 et_item_layout = l_layi 2482 es_node_layout = l_layn 2483 EXCEPTIONS 2484 node_not_found = 1 2485 OTHERS = 2. 2486 IF sy-subrc = 0. 2487 CLEAR:gv_text. 2488 gv_text = ls_data-posid && ls_data-post1. 2489 "调用CJI3 传入项目定义 本层WBS 记账日期本年年底 成本要素 2490 rg_pspid-sign = 'I'. 2491 rg_pspid-option = 'EQ'. 2492 CALL FUNCTION 'CONVERSION_EXIT_KONPD_OUTPUT' 2493 EXPORTING 2494 input = ls_data-pspnr 2495 IMPORTING 2496 output = rg_pspid-low. 2497 APPEND rg_pspid. 2498 CLEAR rg_pspid. 2499 2500 "本层WBS 2501 rg_pspnr-sign = 'I'. 2502 rg_pspnr-option = 'EQ'. 2503 rg_pspnr-low = ls_data-posid. 2504 APPEND rg_pspnr. 2505 CLEAR rg_pspnr. 2506 "本年最后一天 2507 rg_budat-sign = 'I'. 2508 rg_budat-option = 'EQ'. 2509 rg_budat-high = p_gjahr && '1231'. 2510 APPEND rg_budat. 2511 CLEAR rg_budat. 2512 2513 "成本要素 2514 rg_kstar-sign = 'I'. 2515 rg_kstar-option = 'EQ'. 2516 rg_kstar-low = '8001990000'. 2517 APPEND rg_kstar. 2518 CLEAR rg_kstar. 2519 2520 2521 cl_salv_bs_runtime_info=>set( EXPORTING display = abap_false metadata = abap_false data = abap_true ). 2522 SUBMIT rkpep003 2523 WITH cn_projn IN rg_pspid[] 2524 WITH cn_pspnr IN rg_pspnr[] 2525 WITH p_disvar = '1SAP' 2526 WITH r_budat IN rg_budat[] 2527 WITH r_kstar IN rg_kstar[] 2528 EXPORTING LIST TO MEMORY AND RETURN. 2529 IF sy-subrc = 0. 2530 TRY. 2531 cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = lr_jz_sheet ). 2532 ASSIGN lr_jz_sheet->* TO <lt_jz_sheet>. 2533 CATCH cx_salv_bs_sc_runtime_info. 2534 ENDTRY. 2535 ENDIF. 2536 cl_salv_bs_runtime_info=>clear_all( ). 2537 CHECK <lt_jz_sheet> IS ASSIGNED. 2538 IF <lt_jz_sheet> IS NOT INITIAL. 2539 MOVE-CORRESPONDING <lt_jz_sheet> TO lt_jz_sheet. 2540 LOOP AT lt_jz_sheet INTO ls_jz_sheet. 2541 CALL FUNCTION 'CONVERSION_EXIT_OBART_OUTPUT' 2542 EXPORTING 2543 input = ls_jz_sheet-obart 2544 IMPORTING 2545 output = ls_jz_sheet-obart. 2546 MODIFY lt_jz_sheet FROM ls_jz_sheet TRANSPORTING obart. 2547 ENDLOOP. 2548 SORT lt_jz_sheet BY gjahr perab. 2549 ENDIF. 2550 2551 ENDIF. 2552 ENDFORM. 2553 *&---------------------------------------------------------------------* 2554 *& Module INITIAL_ALV_105 OUTPUT 2555 *&---------------------------------------------------------------------* 2556 * text 2557 *----------------------------------------------------------------------* 2558 MODULE initial_alv_105 OUTPUT. 2559 IF go_grid_105 IS INITIAL. 2560 CREATE OBJECT go_container_105 2561 EXPORTING 2562 container_name = 'SHEET5'. 2563 2564 CREATE OBJECT go_grid_105 2565 EXPORTING 2566 i_parent = go_container_105. 2567 PERFORM frm_alv_display_105. 2568 2569 2570 ELSE. 2571 CALL METHOD go_grid_105->refresh_table_display 2572 EXPORTING 2573 is_stable = stbl. 2574 ENDIF. 2575 ENDMODULE. 2576 *&---------------------------------------------------------------------* 2577 *& Form FRM_ALV_DISPLAY_105 2578 *&---------------------------------------------------------------------* 2579 * text 2580 *----------------------------------------------------------------------* 2581 * --> p1 text 2582 * <-- p2 text 2583 *----------------------------------------------------------------------* 2584 FORM frm_alv_display_105 . 2585 DATA: ls_layout TYPE lvc_s_layo. 2586 ls_layout-sel_mode = 'D'. 2587 * ls_layout-cwidth_opt = 'X'. 2588 * ls_layout-no_toolbar = 'X'. 2589 REFRESH lt_fieldcat_105. 2590 PERFORM build_fieldcat_main_105 CHANGING lt_fieldcat_105. 2591 CALL METHOD go_grid_105->set_table_for_first_display 2592 EXPORTING 2593 is_layout = ls_layout 2594 i_save = 'A' 2595 CHANGING 2596 it_outtab = lt_fp_sheet 2597 it_fieldcatalog = lt_fieldcat_105. 2598 ENDFORM. 2599 *&---------------------------------------------------------------------* 2600 *& Form BUILD_FIELDCAT_MAIN_105 2601 *&---------------------------------------------------------------------* 2602 * text 2603 *----------------------------------------------------------------------* 2604 * <--P_LT_FIELDCAT_105 text 2605 *----------------------------------------------------------------------* 2606 FORM build_fieldcat_main_105 CHANGING pt_fieldcat TYPE lvc_t_fcat. 2607 DATA: ls_fieldcat TYPE lvc_s_fcat. 2608 2609 DEFINE mac_fieldcat. 2610 CLEAR ls_fieldcat. 2611 ls_fieldcat-col_pos = &1. 2612 ls_fieldcat-fieldname = &2. 2613 2614 ls_fieldcat-scrtext_s = 2615 ls_fieldcat-scrtext_m = 2616 ls_fieldcat-coltext = 2617 ls_fieldcat-scrtext_l = &3. 2618 2619 ls_fieldcat-edit = &4. 2620 ls_fieldcat-outputlen = &5. 2621 ls_fieldcat-ref_table = &6. 2622 ls_fieldcat-ref_field = &7. 2623 ls_fieldcat-do_sum = &8. 2624 APPEND ls_fieldcat TO pt_fieldcat. 2625 END-OF-DEFINITION. 2626 2627 mac_fieldcat 1 'BELNR' '发票凭证号' space '10' space space space. 2628 mac_fieldcat 2 'GJAHR' '财年' space '4' space space space. 2629 mac_fieldcat 3 'BLART' '凭证类型' space '4' space space space. 2630 mac_fieldcat 4 'BLDAT' '凭证日期' space '10' space space space. 2631 mac_fieldcat 5 'BUDAT' '过账日期' space '10' space space space. 2632 mac_fieldcat 6 'USNAM' '用户名' space '6' space space space. 2633 mac_fieldcat 7 'TCODE' '事务代码' space '8' space space space. 2634 mac_fieldcat 8 'CPUDT' '录入日期' space '10' space space space. 2635 mac_fieldcat 9 'CPUTM' '录入时间' space '10' space space space. 2636 mac_fieldcat 10 'VGART' '交易类型' space '8' space space space. 2637 mac_fieldcat 11 'XBLNR' '参考凭证号' space '10' space space space. 2638 mac_fieldcat 12 'BUKRS' '公司代码' space '8' space space space. 2639 mac_fieldcat 13 'LIFNR' '出票方' space '6' space space space. 2640 mac_fieldcat 14 'WAERS' '货币码' space '6' space space space. 2641 mac_fieldcat 15 'KURSF' '汇率' space '6' space space space. 2642 mac_fieldcat 16 'RMWWR' '发票金额' space '10' space space space. 2643 mac_fieldcat 17 'BEZNK' '未计划的交货成本' space '10' space space space. 2644 mac_fieldcat 18 'WMWST1' '增值税金额' space '10' space space space. 2645 mac_fieldcat 19 'mwskz1' '税码' space '4' space space space. 2646 mac_fieldcat 20 'BKTXT' '凭证抬头文本' space '15' space space space. 2647 mac_fieldcat 21 'ERFNAM' '输入者' space '10' space space space. 2648 mac_fieldcat 22 'SGTXT' '文本' space '15' space space space. 2649 mac_fieldcat 23 'ZFBDT' '付款起算日期' space '10' space space space. 2650 2651 ENDFORM. 2652 *&---------------------------------------------------------------------* 2653 *& Form FRM_FP_SHEET 2654 *&---------------------------------------------------------------------* 2655 * text 2656 *----------------------------------------------------------------------* 2657 * -->P_P_NODE_KEY text 2658 *----------------------------------------------------------------------* 2659 FORM frm_fp_sheet USING node_key. 2660 RANGES:r_belnr FOR bkpf-belnr, 2661 r_gjahr FOR bkpf-gjahr. 2662 DATA:lr_fp_sheet TYPE REF TO data. 2663 FIELD-SYMBOLS:<lt_fp_sheet> TYPE ANY TABLE. 2664 DATA: l_value TYPE lvc_value, 2665 l_layi TYPE lvc_t_layi, 2666 l_layn TYPE lvc_s_layn. 2667 REFRESH:r_belnr,r_gjahr. 2668 CALL METHOD tree1->get_outtab_line 2669 EXPORTING 2670 i_node_key = node_key 2671 IMPORTING 2672 e_outtab_line = ls_data 2673 e_node_text = l_value 2674 et_item_layout = l_layi 2675 es_node_layout = l_layn 2676 EXCEPTIONS 2677 node_not_found = 1 2678 OTHERS = 2. 2679 IF sy-subrc = 0. 2680 CLEAR:gv_text. 2681 gv_text = ls_data-posid && ls_data-post1. 2682 "获取双击行对应的发票、年度 2683 SORT ls_data-pspnr_list BY pspnr. 2684 LOOP AT lt_belnr INTO ls_belnr. 2685 READ TABLE ls_data-pspnr_list INTO DATA(ls_list) WITH KEY pspnr = ls_belnr-ps_psp_pnr BINARY SEARCH. 2686 IF sy-subrc = 0. 2687 CLEAR:r_belnr. 2688 r_belnr-sign = 'I'. 2689 r_belnr-option = 'EQ'. 2690 r_belnr-low = ls_belnr-belnr. 2691 APPEND r_belnr. 2692 2693 CLEAR:r_gjahr. 2694 r_gjahr-sign = 'I'. 2695 r_gjahr-option = 'EQ'. 2696 r_gjahr-low = ls_belnr-gjahr. 2697 APPEND r_gjahr. 2698 ENDIF. 2699 ENDLOOP. 2700 CLEAR ls_list. 2701 SORT r_belnr. 2702 DELETE ADJACENT DUPLICATES FROM r_belnr COMPARING ALL FIELDS. 2703 SORT r_gjahr. 2704 DELETE ADJACENT DUPLICATES FROM r_gjahr COMPARING ALL FIELDS. 2705 cl_salv_bs_runtime_info=>set( EXPORTING display = abap_false metadata = abap_false data = abap_true ). 2706 SUBMIT rmmr1mdi 2707 WITH so_bukrs-low = p_bukrs 2708 WITH so_belnr IN r_belnr 2709 WITH so_gjahr IN r_gjahr 2710 WITH p_iv_ov = 'X' "发票已联机校验 2711 WITH p_st_po = 'X'"已过帐 2712 WITH pa_inv = 'X' "发票 2713 WITH pa_cred = 'X'"贷方凭证 2714 EXPORTING LIST TO MEMORY AND RETURN. 2715 IF sy-subrc = 0. 2716 TRY. 2717 cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = lr_fp_sheet ). 2718 ASSIGN lr_fp_sheet->* TO <lt_fp_sheet>. 2719 CATCH cx_salv_bs_sc_runtime_info. 2720 ENDTRY. 2721 ENDIF. 2722 cl_salv_bs_runtime_info=>clear_all( ). 2723 CHECK <lt_fp_sheet> IS ASSIGNED. 2724 IF <lt_fp_sheet> IS NOT INITIAL. 2725 MOVE-CORRESPONDING <lt_fp_sheet> TO lt_fp_sheet. 2726 ENDIF. 2727 ENDIF. 2728 ENDFORM. 2729 *&---------------------------------------------------------------------* 2730 *& Module INITIAL_ALV_106 OUTPUT 2731 *&---------------------------------------------------------------------* 2732 * text 2733 *----------------------------------------------------------------------* 2734 MODULE initial_alv_106 OUTPUT. 2735 IF go_grid_106 IS INITIAL. 2736 CREATE OBJECT go_container_106 2737 EXPORTING 2738 container_name = 'SHEET6'. 2739 2740 CREATE OBJECT go_grid_106 2741 EXPORTING 2742 i_parent = go_container_106. 2743 PERFORM frm_alv_display_106. 2744 2745 ELSE. 2746 CALL METHOD go_grid_106->refresh_table_display 2747 EXPORTING 2748 is_stable = stbl. 2749 ENDIF. 2750 ENDMODULE. 2751 *&---------------------------------------------------------------------* 2752 *& Form FRM_ALV_DISPLAY_106 2753 *&---------------------------------------------------------------------* 2754 * text 2755 *----------------------------------------------------------------------* 2756 * --> p1 text 2757 * <-- p2 text 2758 *----------------------------------------------------------------------* 2759 FORM frm_alv_display_106 . 2760 DATA: ls_layout TYPE lvc_s_layo. 2761 ls_layout-sel_mode = 'D'. 2762 * ls_layout-cwidth_opt = 'X'. 2763 * ls_layout-no_toolbar = 'X'. 2764 REFRESH lt_fieldcat_106. 2765 PERFORM build_fieldcat_main_106 CHANGING lt_fieldcat_106. 2766 CALL METHOD go_grid_106->set_table_for_first_display 2767 EXPORTING 2768 is_layout = ls_layout 2769 i_save = 'A' 2770 CHANGING 2771 it_outtab = lt_fk_sheet 2772 it_fieldcatalog = lt_fieldcat_106. 2773 ENDFORM. 2774 *&---------------------------------------------------------------------* 2775 *& Form BUILD_FIELDCAT_MAIN_106 2776 *&---------------------------------------------------------------------* 2777 * text 2778 *----------------------------------------------------------------------* 2779 * <--P_LT_FIELDCAT_106 text 2780 *----------------------------------------------------------------------* 2781 FORM build_fieldcat_main_106 CHANGING pt_fieldcat TYPE lvc_t_fcat. 2782 DATA: ls_fieldcat TYPE lvc_s_fcat. 2783 2784 DEFINE mac_fieldcat. 2785 CLEAR ls_fieldcat. 2786 ls_fieldcat-col_pos = &1. 2787 ls_fieldcat-fieldname = &2. 2788 2789 ls_fieldcat-scrtext_s = 2790 ls_fieldcat-scrtext_m = 2791 ls_fieldcat-coltext = 2792 ls_fieldcat-scrtext_l = &3. 2793 2794 ls_fieldcat-edit = &4. 2795 ls_fieldcat-outputlen = &5. 2796 ls_fieldcat-ref_table = &6. 2797 ls_fieldcat-ref_field = &7. 2798 ls_fieldcat-do_sum = &8. 2799 APPEND ls_fieldcat TO pt_fieldcat. 2800 END-OF-DEFINITION. 2801 2802 mac_fieldcat 1 'BUKRS' '公司代码' space '10' space space space. 2803 mac_fieldcat 2 'APPLYNO' '资金支付申请号' space '10' space space space. 2804 mac_fieldcat 3 'APPLY_ITEM' '行项目号' space '10' space space space. 2805 mac_fieldcat 4 'GJAHR' '财年' space '10' space space space. 2806 mac_fieldcat 5 'MONAT' '会计期间' space '10' space space space. 2807 mac_fieldcat 6 'KOSTL' '成本中心' space '10' space space space. 2808 mac_fieldcat 7 'ZDJLX_TEXT' '单据类型' space '10' space space space. 2809 mac_fieldcat 8 'ZFKLX_TEXT' '付款类型' space '10' space space space. 2810 mac_fieldcat 9 'TR_TYPE_TEXT' '结算方式' space '10' space space space. 2811 mac_fieldcat 10 'BUDGET_NO' '预算码' space '10' space space space. 2812 mac_fieldcat 11 'BUDG_TXT' '预算码描述' space '10' space space space. 2813 mac_fieldcat 12 'LIFNR' '供应商' space '10' space space space. 2814 mac_fieldcat 13 'NAME1' '供应商名称' space '10' space space space. 2815 mac_fieldcat 14 'HTKEY' '合同编号' space '10' space space space. 2816 mac_fieldcat 15 'HTTXT' '合同名称' space '10' space space space. 2817 mac_fieldcat 16 'HTWRB' '合同金额' space '10' space space space. 2818 mac_fieldcat 17 'EBELN' '采购凭证号' space '10' space space space. 2819 mac_fieldcat 18 'PSPID' '项目定义' space '10' space space space. 2820 mac_fieldcat 19 'POST1' '项目定义描述' space '10' space space space. 2821 mac_fieldcat 20 'ABWHK' '往来核算科目' space '10' space space space. 2822 mac_fieldcat 21 'ZCHKM' '支出户银行科目' space '10' space space space. 2823 mac_fieldcat 22 'BRPDT' '申请日期' space '10' space space space. 2824 mac_fieldcat 23 'ZJBR' '经办人' space '10' space space space. 2825 mac_fieldcat 24 'WAERS' '货币码' space '10' space space space. 2826 mac_fieldcat 25 'KURSF' '汇率' space '10' space space space. 2827 mac_fieldcat 26 'SQJE_HSB' '申请金额' space '10' space space space. 2828 mac_fieldcat 27 'SQJE_BWB' '申请本位币金额' space '10' space space space. 2829 mac_fieldcat 28 'HZJE_HSB' '核准金额' space '10' space space space. 2830 mac_fieldcat 29 'HZJE_BWB' '核准本位币金额' space '10' space space space. 2831 mac_fieldcat 30 'ZYFJZLX' '应付转其它类型' space '10' space space space. 2832 mac_fieldcat 31 'ZYFJZJE' '应付转其它金额' space '10' space space space. 2833 mac_fieldcat 32 'ZNBWB_TEXT' '内部外部' space '10' space space space. 2834 mac_fieldcat 33 'PERSONALFLAG_TEXT' '对公对私' space '10' space space space. 2835 mac_fieldcat 34 'PAYER_CNAPS' '付款方开户行' space '10' space space space. 2836 mac_fieldcat 35 'PAYER_BANK_NAME' '付款方开户行名称' space '10' space space space. 2837 mac_fieldcat 36 'PAYER_NO' '付款方内部账号' space '10' space space space. 2838 mac_fieldcat 37 'PAYBANK_NO' '付款方银行账号' space '10' space space space. 2839 mac_fieldcat 38 'HKONT' '银行核算科目' space '10' space space space. 2840 mac_fieldcat 39 'PAY_DATE' '付款日期' space '10' space space space. 2841 mac_fieldcat 40 'URGENT_FLAG_TEXT' '加急标识' space '10' space space space. 2842 mac_fieldcat 41 'RECE_ACC_NAME' '收款方户名' space '10' space space space. 2843 mac_fieldcat 42 'RECE_CNAPS' '收款方开户行' space '10' space space space. 2844 mac_fieldcat 43 'RECE_OPBANK_NAME' '收款方开户行名称' space '10' space space space. 2845 mac_fieldcat 44 'RECE_ACNT_NO' '收款方内部账号' space '10' space space space. 2846 mac_fieldcat 45 'RECE_ACC_NO' '收款方银行账号' space '10' space space space. 2847 mac_fieldcat 46 'ABSTRACT' '摘要' space '10' space space space. 2848 mac_fieldcat 47 'STATUS_TEXT' '申请单状态' space '10' space space space. 2849 mac_fieldcat 48 'ZJPZH_ZY' '资金占用凭证编号' space '10' space space space. 2850 mac_fieldcat 49 'ZJPZH_HY' '资金耗用凭证编号' space '10' space space space. 2851 mac_fieldcat 50 'BELNR_N' '会计凭证号码' space '10' space space space. 2852 mac_fieldcat 51 'APPLYNO_EX' '原始申请单号' space '10' space space space. 2853 mac_fieldcat 52 'ERNAM_T' '创建人' space '10' space space space. 2854 mac_fieldcat 53 'ERDAT' '创建日期' space '10' space space space. 2855 mac_fieldcat 54 'CHUSER_T' '最后修改人' space '10' space space space. 2856 mac_fieldcat 55 'CHDATE' '最后修改日期' space '10' space space space. 2857 mac_fieldcat 56 'FILEID_T' '回款单文件ID' space '10' space space space. 2858 2859 ENDFORM. 2860 *&---------------------------------------------------------------------* 2861 *& Form FRM_FK_SHEET 2862 *&---------------------------------------------------------------------* 2863 * text 2864 *----------------------------------------------------------------------* 2865 * -->P_P_NODE_KEY text 2866 *----------------------------------------------------------------------* 2867 FORM frm_fk_sheet USING node_key. 2868 RANGES:r_bukrs FOR bkpf-bukrs, 2869 r_gjahr FOR bkpf-gjahr, 2870 r_monat FOR bkpf-monat, 2871 r_djlx FOR ztyfit00030-zdjlx, 2872 r_applyno FOR ztyfit00030-applyno. 2873 DATA:lr_fk_sheet TYPE REF TO data. 2874 FIELD-SYMBOLS:<lt_fk_sheet> TYPE ANY TABLE. 2875 DATA: l_value TYPE lvc_value, 2876 l_layi TYPE lvc_t_layi, 2877 l_layn TYPE lvc_s_layn. 2878 REFRESH:r_bukrs,r_gjahr,r_monat,r_djlx,r_applyno. 2879 CALL METHOD tree1->get_outtab_line 2880 EXPORTING 2881 i_node_key = node_key 2882 IMPORTING 2883 e_outtab_line = ls_data 2884 e_node_text = l_value 2885 et_item_layout = l_layi 2886 es_node_layout = l_layn 2887 EXCEPTIONS 2888 node_not_found = 1 2889 OTHERS = 2. 2890 IF sy-subrc = 0. 2891 CLEAR:gv_text. 2892 gv_text = ls_data-posid && ls_data-post1. 2893 2894 CLEAR:r_bukrs,r_gjahr,r_monat. 2895 r_bukrs-sign = 'I'. 2896 r_bukrs-option = 'EQ'. 2897 r_bukrs-low = p_bukrs. 2898 APPEND r_bukrs. 2899 2900 r_gjahr-sign = 'I'. 2901 r_gjahr-option = 'EQ'. 2902 r_gjahr-low = p_gjahr. 2903 APPEND r_gjahr. 2904 2905 r_monat-sign = 'I'. 2906 r_monat-option = 'EQ'. 2907 r_monat-low = '01'. 2908 r_monat-high = '12'. 2909 APPEND r_monat. 2910 2911 r_djlx-sign = 'I'. 2912 r_djlx-option = 'EQ'. 2913 r_djlx-low = '01'. 2914 APPEND r_djlx. 2915 "获取上级行对应的资金支付申请单号 2916 SORT ls_data-pspnr_list BY pspnr. 2917 LOOP AT lt_applyno INTO ls_applyno. 2918 READ TABLE ls_data-pspnr_list INTO DATA(ls_list) WITH KEY pspnr = ls_applyno-ps_psp_pnr BINARY SEARCH. 2919 IF sy-subrc = 0. 2920 CLEAR:r_applyno. 2921 r_applyno-sign = 'I'. 2922 r_applyno-option = 'EQ'. 2923 r_applyno-low = ls_applyno-applyno. 2924 APPEND r_applyno. 2925 ENDIF. 2926 ENDLOOP. 2927 CLEAR ls_list. 2928 2929 cl_salv_bs_runtime_info=>set( EXPORTING display = abap_false metadata = abap_false data = abap_true ). 2930 SUBMIT ztyfie00010 2931 WITH r1 = 'X' "查询 2932 WITH s_bukrs IN r_bukrs "公司代码 2933 WITH s_gjahr IN r_gjahr "年度 2934 WITH s_monat IN r_monat 2935 WITH s_zdjlx IN r_djlx 2936 WITH s_appno IN r_applyno 2937 EXPORTING LIST TO MEMORY AND RETURN. 2938 IF sy-subrc = 0. 2939 TRY. 2940 cl_salv_bs_runtime_info=>get_data_ref( IMPORTING r_data = lr_fk_sheet ). 2941 ASSIGN lr_fk_sheet->* TO <lt_fk_sheet>. 2942 CATCH cx_salv_bs_sc_runtime_info. 2943 ENDTRY. 2944 ENDIF. 2945 cl_salv_bs_runtime_info=>clear_all( ). 2946 IF <lt_fk_sheet> IS ASSIGNED. 2947 IF <lt_fk_sheet> IS NOT INITIAL. 2948 MOVE-CORRESPONDING <lt_fk_sheet> TO lt_fk_sheet. 2949 ENDIF. 2950 ENDIF. 2951 2952 ENDIF. 2953 ENDFORM. 2954 2955 FORM frm_get_ys_sheet_up USING ls_data_tmp. 2956 CLEAR:ls_ys_sheet_tmp,ls_ys_sheet_up,gv_bcky. 2957 * ls_ys_sheet_tmp = ls_ys_sheet. 2958 "获取不同年度 实际 承诺 剩余计划 2959 PERFORM frm_get_sheet_field_value USING ls_data_tmp CHANGING ls_ys_sheet_tmp. 2960 2961 "已分配 = 实际 + 承诺 + 剩余计划 2962 ls_ys_sheet_tmp-yfp = ls_ys_sheet_tmp-sj + ls_ys_sheet_tmp-cnz + ls_ys_sheet_tmp-syz. 2963 "可用(统计值) = 预算 - 已分配 2964 ls_ys_sheet_tmp-ky = ls_ys_sheet_tmp-ys - ls_ys_sheet_tmp-yfp. 2965 "本层可用预算 2966 IF ls_ys_sheet_tmp-ys IS INITIAL. 2967 RETURN. 2968 ELSE. 2969 "本层可用预算= 可用 - (直接下级预算 - 直接下级预算不为0的已分配) 2970 PERFORM frm_get_sheet_bcky USING ls_ys_sheet_tmp ls_data_tmp CHANGING gv_bcky. 2971 ENDIF. 2972 ls_ys_sheet_tmp-bcky = ls_ys_sheet_tmp-ky - gv_bcky. 2973 ENDFORM. 2974 *&---------------------------------------------------------------------* 2975 *& Form FRM_GET_SUM_SHEET 2976 *&---------------------------------------------------------------------* 2977 * text 2978 *----------------------------------------------------------------------* 2979 * --> p1 text 2980 * <-- p2 text 2981 *----------------------------------------------------------------------* 2982 FORM frm_get_sum_sheet. 2983 DATA: lv_time TYPE sy-tabix, 2984 lv_xjys TYPE rpsco-wlp01, 2985 lv_flg TYPE c, 2986 lv_above TYPE prps_co-above. 2987 DATA:lv_bcky_up TYPE rpsco-wlp01. 2988 lv_above = ls_data_sum-above. 2989 lt_data_tmp = lt_data. 2990 *& 1、根据双击行所属项目首层查询BPJA 确定展示条目 2991 READ TABLE lt_data INTO ls_data_tmp WITH KEY pspnr = ls_data_sum-pspnr stufe = 1. 2992 CHECK sy-subrc = 0. 2993 SELECT DISTINCT gjahr 2994 INTO TABLE @DATA(lt_gjahr) 2995 FROM bpja 2996 WHERE objnr = @ls_data_tmp-objnr 2997 AND wrttp = '41'. 2998 SORT lt_gjahr BY gjahr. 2999 3000 CLEAR:ls_ys_sheet_sum,gv_cnz,gv_syz,gv_yfp,gv_ky,gv_bcky,gv_gjahr,gv_sum_bcky. 3001 SORT lt_ys_year BY objnr gjahr. 3002 SORT lt_cb_sheet BY posid gjahr. 3003 3004 LOOP AT lt_gjahr INTO DATA(ls_gjahr). 3005 CLEAR:ls_ys_sheet_tmp,ls_data_tmp,lv_flg. 3006 3007 ls_ys_sheet_sum-gjahr = ls_gjahr-gjahr. 3008 gv_gjahr = ls_gjahr-gjahr. 3009 3010 ls_ys_sheet_tmp = ls_ys_sheet_sum. 3011 "获取不同年度 实际 承诺 剩余计划 3012 PERFORM frm_get_sheet_field_value USING ls_data_sum CHANGING ls_ys_sheet_tmp. 3013 3014 ls_ys_sheet_sum = ls_ys_sheet_tmp. 3015 3016 "已分配 = 实际 + 承诺 + 剩余计划 3017 ls_ys_sheet_sum-yfp = ls_ys_sheet_sum-sj + ls_ys_sheet_sum-cnz + ls_ys_sheet_sum-syz. 3018 "可用(统计值) = 预算 - 已分配 3019 ls_ys_sheet_sum-ky = ls_ys_sheet_sum-ys - ls_ys_sheet_sum-yfp. 3020 "本层可用预算 3021 CLEAR:gv_bcky,lv_time,lv_xjys. 3022 "本层预算不为0 3023 IF ls_ys_sheet_sum-ys IS NOT INITIAL. 3024 "本层可用预算= 可用 - (直接下级预算 - 直接下级预算不为0的已分配) 3025 PERFORM frm_get_sheet_bcky USING ls_ys_sheet_tmp ls_data_sum CHANGING gv_bcky. 3026 * PERFORM frm_get_sheet_bcky_sum USING ls_ys_sheet_tmp ls_data_sum CHANGING gv_bcky. 3027 ls_ys_sheet_sum-bcky = ls_ys_sheet_sum-ky - gv_bcky. 3028 * ELSE. 3029 * "本层预算为0 找父节点 直到找到 3030 * "若为首层 没有父节点 则本层预算直接为0 3031 * IF ls_data_sum-stufe = 1. 3032 * gv_bcky = 0. 3033 * ls_ys_sheet_sum-bcky = ls_ys_sheet_sum-ky - gv_bcky. 3034 * ELSE. 3035 * DO . 3036 * lv_time = lv_time + 1. 3037 * IF lv_time > 10. 3038 * EXIT. 3039 * ENDIF. 3040 * IF gv_bcky <> 0. 3041 * EXIT. 3042 * ENDIF. 3043 * 3044 * READ TABLE lt_data_tmp INTO ls_data_tmp WITH KEY pspnr1 = lv_above."读取成功则ls_data_tmp变为上层WBS结构 3045 * IF sy-subrc = 0. 3046 * "找上层 3047 * PERFORM frm_get_ys_sheet_up USING ls_data_tmp. 3048 * ENDIF. 3049 * IF ls_data_tmp-stufe = '1'. 3050 * EXIT. 3051 * ENDIF. 3052 * lv_above = ls_data_tmp-above."赋值后继续寻找ls_data_tmp的上一层 3053 * ENDDO. 3054 * ls_ys_sheet_sum-bcky = ls_ys_sheet_tmp-bcky. 3055 * ENDIF. 3056 ENDIF. 3057 3058 "*汇总行相关字段 3059 gv_cnz = gv_cnz + ls_ys_sheet_sum-cnz. 3060 gv_syz = gv_syz + ls_ys_sheet_sum-syz. 3061 gv_yfp = gv_yfp + ls_ys_sheet_sum-yfp. 3062 gv_ky = gv_ky + ls_ys_sheet_sum-ky. 3063 3064 ENDLOOP. 3065 3066 3067 "最后一行 3068 CLEAR lv_bcky_up. 3069 ls_ys_sheet_sum-gjahr = '全部'. 3070 ls_ys_sheet_sum-ys = ls_data_sum-ys_sum. 3071 ls_ys_sheet_sum-sj = ls_data_sum-cb_sum. 3072 ls_ys_sheet_sum-cnz = gv_cnz."承诺值 3073 ls_ys_sheet_sum-syz = gv_syz."剩余计划值 3074 ls_ys_sheet_sum-yfp = ls_ys_sheet_sum-sj + ls_ys_sheet_sum-cnz + ls_ys_sheet_sum-syz."已分配 = 实际 + 承诺 + 剩余计划 3075 ls_ys_sheet_sum-ky = ls_ys_sheet_sum-ys - ls_ys_sheet_sum-yfp."gv_ky."可用 = 预算 - 已分配 3076 "本层可用 3077 3078 CLEAR ls_data_tmp. 3079 gv_gjahr = ls_gjahr-gjahr. 3080 PERFORM frm_get_sheet_bcky_sum USING ls_ys_sheet_sum ls_data_sum CHANGING gv_sum_bcky. 3081 3082 * LOOP AT lt_gjahr INTO ls_gjahr. 3083 * gv_gjahr = ls_gjahr-gjahr. 3084 * PERFORM frm_get_sheet_bcky USING ls_ys_sheet_sum ls_data_sum CHANGING lv_bcky_up . 3085 * gv_sum_bcky = gv_sum_bcky + lv_bcky_up. 3086 * ENDLOOP. 3087 "最终本层可用 3088 gv_sum_bcky = ls_ys_sheet_sum-ky - gv_sum_bcky. 3089 3090 ENDFORM. 3091 *&---------------------------------------------------------------------* 3092 *& Form FRM_GET_SHEET_BCKY_SUM 3093 *&---------------------------------------------------------------------* 3094 * text 3095 *----------------------------------------------------------------------* 3096 * -->P_LS_YS_SHEET text 3097 * -->P_LS_DATA text 3098 * <--P_GV_BCKY text 3099 *----------------------------------------------------------------------* 3100 FORM frm_get_sheet_bcky_sum USING ps_sheet TYPE ty_ys_sheet ps_data TYPE ty_data 3101 CHANGING ps_bcky TYPE rpsco-wlp01. 3102 DATA:lv_ys TYPE rpsco-wlp01, 3103 lv_sj TYPE rpsco-wlp01, 3104 lv_cnz TYPE rpsco-wlp01, 3105 lv_syz TYPE rpsco-wlp01, 3106 lv_yfp TYPE rpsco-wlp01, 3107 lv_ky TYPE rpsco-wlp01, 3108 lv_xjyfp TYPE rpsco-wlp01. "下级已分配 3109 CLEAR:lv_ys,lv_sj,lv_cnz,lv_syz,lv_xjyfp,ls_ys_year,lv_ky,ps_bcky. 3110 "预算= ps_sheet-ys 3111 "下级 ps_data-pspnr_list 3112 LOOP AT ps_data-pspnr_list INTO DATA(ps_list) . 3113 "直接下级 预算 3114 "获取对象号 3115 READ TABLE lt_data INTO ls_data_tmp WITH KEY posid = ps_list-posid. 3116 IF sy-subrc = 0. 3117 "根据对象号查询下属WBS的预算 3118 READ TABLE lt_bpge INTO ls_bpge 3119 WITH KEY objnr = ls_data_tmp-objnr. 3120 IF sy-subrc = 0. 3121 IF ls_bpge-wlges = 0. 3122 CONTINUE. 3123 ENDIF. 3124 ELSE. 3125 CONTINUE. 3126 ENDIF. 3127 ELSE. 3128 CONTINUE. 3129 ENDIF. 3130 CLEAR ls_data_tmp. 3131 "获取预算不为0对应WBS下的所有节点 已分配 3132 READ TABLE lt_data INTO DATA(ls_data1) WITH KEY pspnr1 = ps_list-pspnr. 3133 IF sy-subrc = 0. 3134 LOOP AT ls_data1-pspnr_list1 INTO DATA(ls_list1). 3135 "实际 3136 READ TABLE lt_cb_sheet INTO ls_cb_sheet 3137 WITH KEY posid = ls_list1-posid gjahr = gv_gjahr BINARY SEARCH. 3138 IF sy-subrc = 0. 3139 lv_sj = ls_cb_sheet-wtgbtr. 3140 ENDIF. 3141 3142 "承诺值 3143 READ TABLE lt_cnz_sum INTO ls_cnz_sum 3144 WITH KEY posid = ls_list1-posid gjahr = gv_gjahr BINARY SEARCH. 3145 IF sy-subrc = 0. 3146 lv_cnz = ls_cnz_sum-cnz. 3147 ENDIF. 3148 "剩余计划值 3149 READ TABLE lt_syz_sum INTO ls_syz_sum 3150 WITH KEY posid = ls_list1-posid gjahr = gv_gjahr BINARY SEARCH. 3151 IF sy-subrc = 0. 3152 lv_syz = ls_syz_sum-cnz. 3153 ENDIF. 3154 "下级已分配=实际+承诺+剩余计划 3155 IF lv_sj IS NOT INITIAL OR lv_cnz IS NOT INITIAL OR lv_syz IS NOT INITIAL. 3156 lv_xjyfp = lv_xjyfp + ( lv_sj + lv_cnz + lv_syz ) . 3157 ENDIF. 3158 3159 CLEAR:lv_sj,lv_cnz,lv_syz,ls_ys_year. 3160 3161 ENDLOOP. 3162 3163 ENDIF. 3164 "直接下级预算汇总 - 直接下级不为0已分配汇总 3165 lv_ky = ls_bpge-wlges - lv_xjyfp. 3166 "下级不为0可用 汇总 3167 ps_bcky = ps_bcky + lv_ky. 3168 CLEAR:lv_ky,ls_bpge,lv_xjyfp. 3169 3170 ENDLOOP. 3171 3172 ENDFORM.
100屏幕:
101屏幕在100屏幕基础上画页签自动生成代码
社会很单纯,复杂的是人