模拟会计凭证审批 OO ALV(屏幕跳转、定位行数据、审批按钮)
根据选定的单、多行会计凭证进行审批,双击单个会计凭证跳转会计订单明细。将审批的凭证记录在一张自定义表中
1 *&---------------------------------------------------------------------* 2 *& Report ZFI_SP 3 *&---------------------------------------------------------------------* 4 *&参考FB03 5 *&---------------------------------------------------------------------* 6 REPORT zfi_sp. 7 TYPE-POOLS:slis,icon. 8 TABLES:t001,bkpf,skat. 9 DATA: ok_code LIKE sy-ucomm, 10 save_ok LIKE ok_code. 11 INCLUDE zfi_sp_alldata. "会计编号的详细会计科目的数据类型 12 13 DATA gt_fieldcat TYPE slis_t_fieldcat_alv. 14 DATA gs_fieldcat TYPE slis_fieldcat_alv. "表字段 15 DATA gs_layout TYPE slis_layout_alv. "布局 16 DATA gt_events TYPE slis_t_event. 17 DATA gs_event TYPE slis_alv_event. "事件 18 TYPES:BEGIN OF ty_type, 19 sel TYPE c, "选择按钮列 20 bukrs TYPE bukrs, 21 belnr TYPE belnr_d, "会计凭证编号 22 gjahr TYPE gjahr, 23 blart TYPE blart, "类型` 24 bldat TYPE bldat, "凭证中的凭证日期 25 budat TYPE budat, "凭证中的过帐日期 26 bktxt TYPE bktxt, "文本 27 sp TYPE c, 28 END OF ty_type. 29 DATA:gt_itab TYPE TABLE OF ty_type WITH HEADER LINE. 30 DATA:wa_insert TYPE zfi_sp_table, 31 wa_itab TYPE ty_type. 32 33 DATA:fi_itab TYPE TABLE OF zfi_sp_table WITH HEADER LINE. 34 35 DATA:fieldcat TYPE lvc_t_fcat, "1001 屏幕数据定义 36 grid TYPE REF TO cl_gui_alv_grid, 37 g_container TYPE scrfname VALUE 'CONT1', 38 g_custom_container TYPE REF TO cl_gui_custom_container. 39 DATA: gt_fieldcat02 TYPE lvc_t_fcat, 40 gs_variant02 TYPE disvariant, 41 gs_layout02 TYPE lvc_s_layo. 42 43 SELECTION-SCREEN BEGIN OF BLOCK blk_001 WITH FRAME TITLE blk_001 . 44 SELECT-OPTIONS:t_bukrs FOR t001-bukrs OBLIGATORY. 45 PARAMETERS:b_gjahr LIKE bkpf-gjahr DEFAULT sy-datum(4) OBLIGATORY. 46 SELECT-OPTIONS:b_belnr FOR bkpf-belnr , 47 b_bldat FOR bkpf-bldat, 48 b_budat FOR bkpf-budat, 49 b_blart FOR bkpf-blart, 50 s_txt50 FOR skat-txt50, 51 b_usnam FOR bkpf-usnam. 52 PARAMETERS:a_check AS CHECKBOX. 53 **PARAMETERS:b_check AS CHECKBOX DEFAULT 'X'. 54 SELECTION-SCREEN END OF BLOCK blk_001. 55 56 AT SELECTION-SCREEN. 57 "新增公司权限对象检查 58 PERFORM frm_authority_check. 59 60 START-OF-SELECTION. 61 IF a_check = ''. 62 IF b_blart = ''. 63 SELECT bkpf~bukrs "公司代码 64 bkpf~belnr "凭证编号 65 bkpf~gjahr "年度 66 bkpf~blart "凭证类型 67 bkpf~budat "过帐日期 68 bkpf~bldat "凭证日期 69 bkpf~bktxt "抬头文本 70 z~sp "审批标识 71 INTO CORRESPONDING FIELDS OF TABLE gt_itab 72 FROM bkpf 73 LEFT JOIN zfi_sp_table AS z ON z~belnr = bkpf~belnr AND z~belnr = bkpf~belnr AND z~bukrs = bkpf~bukrs 74 WHERE bkpf~bukrs IN t_bukrs "公司代码 75 AND bkpf~belnr IN b_belnr "凭证编号 76 AND bkpf~gjahr = b_gjahr "会计年度 77 AND bkpf~bldat IN b_bldat "凭证日期 78 AND bkpf~budat IN b_budat "过帐日期 79 AND bkpf~blart IN ('SA','AB','AA','RV','DZ','RE','KZ') "凭证类型 80 AND bkpf~usnam IN b_usnam. "制作人 81 ELSE. 82 SELECT bkpf~bukrs "公司代码 83 bkpf~belnr "凭证编号 84 bkpf~gjahr "年度 85 bkpf~blart "凭证类型 86 bkpf~budat "过帐日期 87 bkpf~bldat "凭证日期 88 bkpf~bktxt "抬头文本 89 z~sp "审批标识 90 INTO CORRESPONDING FIELDS OF TABLE gt_itab 91 FROM bkpf 92 LEFT JOIN zfi_sp_table AS z ON z~belnr = bkpf~belnr AND z~belnr = bkpf~belnr AND z~bukrs = bkpf~bukrs 93 WHERE bkpf~bukrs IN t_bukrs "公司代码 94 AND bkpf~belnr IN b_belnr "凭证编号 95 AND bkpf~gjahr = b_gjahr "会计年度 96 AND bkpf~bldat IN b_bldat "凭证日期 97 AND bkpf~budat IN b_budat "过帐日期 98 AND bkpf~blart IN b_blart "凭证类型 99 AND bkpf~usnam IN b_usnam. "制作人 100 ENDIF. 101 102 DELETE gt_itab WHERE sp = 'X'. 103 PERFORM all_data. 104 PERFORM set_event. 105 ELSE. 106 SELECT * FROM zfi_sp_table INTO CORRESPONDING FIELDS OF TABLE fi_itab 107 WHERE bukrs IN t_bukrs "公司代码 108 AND belnr IN b_belnr "凭证编号 109 AND gjahr = b_gjahr "会计年度 110 AND zerdt IN b_bldat "凭证日期 111 AND blart IN b_blart "凭证类型 112 AND uname IN b_usnam. "审核人 113 ENDIF. 114 115 PERFORM set_layout. 116 PERFORM set_fieldname. 117 PERFORM result_alv. 118 *&---------------------------------------------------------------------* 119 *& Form alv_user_command 120 *&---------------------------------------------------------------------* 121 * 定义初始屏幕操作逻辑 122 *----------------------------------------------------------------------* 123 * -->P_UCOMM text 124 * -->P_SELFIELD text 125 *----------------------------------------------------------------------* 126 FORM alv_user_command USING p_ucomm TYPE sy-ucomm p_selfield TYPE slis_selfield. 127 p_selfield-refresh = 'X'. "控制grid产生新屏幕 128 CLEAR wa_insert. 129 CASE p_ucomm. 130 WHEN '&IC1'. 131 READ TABLE gt_itab INDEX p_selfield-tabindex. "定位双击的行号 132 LOOP AT itab1 WHERE belnr = gt_itab-belnr. 133 APPEND itab1 TO itab2. 134 ENDLOOP. 135 IF itab2[] IS NOT INITIAL. 136 CALL SCREEN '1001'. 137 ENDIF. 138 WHEN 'SP'. "多个会计凭证一起审批 139 LOOP AT gt_itab WHERE sel = 'X'. 140 CLEAR wa_insert. 141 MOVE-CORRESPONDING gt_itab TO wa_insert. 142 wa_insert-zerdt = sy-datum. 143 wa_insert-uzeit = sy-uzeit. 144 wa_insert-uname = sy-uname. 145 wa_insert-sp = 'X'. 146 INSERT zfi_sp_table FROM wa_insert. 147 DELETE gt_itab. 148 ENDLOOP. 149 p_selfield-refresh = 'X'. "审批完成刷新 150 ENDCASE. 151 ENDFORM. "MALV_USER_COMMAND 152 *&---------------------------------------------------------------------* 153 *& Form alvshow 154 *&---------------------------------------------------------------------* 155 * 显示双击选中会计编号的详细会计科目 156 * CL_GUI_ALV_GRID->set_table_for_first_display 157 *----------------------------------------------------------------------* 158 FORM alvshow. 159 gs_layout02-no_rowmark = 'X'. "禁用行选择 160 gs_layout02-cwidth_opt = 'X'. "优化列宽度 161 gs_layout02-no_toolbar = 'X'. "隐藏工具栏 162 163 gs_variant02-report = sy-repid. 164 165 CREATE OBJECT g_custom_container 166 EXPORTING 167 container_name = g_container. "创建容器 168 169 CREATE OBJECT grid 170 EXPORTING 171 i_parent = g_custom_container."创建ALV对象 172 173 PERFORM f_grid_build_fieldcat CHANGING gt_fieldcat02. 174 SORT itab2 BY hkont DESCENDING. 175 176 CALL METHOD grid->set_table_for_first_display 177 EXPORTING 178 is_layout = gs_layout02 179 is_variant = gs_variant02 180 CHANGING 181 it_outtab = itab2[] 182 it_fieldcatalog = gt_fieldcat02. 183 CLEAR:gt_fieldcat02,gs_layout02,gs_variant02. 184 ENDFORM. "alvshow 185 *&---------------------------------------------------------------------* 186 *& Form f_grid_build_fieldcat 187 *&---------------------------------------------------------------------* 188 * 189 *----------------------------------------------------------------------* 190 * -->PT_FIELDCAT text 191 *----------------------------------------------------------------------* 192 FORM f_grid_build_fieldcat CHANGING pt_fieldcat TYPE lvc_t_fcat. 193 DATA ls_fcat TYPE lvc_s_fcat. 194 195 CLEAR ls_fcat. 196 ls_fcat-fieldname = 'BUKRS'. 197 ls_fcat-coltext = 198 ls_fcat-tooltip = 199 ls_fcat-seltext = '公司'. 200 ls_fcat-outputlen = 4. 201 APPEND ls_fcat TO pt_fieldcat. 202 203 CLEAR ls_fcat. 204 ls_fcat-fieldname = 'BELNR'. 205 ls_fcat-coltext = 206 ls_fcat-tooltip = 207 ls_fcat-seltext = '凭证'. 208 ls_fcat-outputlen = 10. 209 APPEND ls_fcat TO pt_fieldcat. 210 211 CLEAR ls_fcat. 212 ls_fcat-fieldname = 'HKONT'. 213 ls_fcat-coltext = 214 ls_fcat-tooltip = 215 ls_fcat-seltext = '科目'. 216 ls_fcat-outputlen = 10. 217 APPEND ls_fcat TO pt_fieldcat. 218 219 CLEAR ls_fcat. 220 ls_fcat-fieldname = 'SHKZG'. 221 ls_fcat-coltext = 222 ls_fcat-tooltip = 223 ls_fcat-seltext = '借方/贷方标识'. 224 ls_fcat-outputlen = 1. 225 APPEND ls_fcat TO pt_fieldcat. 226 227 CLEAR ls_fcat. 228 ls_fcat-fieldname = 'BUZEI'. 229 ls_fcat-coltext = 230 ls_fcat-tooltip = 231 ls_fcat-seltext = '会计凭证中的行项目数'. 232 ls_fcat-outputlen = 3. 233 APPEND ls_fcat TO pt_fieldcat. 234 235 CLEAR ls_fcat. 236 ls_fcat-fieldname = 'DMBTR'. 237 ls_fcat-coltext = 238 ls_fcat-tooltip = 239 ls_fcat-seltext = '按本位币计的金额本'. 240 ls_fcat-outputlen = 13. 241 APPEND ls_fcat TO pt_fieldcat. 242 243 CLEAR ls_fcat. 244 ls_fcat-fieldname = 'WRBTR'. 245 ls_fcat-coltext = 246 ls_fcat-tooltip = 247 ls_fcat-seltext = '凭证货币金额'. 248 ls_fcat-outputlen = 13. 249 APPEND ls_fcat TO pt_fieldcat. 250 251 CLEAR ls_fcat. 252 ls_fcat-fieldname = 'SGTXT'. 253 ls_fcat-coltext = 254 ls_fcat-tooltip = 255 ls_fcat-seltext = '摘要'. 256 ls_fcat-outputlen = 50. 257 APPEND ls_fcat TO pt_fieldcat. 258 259 CLEAR ls_fcat. 260 ls_fcat-fieldname = 'KUNNR'. 261 ls_fcat-coltext = 262 ls_fcat-tooltip = 263 ls_fcat-seltext = '客户编号'. 264 ls_fcat-outputlen = 10. 265 APPEND ls_fcat TO pt_fieldcat. 266 267 CLEAR ls_fcat. 268 ls_fcat-fieldname = 'LIFNR'. 269 ls_fcat-coltext = 270 ls_fcat-tooltip = 271 ls_fcat-seltext = '供应商或债权人的帐号'. 272 ls_fcat-outputlen = 8. 273 APPEND ls_fcat TO pt_fieldcat. 274 275 CLEAR ls_fcat. 276 ls_fcat-fieldname = 'TXT50'. 277 ls_fcat-coltext = 278 ls_fcat-tooltip = 279 ls_fcat-seltext = '科目名称'. 280 ls_fcat-outputlen = 50. 281 APPEND ls_fcat TO pt_fieldcat. 282 283 CLEAR ls_fcat. 284 ls_fcat-fieldname = 'KOSTL'. 285 ls_fcat-coltext = 286 ls_fcat-tooltip = 287 ls_fcat-seltext = '成本中心'. 288 ls_fcat-outputlen = 10. 289 APPEND ls_fcat TO pt_fieldcat. 290 291 CLEAR ls_fcat. 292 ls_fcat-fieldname = 'FKBER_LONG'. 293 ls_fcat-coltext = 294 ls_fcat-tooltip = 295 ls_fcat-seltext = '功能范围'. 296 ls_fcat-outputlen = 16. 297 APPEND ls_fcat TO pt_fieldcat. 298 299 CLEAR ls_fcat. 300 ls_fcat-fieldname = 'KTEXT'. 301 ls_fcat-coltext = 302 ls_fcat-tooltip = 303 ls_fcat-seltext = '客户名称'. 304 ls_fcat-outputlen = 35. 305 APPEND ls_fcat TO pt_fieldcat. 306 307 CLEAR ls_fcat. 308 ls_fcat-fieldname = 'NAME'. 309 ls_fcat-coltext = 310 ls_fcat-tooltip = 311 ls_fcat-seltext = '供应商名称'. 312 ls_fcat-outputlen = 35. 313 APPEND ls_fcat TO pt_fieldcat. 314 315 CLEAR ls_fcat. 316 ls_fcat-fieldname = 'BLDAT'. 317 ls_fcat-coltext = 318 ls_fcat-tooltip = 319 ls_fcat-seltext = '凭证日期'. 320 ls_fcat-outputlen = 8. 321 APPEND ls_fcat TO pt_fieldcat. 322 323 CLEAR ls_fcat. 324 ls_fcat-fieldname = 'BUDAT'. 325 ls_fcat-coltext = 326 ls_fcat-tooltip = 327 ls_fcat-seltext = '过账日期'. 328 ls_fcat-outputlen = 8. 329 APPEND ls_fcat TO pt_fieldcat. 330 331 CLEAR ls_fcat. 332 ls_fcat-fieldname = 'BLART'. 333 ls_fcat-coltext = 334 ls_fcat-tooltip = 335 ls_fcat-seltext = '类型'. 336 ls_fcat-outputlen = 2. 337 APPEND ls_fcat TO pt_fieldcat. 338 339 CLEAR ls_fcat. 340 ls_fcat-fieldname = 'HWAER'. 341 ls_fcat-coltext = 342 ls_fcat-tooltip = 343 ls_fcat-seltext = '本币'. 344 ls_fcat-outputlen = 5. 345 APPEND ls_fcat TO pt_fieldcat. 346 ENDFORM. "F_GRID_BUILD_FIELDCAT 347 *&---------------------------------------------------------------------* 348 *& Form alv_status_set 349 *&---------------------------------------------------------------------* 350 * text 351 *----------------------------------------------------------------------* 352 * -->PT_EXTAB text 353 *----------------------------------------------------------------------* 354 FORM alv_status_set USING pt_extab TYPE slis_t_extab. 355 SET PF-STATUS 'COPY_GUI'." OF PROGRAM 'SAPLKKBL'. 356 ENDFORM. "ALV_STATUS_SET 357 *&---------------------------------------------------------------------* 358 *& Form set_layout 359 *&---------------------------------------------------------------------* 360 * text 361 *----------------------------------------------------------------------* 362 FORM set_layout . 363 gs_layout-zebra = 'X'. 364 gs_layout-colwidth_optimize = 'X'. 365 gs_layout-cell_merge = 'X'. "内容能够复制到剪贴板 366 IF a_check <> 'X'. "显示已审批数据不用指定 不然点击按钮会报错 367 gs_layout-box_fieldname = 'SEL'. "指定这个字段为【选择块】 368 ENDIF. 369 370 ENDFORM. " SET_LAYOUT 371 *&---------------------------------------------------------------------* 372 *& Form set_fieldname 373 *&---------------------------------------------------------------------* 374 * text 375 *----------------------------------------------------------------------* 376 FORM set_fieldname. 377 DEFINE setfieldcat. 378 clear: gs_fieldcat. 379 gs_fieldcat-col_pos = &1. 380 gs_fieldcat-fieldname = &2. 381 gs_fieldcat-seltext_m = &3. 382 gs_fieldcat-no_zero = 'X'. 383 append gs_fieldcat to gt_fieldcat. 384 END-OF-DEFINITION. 385 386 setfieldcat 1 'BUKRS' '工厂'. 387 setfieldcat 2 'BELNR' '凭证编号'. 388 setfieldcat 3 'GJAHR' '年度'. 389 setfieldcat 4 'BLART' '类型'. 390 IF a_check = 'X'. 391 setfieldcat 5 'ZERDT' '审批日期'. 392 setfieldcat 6 'UZEIT' '审批时间'. 393 setfieldcat 7 'UNAME' '审批人'. 394 setfieldcat 8 'SP' '审批完成标识'. 395 ELSE. 396 setfieldcat 5 'BLDAT' '凭证日期'. 397 setfieldcat 6 'BUDAT' '过帐日期'. 398 setfieldcat 7 'BKTXT' '抬头文本'. 399 * setfieldcat 8 'SP' '审批标识'. 400 ENDIF. 401 ENDFORM. "set_fieldname 402 *&---------------------------------------------------------------------* 403 *& Form result_alv 404 *&---------------------------------------------------------------------* 405 * text 406 *----------------------------------------------------------------------* 407 FORM result_alv . 408 IF a_check = ''. 409 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 410 EXPORTING 411 i_callback_program = sy-repid 412 is_layout = gs_layout 413 it_fieldcat = gt_fieldcat 414 it_events = gt_events 415 i_callback_user_command = 'ALV_USER_COMMAND' "按钮功能(这个功能也能在is_layout中定义) 416 TABLES 417 t_outtab = gt_itab 418 EXCEPTIONS 419 program_error = 1 420 OTHERS = 2. 421 ELSE. 422 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 423 EXPORTING 424 i_callback_program = sy-repid 425 is_layout = gs_layout 426 it_fieldcat = gt_fieldcat 427 TABLES 428 t_outtab = fi_itab 429 EXCEPTIONS 430 program_error = 1 431 OTHERS = 2. 432 ENDIF. 433 CLEAR a_check. 434 ENDFORM. " RESULT_ALV 435 436 *&---------------------------------------------------------------------* 437 *& Form set_event 438 *&---------------------------------------------------------------------* 439 * text 440 *----------------------------------------------------------------------* 441 FORM set_event . 442 CLEAR gs_event. 443 MOVE 'PF_STATUS_SET' TO gs_event-name."调用PF_STATUS_SET签名的Form,ALV工具栏显示前,可自定义工具条 444 MOVE 'ALV_STATUS_SET' TO gs_event-form. "工具栏设置 445 APPEND gs_event TO gt_events. 446 ENDFORM. " SET_EVENT 447 *&---------------------------------------------------------------------* 448 *& Form all_data 449 *&---------------------------------------------------------------------* 450 * text 451 *----------------------------------------------------------------------* 452 FORM all_data. 453 SELECT SINGLE * FROM t001 WHERE bukrs = t_bukrs. 454 comtitle = t001-butxt. 455 456 SELECT bukrs "公司代码 457 belnr "凭证编号 458 blart "凭证类型 459 usnam "用户名 460 ppnam "凭证制作人 461 budat "过帐日期 462 bldat "凭证日期 463 waers 464 hwaer "本位币 465 kursf "汇率 466 INTO CORRESPONDING FIELDS OF TABLE itab_bkpf 467 FROM bkpf 468 WHERE bukrs IN t_bukrs "公司代码 469 AND belnr IN b_belnr "凭证编号 470 AND gjahr = b_gjahr "会计年度 471 AND bldat IN b_bldat "凭证日期 472 AND budat IN b_budat "过帐日期 473 AND blart IN b_blart "凭证类型 474 AND usnam IN b_usnam. "制作人 475 476 SORT itab_bkpf BY belnr ASCENDING . 477 478 IF sy-subrc <> 0. 479 MESSAGE '输入的凭证编号不存在!' TYPE 'E'. 480 ENDIF. 481 482 LOOP AT itab_bkpf. 483 SELECT belnr "凭证编号 484 hkont "总分类帐帐目 485 shkzg "借方/贷方标识 486 dmbtr "按本位币计的金额 487 wrbtr "凭证货币金额 488 sgtxt "项目文本 489 kunnr "客户编号1 490 lifnr "供应商或债权人的帐号 491 zuonr "分配编号 492 buzei "会计凭证中的行项目数 493 kostl "成本中心 494 fkber_long "功能范围 495 APPENDING CORRESPONDING FIELDS OF TABLE itab_bseg 496 FROM bseg 497 WHERE belnr = itab_bkpf-belnr AND gjahr = b_gjahr 498 AND bukrs IN t_bukrs . 499 "修改日元问题 by hua.su. 500 IF itab_bkpf-waers = 'JPY' . 501 LOOP AT itab_bseg WHERE belnr = itab_bkpf-belnr. 502 itab_bseg-wrbtr = itab_bseg-wrbtr * 100. 503 MODIFY itab_bseg. 504 CLEAR itab_bseg. 505 ENDLOOP. 506 ENDIF. 507 508 SELECT SINGLE butxt INTO itab_bkpf-butxt 509 FROM t001 510 WHERE bukrs = itab_bkpf-bukrs. 511 512 SELECT SINGLE ltext 513 FROM t003t 514 INTO itab_bkpf-ltext 515 WHERE blart = itab_bkpf-blart AND t003t~spras = '1'. 516 517 IF itab_bkpf-blart = 'KR' OR itab_bkpf-blart = 'KZ' OR 518 itab_bkpf-blart = 'DR' OR 519 itab_bkpf-blart = 'DZ' OR itab_bkpf-blart = 'SA'. 520 521 SELECT SINGLE xblnr INTO itab_bkpf-xblnr "参考凭证号 522 FROM bkpf 523 WHERE belnr = itab_bkpf-belnr. 524 ENDIF. 525 526 SELECT SINGLE name_last name_first 527 INTO (itab_bkpf-name_last,itab_bkpf-name_first) 528 FROM user_addr 529 WHERE bname = itab_bkpf-usnam. 530 CONCATENATE itab_bkpf-name_last itab_bkpf-name_first INTO 531 itab_bkpf-name_last. 532 533 SELECT SINGLE bseg~kunnr 534 INTO itab_bkpf-kunnr 535 FROM bseg 536 WHERE bseg~belnr = itab_bkpf-belnr AND kunnr <> ''. 537 538 IF itab_bkpf-blart = 'RV'. 539 SELECT SINGLE kna1~name1 540 INTO itab_bkpf-sgtxt 541 FROM kna1 542 WHERE kunnr = itab_bkpf-kunnr. 543 CONCATENATE '销售-' itab_bkpf-sgtxt INTO itab_bkpf-sgtxt. 544 ENDIF. 545 546 MODIFY itab_bkpf INDEX sy-tabix. 547 ENDLOOP. 548 549 IF NOT itab_bseg[] IS INITIAL. 550 DATA temp_sgtxt LIKE bseg-sgtxt. 551 SORT itab_bseg DESCENDING BY belnr lifnr. 552 LOOP AT itab_bseg. 553 SELECT SINGLE txt50 554 FROM skat 555 INTO itab_bseg-txt50 556 WHERE skat~saknr = itab_bseg-hkont. 557 SELECT SINGLE cskt~ktext 558 INTO itab_bseg-ktext 559 FROM cskt 560 WHERE cskt~kostl = itab_bseg-kostl AND cskt~spras = '1'. 561 562 IF itab_bseg-lifnr <> ''. 563 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' 564 EXPORTING 565 input = itab_bseg-lifnr 566 IMPORTING 567 output = itab_bseg-lifnr. 568 CONCATENATE itab_bseg-txt50 '-' itab_bseg-lifnr INTO itab_bseg-txt50. 569 ENDIF. 570 571 IF itab_bseg-kunnr <> ''. 572 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT' 573 EXPORTING 574 input = itab_bseg-kunnr 575 IMPORTING 576 output = itab_bseg-kunnr. 577 CONCATENATE itab_bseg-txt50 '-' itab_bseg-kunnr INTO itab_bseg-txt50. 578 ENDIF. 579 IF itab_bseg-fkber_long = '1000'. 580 CONCATENATE itab_bseg-txt50 '-' itab_bseg-ktext 581 '-' itab_bseg-kostl '-' '制造费用' INTO itab_bseg-txt50. 582 ELSEIF itab_bseg-fkber_long = '2000' . 583 CONCATENATE itab_bseg-txt50 '-' itab_bseg-ktext 584 '-' itab_bseg-kostl '-' '管理费用' INTO itab_bseg-txt50. 585 ELSEIF itab_bseg-fkber_long = '3000'. 586 CONCATENATE itab_bseg-txt50 '-' itab_bseg-ktext 587 '-' itab_bseg-kostl '-' '销售费用' INTO itab_bseg-txt50. 588 ELSEIF itab_bseg-fkber_long = '4000'. 589 CONCATENATE itab_bseg-txt50 '-' itab_bseg-ktext 590 '-' itab_bseg-kostl '-' '研发费用' INTO itab_bseg-txt50. 591 ELSEIF itab_bseg-fkber_long = '5000'. 592 CONCATENATE itab_bseg-txt50 '-' itab_bseg-ktext 593 '-' itab_bseg-kostl '-' '材料附加费' INTO itab_bseg-txt50. 594 ENDIF. 595 596 MODIFY itab_bseg INDEX sy-tabix. 597 ENDLOOP. 598 ENDIF. 599 600 *************读取供应商或客户描述************* 601 IF NOT itab_bseg[] IS INITIAL."确定为已过帐的凭证 602 SELECT saknr 603 txt50 604 INTO TABLE itab_skat 605 FROM skat 606 FOR ALL ENTRIES IN itab_bseg 607 WHERE saknr = itab_bseg-hkont 608 AND spras = sy-langu 609 AND ktopl = t001-ktopl. 610 * READ TABLE ITAB_SKAT. 611 SELECT kunnr name1 612 INTO TABLE itab_kna1 613 FROM kna1 614 FOR ALL ENTRIES IN itab_bseg 615 WHERE kunnr = itab_bseg-kunnr. 616 617 SELECT lifnr name1 618 INTO TABLE itab_lfa1 619 FROM lfa1 620 FOR ALL ENTRIES IN itab_bseg 621 WHERE lifnr = itab_bseg-lifnr. 622 ENDIF. 623 624 SORT itab_bseg BY shkzg DESCENDING buzei ASCENDING belnr ASCENDING . 625 LOOP AT itab_bseg. 626 COLLECT itab_bseg INTO itab. 627 ENDLOOP. 628 629 SORT itab BY belnr. 630 LOOP AT itab. "FBY 2015 631 READ TABLE itab_bkpf WITH KEY belnr = itab-belnr. 632 IF sy-subrc = 0. 633 itab1-bukrs = itab_bkpf-bukrs. 634 itab1-belnr = itab_bkpf-belnr."会计凭证编号 635 itab1-hkont = itab-hkont. "科目编码 636 itab1-shkzg = itab-shkzg. "借方/贷方标识 637 itab1-buzei = itab-buzei. 638 itab1-dmbtr = itab-dmbtr. "按本位币计的金额 639 itab1-wrbtr = itab-wrbtr. "凭证货币金额 640 itab1-sgtxt = itab-sgtxt. "摘要 641 itab1-kunnr = itab-kunnr. "客户编号1 642 itab1-lifnr = itab-lifnr. "供应商或债权人的帐号 643 itab1-txt50 = itab-txt50. "科目名称 644 itab1-kostl = itab-kostl. "成本中心 645 itab1-fkber_long = itab-fkber_long. "功能范围 646 itab1-ktext = itab-ktext. "成本中心描述 647 itab1-name1 = itab-name1. "客户名称 648 itab1-name = itab-name. "供应商名称 649 itab1-bldat = itab_bkpf-bldat. "凭证日期 "fby 650 itab1-budat = itab_bkpf-budat. "过账日期 651 itab1-blart = itab_bkpf-blart. "类型 652 itab1-hwaer = itab_bkpf-hwaer. "本币 653 APPEND itab1. 654 CLEAR itab1. 655 ENDIF. 656 ENDLOOP. 657 ENDFORM. "FRM_GET_DATA 658 *&---------------------------------------------------------------------* 659 *& Form frm_authority_check 660 *&---------------------------------------------------------------------* 661 * text 662 *----------------------------------------------------------------------* 663 FORM frm_authority_check . 664 DATA: BEGIN OF lt_werks OCCURS 0 , 665 werks LIKE t001w-werks, 666 END OF lt_werks . 667 668 SELECT werks 669 INTO CORRESPONDING FIELDS OF TABLE lt_werks 670 FROM t001w 671 WHERE werks IN t_bukrs. 672 673 LOOP AT lt_werks . 674 AUTHORITY-CHECK OBJECT 'ZWERKS' ID 'WERKS' FIELD lt_werks-werks . 675 IF sy-subrc <> 0. 676 MESSAGE e001(00) WITH '你没有 ' lt_werks-werks '公司的操作权限!'. 677 ENDIF. 678 ENDLOOP . 679 ENDFORM. "frm_authority_check 680 681 INCLUDE zfi_sp_pbo . 682 INCLUDE zfi_sp_pai .
ZFI_SP_ALLDATA
*&---------------------------------------------------------------------* *& 包括 ZFI_SP_ALLDATA *&---------------------------------------------------------------------* *--------------------------------------------------------------------------------------------------------------------------------* DATA:comtitle LIKE t001-butxt. TYPES:BEGIN OF ty_itab1, bukrs LIKE bkpf-bukrs, belnr LIKE bseg-belnr, "会计凭证编号 hkont LIKE bseg-hkont, "科目编码 shkzg LIKE bseg-shkzg, "借方/贷方标识 buzei LIKE bseg-buzei, dmbtr LIKE bseg-dmbtr, "按本位币计的金额 wrbtr LIKE bseg-wrbtr, "凭证货币金额 sgtxt LIKE bseg-sgtxt, "摘要 kunnr LIKE bseg-kunnr, "客户编号1 lifnr LIKE bseg-lifnr, "供应商或债权人的帐号 txt50 LIKE skat-txt50, "科目名称 kostl LIKE bseg-kostl, "成本中心 fkber_long LIKE bseg-fkber_long, "功能范围 ktext LIKE cskt-ktext, "成本中心描述 name1 LIKE kna1-name1, "客户名称 name LIKE lfa1-name1, "供应商名称 bldat LIKE bkpf-bldat, "凭证日期 "fby budat LIKE bkpf-budat, "过账日期 blart LIKE bkpf-blart, "类型 hwaer LIKE bkpf-hwaer, "本币 END OF ty_itab1. DATA:itab1 TYPE TABLE OF ty_itab1 WITH HEADER LINE, itab2 TYPE TABLE OF ty_itab1 WITH HEADER LINE. DATA:BEGIN OF itab_bkpf OCCURS 0, bukrs LIKE bkpf-bukrs, butxt LIKE t001-butxt, belnr LIKE bseg-belnr,"会计凭证编号 blart LIKE bkpf-blart, bktxt LIKE bkpf-bktxt, usnam LIKE bkpf-usnam,"过帐人 ppnam LIKE bkpf-ppnam,"预制人 budat LIKE bkpf-budat, bldat LIKE bkpf-bldat, xblnr LIKE bkpf-xblnr,"参照 waers LIKE bkpf-waers,"币别码 hwaer LIKE bkpf-hwaer,"本位币 by snowchen 10/05/25 ltext LIKE t003t-ltext, "凭证类型描述 name_first LIKE user_addr-name_first, "名 name_last LIKE user_addr-name_last, "姓 sgtxt LIKE bseg-sgtxt, "摘要 kunnr LIKE bseg-kunnr, "客户代码 kursf LIKE bkpf-kursf, "汇率 END OF itab_bkpf. DATA:BEGIN OF itab_bseg OCCURS 0, belnr LIKE bseg-belnr, "会计凭证编号 hkont LIKE bseg-hkont, "科目编码 shkzg LIKE bseg-shkzg, "借方/贷方标识 buzei LIKE bseg-buzei, dmbtr LIKE bseg-dmbtr, "按本位币计的金额 wrbtr LIKE bseg-wrbtr, "凭证货币金额 sgtxt LIKE bseg-sgtxt, "摘要 kunnr LIKE bseg-kunnr, "客户编号1 lifnr LIKE bseg-lifnr, "供应商或债权人的帐号 txt50 LIKE skat-txt50, "科目名称 kostl LIKE bseg-kostl, "成本中心 fkber_long LIKE bseg-fkber_long, "功能范围 ktext LIKE cskt-ktext, "成本中心描述 name1 LIKE kna1-name1, "客户名称 name LIKE lfa1-name1, "供应商名称 END OF itab_bseg. DATA: itab LIKE TABLE OF itab_bseg WITH HEADER LINE. DATA: BEGIN OF itab_skat OCCURS 10 , saknr LIKE skat-saknr, "会计科目 txt50 LIKE skat-txt50, "科目描述 END OF itab_skat. DATA: BEGIN OF itab_kna1 OCCURS 0 , kunnr LIKE kna1-kunnr,"客户编码 name1 LIKE kna1-name1,"客户名称 END OF itab_kna1. DATA: BEGIN OF itab_lfa1 OCCURS 0 , lifnr LIKE lfa1-lifnr,"供应商编码 name1 LIKE lfa1-name1,"供应商名称 END OF itab_lfa1. DATA: BEGIN OF itab_sgtxt OCCURS 0 , sgtxt LIKE bseg-sgtxt, END OF itab_sgtxt. *--------------------------------------------------------------------------------------------------、
PBO
*&---------------------------------------------------------------------* *& Include ZFI_SP_PBO *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Module STATUS_1001 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE status_1001 OUTPUT. SET PF-STATUS 'T001'. PERFORM alvshow. "展示双击选中会计编号的详细会计科目 * SET TITLEBAR '凭证科目'. ENDMODULE. " STATUS_1001 OUTPUT
PAI
*&---------------------------------------------------------------------* *& Include ZFI_SP_PAI *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Module USER_COMMAND_1001 INPUT *&---------------------------------------------------------------------* * 单个记录已审批的的会计凭证 *----------------------------------------------------------------------* MODULE user_command_1001 INPUT. save_ok = ok_code. CLEAR ok_code. CASE save_ok. WHEN 'SP'. MOVE-CORRESPONDING gt_itab TO wa_insert. wa_insert-zerdt = sy-datum. wa_insert-uzeit = sy-uzeit. wa_insert-uname = sy-uname. wa_insert-sp = 'X'. INSERT zfi_sp_table FROM wa_insert. MOVE-CORRESPONDING gt_itab TO wa_itab. DELETE TABLE gt_itab FROM wa_itab. CLEAR:wa_itab,gt_itab. CLEAR:itab2[],itab2. LEAVE TO SCREEN 0. WHEN 'BACK' OR 'EXIT' OR 'CANCEL'. CLEAR:itab2[],itab2,wa_itab,gt_itab. LEAVE TO SCREEN 0. ENDCASE. ENDMODULE. " USER_COMMAND_1001 INPUT
abap菜鸟,记录学习笔记。才疏学浅,如有错误,请直接在评论区留言。