1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
FUNCTION ZFC_EXCEL_DOWNLOAD_FROM_SMW0. *"-------------------------------------------------------------------- *"*"局部接口: *" IMPORTING *" VALUE(I_OBJID) TYPE WWWDATATAB-OBJID *" VALUE(I_FIELDNAME) TYPE STRING *" EXPORTING *" REFERENCE(E_RETURN) TYPE BAPIRET2 *"-------------------------------------------------------------------- *--此函数用于,在SWM0上传后,通过此函数下载到本地; * 相关变量定义 DATA:lo_objdata LIKE wwwdatatab, lo_mime LIKE w3mime, lc_fullpath TYPE string VALUE 'c:\', lc_path TYPE string VALUE 'c:\', ls_destination LIKE rlgrap-filename, ls_objnam TYPE string, l_rc LIKE sy-subrc, ls_errtxt TYPE string, l_dest LIKE sapb-sappfad. * 模板下载路径名 CALL METHOD cl_gui_frontend_services=>file_save_dialog EXPORTING window_title = '模板下载' default_extension = 'xlsx' default_file_name = i_fieldname CHANGING filename = i_fieldname path = lc_path fullpath = lc_fullpath EXCEPTIONS cntl_error = 1 error_no_gui = 2 not_supported_by_gui = 3 invalid_default_file_name = 4 OTHERS = 5. * 没有选择路径 IF lc_fullpath = ''. e_return-type = 'E'. e_return-message = '请选择正确的路径!'. RETURN. ELSE. *- 路径名 l_dest = lc_fullpath. SELECT SINGLE relid "IMPORT/EXPORT 记录中的区域 objid "SAP WWW 网关对象名 FROM wwwdata INTO CORRESPONDING FIELDS OF lo_objdata WHERE srtf2 = 0 AND relid = 'MI' AND objid = i_objid. IF sy-subrc 0 OR lo_objdata-objid IS INITIAL. e_return-type = 'E'. e_return-message = '没有获得模板数据'. RETURN. ENDIF. ls_destination = l_dest. CALL FUNCTION 'DOWNLOAD_WEB_OBJECT' EXPORTING key = lo_objdata destination = ls_destination IMPORTING rc = l_rc. IF l_rc 0. e_return-type = 'E'. e_return-message = '模板下载失败'. RETURN. ENDIF. ENDIF. ENDFUNCTION. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
FUNCTION ZFC_PUB_EXCEL_UPLOAD. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(I_BECOL) TYPE I DEFAULT 1 *" VALUE(I_ENCOL) TYPE I DEFAULT 20 *" VALUE(I_BEROW) TYPE I DEFAULT 2 *" VALUE(I_ENROW) TYPE I DEFAULT 50000 *" VALUE(I_MOD) TYPE CHAR10 DEFAULT 'FIELD' *" VALUE(I_TITLE_LINE) TYPE I DEFAULT 1 *" VALUE(I_EXCEL_WAY) TYPE LOCALFILE OPTIONAL *" EXPORTING *" VALUE(E_RETURN) TYPE BAPIRET2 *" TABLES *" T_TAB TYPE STANDARD TABLE *"---------------------------------------------------------------------- *局部变量的定义 DATA: LT_EXCEL TYPE TABLE OF ALSMEX_TABLINE. DATA: LS_EXCEL TYPE ALSMEX_TABLINE, LV_COL TYPE I, CL_CX TYPE REF TO CX_ROOT, LT_HEAD TYPE TABLE OF ALSMEX_TABLINE WITH HEADER LINE. CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING TEXT = '正在导入数据'. CHECK I_EXCEL_WAY IS NOT INITIAL. IF I_MOD EQ 'FIELD' AND I_TITLE_LINE IS INITIAL. E_RETURN-TYPE = 'E'. E_RETURN-MESSAGE = '请输入TITLE行'. RETURN. ENDIF. * 把文件的数据变成内表 CLEAR LT_EXCEL. CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE' EXPORTING FILENAME = I_EXCEL_WAY I_BEGIN_COL = I_BECOL I_BEGIN_ROW = I_BEROW I_END_COL = I_ENCOL I_END_ROW = I_ENROW TABLES INTERN = LT_EXCEL EXCEPTIONS INCONSISTENT_PARAMETERS = 1 UPLOAD_OLE = 2 ERROR_MESSAGE = 3 OTHERS = 4. IF SY-SUBRC NE 0. E_RETURN-TYPE = 'E'. IF SY-MSGID IS NOT INITIAL. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4 INTO E_RETURN-MESSAGE. ELSE. CASE SY-SUBRC. WHEN '1'. E_RETURN-MESSAGE = 'inconsistent_parameters'. WHEN '2'. E_RETURN-MESSAGE = 'upload_ole'. WHEN OTHERS. E_RETURN-MESSAGE = '上传EXCEL未知异常'. ENDCASE. ENDIF. RETURN. ENDIF. DATA: DY_WA TYPE REF TO DATA, DYN_TAB TYPE REF TO DATA. FIELD-SYMBOLS: TYPE STANDARD TABLE, TYPE ANY, TYPE ANY. CREATE DATA DYN_TAB LIKE TABLE OF T_TAB. ASSIGN DYN_TAB->* TO . CREATE DATA DY_WA LIKE LINE OF . ASSIGN DY_WA->* TO . * 处理内表数据 CLEAR: LS_EXCEL,LT_HEAD,LT_HEAD[]. SORT LT_EXCEL BY ROW COL. LOOP AT LT_EXCEL INTO LS_EXCEL. IF LS_EXCEL-ROW EQ I_TITLE_LINE. APPEND LS_EXCEL TO LT_HEAD. IF I_MOD EQ 'FIELD'. AT END OF ROW. SORT LT_HEAD BY COL. ENDAT. CLEAR LS_EXCEL. CONTINUE. ENDIF. ENDIF. IF I_MOD EQ 'FIELD'. CLEAR LT_HEAD. READ TABLE LT_HEAD WITH KEY COL = LS_EXCEL-COL BINARY SEARCH. ASSIGN COMPONENT LT_HEAD-VALUE OF STRUCTURE TO . ELSE. LV_COL = LS_EXCEL-COL. ASSIGN COMPONENT LV_COL OF STRUCTURE TO . ENDIF. IF SY-SUBRC EQ 0. TRY. MOVE LS_EXCEL-VALUE TO . CATCH CX_ROOT INTO CL_CX. ASSIGN COMPONENT 'MESSAGE' OF STRUCTURE TO . IF SY-SUBRC EQ 0. = CL_CX->GET_TEXT( ). ENDIF. ASSIGN COMPONENT 'MTYPE' OF STRUCTURE TO . IF SY-SUBRC EQ 0. = 'E'. ENDIF. ASSIGN COMPONENT 'STATU' OF STRUCTURE TO . IF SY-SUBRC EQ 0. = ICON_LED_RED. ENDIF. ENDTRY. ENDIF. IF LT_HEAD-VALUE = 'MATNR'. CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' EXPORTING INPUT = IMPORTING OUTPUT = . ELSEIF LT_HEAD-VALUE(5) = 'VBELN'. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = IMPORTING OUTPUT = . ENDIF. AT END OF ROW. APPEND TO . CLEAR . ENDAT. CLEAR LS_EXCEL. ENDLOOP. T_TAB[] = []. IF T_TAB[] IS INITIAL. E_RETURN-TYPE = 'E'. E_RETURN-MESSAGE = '没有需要上传的数据'. ENDIF. ENDFUNCTION. |
1 2 3 4 5 6 7 |
REPORT ZSDR055. INCLUDE ZSDR055_TOP. INCLUDE ZSDR055_SCR. INCLUDE ZSDR055_CLS. INCLUDE ZSDR055_DYN. INCLUDE ZSDR055_FRM. INCLUDE ZSDR055_F01. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
*&---------------------------------------------------------------------* *& 包含 ZSDR003_TOP *&---------------------------------------------------------------------* TABLES: sscrfields. TYPES: BEGIN OF ty_alv, OBJKEY(79), VBELN TYPE VBAK-VBELN, POSNR TYPE VBAP-POSNR, VKORG TYPE VBAK-VKORG, VTWEG TYPE VBAK-VTWEG, SPART TYPE VBAK-SPART, KUNNR TYPE VBAK-KUNNR,"售达方 KUNNR2 TYPE VBPA-KUNNR,"送达方 KUNNR3 TYPE VBPA-KUNNR, KUNNR4 TYPE VBPA-KUNNR, AUGRU TYPE VBAK-AUGRU, VSART TYPE VBKD-VSART, SDABW TYPE VBKD-SDABW, AUART TYPE VBAK-AUART, BSTKD TYPE VBKD-BSTKD, VDATU TYPE VBAK-VDATU, BSTDK TYPE VBKD-BSTDK, MATNR TYPE VBAP-MATNR, WERKS TYPE VBAP-WERKS, ZMENG TYPE VBAP-ZMENG,"数量 ZIEME TYPE VBAP-ZIEME,"单位 VGBEL TYPE VBAP-VGBEL, VGPOS TYPE VBAP-VGPOS, REF_DOC_CA TYPE VBTYP_V,"参考凭证类型 PRSDT TYPE SY-DATUM, ITEXT TYPE MSGTX, NETPR TYPE VBAP-NETPR,"条件价格 WAERK TYPE vbap-WAERK,"货币 KPEIN TYPE KPEIN,"条件定价单位 mark, statu TYPE iconname, message(100), cellstyles TYPE lvc_t_styl, END OF ty_alv. DATA: gt_alv TYPE TABLE OF ty_alv, GS_ALV TYPE ty_alv. FIELD-SYMBOLS: STRUCTURE GS_ALV DEFAULT GS_ALV. DATA: GT_LOG LIKE TABLE OF MASSMSG, GS_LOG LIKE MASSMSG. FIELD-SYMBOLS: STRUCTURE GS_LOG DEFAULT GS_LOG. DATA: gt_structure TYPE lvc_t_fcat, wa_structure TYPE lvc_s_fcat, wa_layout TYPE lvc_s_layo, s_disvariant TYPE disvariant, gr_grid TYPE REF TO cl_gui_alv_grid, g_docking TYPE REF TO cl_gui_docking_container. *&---------------------------------------------------------------------* *& 宏定义 *&---------------------------------------------------------------------* DEFINE bulid_fieldlog. wa_structure-fieldname = &1. wa_structure-coltext = &2. wa_structure-ref_table = &3. wa_structure-ref_field = &4. wa_structure-edit = &5. wa_structure-lzero = &6. wa_structure-no_zero = &7. wa_structure-just = &8. wa_structure-key = &9. wa_structure-col_opt = 'X'. IF &1 EQ 'MARK'. wa_structure-checkbox = 'X'. ENDIF. APPEND wa_structure TO gt_structure. CLEAR wa_structure. END-OF-DEFINITION. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
*&---------------------------------------------------------------------* *& 包含 ZSDR003_SCR *&---------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK bl01 WITH FRAME TITLE TEXT-t01. PARAMETERS p_file LIKE rlgrap-filename MODIF ID m1. SELECTION-SCREEN END OF BLOCK bl01. SELECTION-SCREEN FUNCTION KEY 1. INITIALIZATION. * 工具栏添加下载模板按钮 PERFORM add_funckey. AT SELECTION-SCREEN. * 下载数据导入模板 IF sscrfields-ucomm = 'FC01'. PERFORM frm_excel_down. sscrfields-ucomm = ''. ENDIF. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. * 选择文件搜索帮助 PERFORM frm_set_file_f4 CHANGING p_file. START-OF-SELECTION. PERFORM get_data. "读取数据 END-OF-SELECTION. PERFORM show_alv. "ALV显示 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
*&---------------------------------------------------------------------* *& 包含 ZSDR003_CLS *&---------------------------------------------------------------------* CLASS lcl_event_receiver DEFINITION. PUBLIC SECTION. CLASS-METHODS: toolbar FOR EVENT toolbar OF cl_gui_alv_grid IMPORTING e_object e_interactive, after_user_command FOR EVENT after_user_command OF cl_gui_alv_grid IMPORTING e_ucomm, handle_double_click FOR EVENT double_click OF cl_gui_alv_grid IMPORTING e_row e_column. ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION *&---------------------------------------------------------------------* * 类的实施 *&---------------------------------------------------------------------* CLASS lcl_event_receiver IMPLEMENTATION. METHOD toolbar. PERFORM frm_event_toolbar USING e_object e_interactive. ENDMETHOD. "toolbar METHOD after_user_command. CASE e_ucomm. WHEN '&ALL'. PERFORM set_all_selected USING 'X'. WHEN '&SAL'. PERFORM set_all_selected USING ' '. WHEN '&CONF'. PERFORM confirm_data. ENDCASE. ENDMETHOD. "AFTER_USER_COMMAND METHOD handle_double_click. PERFORM dill_double_click USING e_row e_column. ENDMETHOD. "HANDLE_DOUBLE_CLICK ENDCLASS. "LCL_EVENT_RECEIVER IMPLEMENTATION |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
*&---------------------------------------------------------------------* *& 包含 ZSDR003_DYN *&---------------------------------------------------------------------* *& Module user_exit INTPUT *&---------------------------------------------------------------------* *& *&---------------------------------------------------------------------* MODULE user_exit INPUT. LEAVE TO SCREEN 0. ENDMODULE. " USER_EXIT INPUT *&---------------------------------------------------------------------* *& Module STATUS_9001 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE status_9001 OUTPUT. DATA: lv_title TYPE string. lv_title = lines( gt_alv[] ). * lv_title = '销售价格查询报表 条目数【' && lv_title && '】'. lv_title = SY-TITLE &&' 条目数【' && lv_title && '】'. SET PF-STATUS 'ZST'. SET TITLEBAR 'TITLE' WITH lv_title. ENDMODULE. " STATUS_9001 OUTPUT |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 |
*&---------------------------------------------------------------------* *& 包含 ZSDR003_FRM *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form ADD_FUNCKEY *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM ADD_FUNCKEY . DATA: LV_FUNCTION_KEY TYPE SMP_DYNTXT. "功能按钮 CLEAR LV_FUNCTION_KEY. LV_FUNCTION_KEY-ICON_ID = ICON_READ_FILE. LV_FUNCTION_KEY-ICON_TEXT = '模版下载'. LV_FUNCTION_KEY-QUICKINFO = '销售订单及合同批导模板下载'. SSCRFIELDS-FUNCTXT_01 = LV_FUNCTION_KEY. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_EXCEL_DOWN *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM FRM_EXCEL_DOWN . DATA: LV_OBJID TYPE W3OBJID, LS_RETURN TYPE BAPIRET2. LV_OBJID = 'ZSDR055'. CLEAR LS_RETURN. CALL FUNCTION 'ZFC_EXCEL_DOWNLOAD_FROM_SMW0' EXPORTING I_OBJID = LV_OBJID I_FIELDNAME = '销售订单及合同批导模板' IMPORTING E_RETURN = LS_RETURN. IF LS_RETURN-TYPE EQ 'E'. MESSAGE LS_RETURN-MESSAGE TYPE 'S' DISPLAY LIKE 'E'. STOP. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_SET_FILE_F4 *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM FRM_SET_FILE_F4 CHANGING E_FILE. * 局部变量-文件名定义 DATA L_FILENAME TYPE RLGRAP-FILENAME. CLEAR L_FILENAME. * 选择文件搜索帮助 CALL FUNCTION 'WS_FILENAME_GET' EXPORTING DEF_PATH = E_FILE MASK = ',*.xlsx,*.XLSX,*.xls,*.XLS.' MODE = '0' TITLE = '上传文件' IMPORTING FILENAME = L_FILENAME EXCEPTIONS INV_WINSYS = 1 NO_BATCH = 2 SELECTION_CANCEL = 3 SELECTION_ERROR = 4 OTHERS = 5. * 如果选择了文件 IF SY-SUBRC = 0 AND L_FILENAME IS NOT INITIAL. E_FILE = L_FILENAME. ENDIF. ENDFORM. " FRM_SET_FILE_F4 *&---------------------------------------------------------------------* *& Form GET_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM GET_DATA . CLEAR: GT_ALV,GT_ALV[]. PERFORM PF_CHECK_FILE. PERFORM UPLOAD_DATA. PERFORM CHECK_DATA. PERFORM SET_ALL_SELECTED USING 'X'. ENDFORM. *&---------------------------------------------------------------------* *& Form UPLOAD_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM UPLOAD_DATA . DATA: LS_RETURN TYPE BAPIRET2. CLEAR LS_RETURN. CALL FUNCTION 'ZFC_PUB_EXCEL_UPLOAD' EXPORTING I_BECOL = 1 I_ENCOL = 27 I_BEROW = 2 " 含标题 * I_ENROW = 50000 * I_MOD = 'FIELD' * I_TITLE_LINE = 1 I_EXCEL_WAY = P_FILE IMPORTING E_RETURN = LS_RETURN TABLES T_TAB = GT_ALV[]. IF LS_RETURN-TYPE EQ 'E'. MESSAGE LS_RETURN-MESSAGE TYPE 'S' DISPLAY LIKE 'E'. STOP. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form CHECK_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM CHECK_DATA. DATA: LT_TVAKZ TYPE TABLE OF TVAKZ, LS_TVAKZ TYPE TVAKZ, LT_KNVV TYPE TABLE OF KNVV, LS_KNVV TYPE KNVV, LT_MVKE TYPE TABLE OF MVKE, LS_MVKE TYPE MVKE, LT_TVKWZ TYPE TABLE OF TVKWZ, LS_TVKWZ TYPE TVKWZ, LT_MARA TYPE TABLE OF MARA, LS_MARA TYPE MARA. DATA: BEGIN OF LS_VBAK,"参考凭证 VBELN TYPE VBELN_VA, VBTYP TYPE VBTYPL, END OF LS_VBAK. DATA: LT_VBAK LIKE TABLE OF LS_VBAK. DATA: L_POSNR TYPE POSNR_VA. DATA: LS_MSGTX TYPE MSGTX. DATA: LS_ALV TYPE TY_ALV. DELETE GT_ALV WHERE VBELN IS INITIAL. CHECK GT_ALV IS NOT INITIAL. SORT GT_ALV BY VBELN POSNR. LOOP AT GT_ALV ASSIGNING . AT NEW VBELN. LS_ALV = . CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = LS_ALV-KUNNR IMPORTING OUTPUT = LS_ALV-KUNNR. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = LS_ALV-KUNNR2 IMPORTING OUTPUT = LS_ALV-KUNNR2. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = LS_ALV-KUNNR3 IMPORTING OUTPUT = LS_ALV-KUNNR3. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = LS_ALV-KUNNR4 IMPORTING OUTPUT = LS_ALV-KUNNR4. . ENDAT. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = LS_ALV-VGBEL IMPORTING OUTPUT = -VGBEL. CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT' EXPORTING INPUT = -ZIEME IMPORTING OUTPUT = -ZIEME . -VKORG = LS_ALV-VKORG . -VTWEG = LS_ALV-VTWEG . -SPART = LS_ALV-SPART . -KUNNR = LS_ALV-KUNNR . -KUNNR2 = LS_ALV-KUNNR2. -KUNNR3 = LS_ALV-KUNNR3. -KUNNR4 = LS_ALV-KUNNR4. -AUGRU = LS_ALV-AUGRU . -VDATU = LS_ALV-VDATU . -AUART = LS_ALV-AUART . -VSART = LS_ALV-VSART . -SDABW = LS_ALV-SDABW . -BSTKD = LS_ALV-BSTKD . -BSTDK = LS_ALV-BSTDK . IF -KPEIN = 0. -KPEIN = 1. ENDIF. ENDLOOP. SELECT * INTO TABLE LT_TVAKZ FROM TVAKZ. SORT GT_ALV BY KUNNR VKORG VTWEG SPART. SELECT * INTO TABLE LT_KNVV FROM KNVV FOR ALL ENTRIES IN GT_ALV WHERE KUNNR = GT_ALV-KUNNR AND VKORG = GT_ALV-VKORG AND VTWEG = GT_ALV-VTWEG AND SPART = GT_ALV-SPART . SORT GT_ALV BY MATNR VKORG VTWEG. SELECT * INTO TABLE LT_MVKE FROM MVKE FOR ALL ENTRIES IN GT_ALV WHERE MATNR = GT_ALV-MATNR AND VKORG = GT_ALV-VKORG AND VTWEG = GT_ALV-VTWEG . SELECT * INTO TABLE LT_MARA FROM MARA FOR ALL ENTRIES IN GT_ALV WHERE MATNR = GT_ALV-MATNR . SORT GT_ALV BY VKORG VTWEG WERKS. SELECT * INTO TABLE LT_TVKWZ FROM TVKWZ FOR ALL ENTRIES IN GT_ALV WHERE VKORG = GT_ALV-VKORG AND VTWEG = GT_ALV-VTWEG AND WERKS = GT_ALV-WERKS . SORT GT_ALV BY VGBEL. SELECT VBELN VBTYP INTO TABLE LT_VBAK FROM VBAK FOR ALL ENTRIES IN GT_ALV WHERE VBELN = GT_ALV-VGBEL. SORT LT_TVAKZ BY VKORG VTWEG SPART AUART. SORT LT_KNVV BY KUNNR VKORG VTWEG SPART. SORT LT_MVKE BY MATNR VKORG VTWEG. SORT LT_TVKWZ BY VKORG VTWEG WERKS. SORT LT_MARA BY MATNR. SORT LT_VBAK BY VBELN. LOOP AT GT_ALV ASSIGNING . -OBJKEY = -VBELN. -WAERK = 'CNY'. READ TABLE LT_VBAK INTO LS_VBAK WITH KEY VBELN = -VGBEL BINARY SEARCH. IF SY-SUBRC = 0. -REF_DOC_CA = LS_VBAK-VBTYP. ENDIF. IF -ZIEME IS INITIAL. READ TABLE LT_MARA INTO LS_MARA WITH KEY MATNR = -MATNR BINARY SEARCH. IF SY-SUBRC = 0. -ZIEME = LS_MARA-MEINS. ENDIF. ENDIF. READ TABLE LT_TVAKZ INTO LS_TVAKZ WITH KEY VKORG = -VKORG VTWEG = -VTWEG SPART = -SPART AUART = -AUART BINARY SEARCH. IF SY-SUBRC 0. CONCATENATE '订单类型' -AUART '未分配至销售组织' -VKORG '分销渠道' -VTWEG '产品组' -SPART INTO LS_MSGTX. PERFORM PF_SET_ERROR_MESSAGE USING LS_MSGTX 'DIS' CHANGING . ENDIF. READ TABLE LT_KNVV INTO LS_KNVV WITH KEY KUNNR = -KUNNR VKORG = -VKORG VTWEG = -VTWEG SPART = -SPART BINARY SEARCH. IF SY-SUBRC 0. CONCATENATE '客户' -KUNNR '的销售组织' -VKORG '分销渠道' -VTWEG '产品组' -SPART '不存在' INTO LS_MSGTX. PERFORM PF_SET_ERROR_MESSAGE USING LS_MSGTX 'DIS' CHANGING . ENDIF. READ TABLE LT_MVKE INTO LS_MVKE WITH KEY MATNR = -MATNR VKORG = -VKORG VTWEG = -VTWEG BINARY SEARCH. IF SY-SUBRC 0. CONCATENATE '物料' -MATNR '销售组织' -VKORG '分销渠道' -VTWEG '不存在' INTO LS_MSGTX. PERFORM PF_SET_ERROR_MESSAGE USING LS_MSGTX 'DIS' CHANGING . ENDIF. IF -WERKS IS NOT INITIAL. READ TABLE LT_TVKWZ INTO LS_TVKWZ WITH KEY VKORG = -VKORG VTWEG = -VTWEG WERKS = -WERKS BINARY SEARCH. IF SY-SUBRC 0. CONCATENATE '工厂' -WERKS '未分配至销售组织' -VKORG '分销渠道' -VTWEG INTO LS_MSGTX. PERFORM PF_SET_ERROR_MESSAGE USING LS_MSGTX 'DIS' CHANGING . ENDIF. ENDIF. ENDLOOP. * SORT GT_ALV BY OBJKEY. * LOOP AT GT_ALV ASSIGNING . * AT NEW OBJKEY. * CLEAR:L_POSNR. * ENDAT. * -POSNR = L_POSNR = L_POSNR + 10. * ENDLOOP. SORT GT_ALV BY VBELN POSNR . ENDFORM. *&---------------------------------------------------------------------* *& Form SHOW_ALV *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM SHOW_ALV . PERFORM CREATE_STRU. PERFORM DISPLAY_ALV. CALL SCREEN 9001. ENDFORM. *&---------------------------------------------------------------------* *& Form CREATE_STRU *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM CREATE_STRU . CLEAR: GT_STRUCTURE,GT_STRUCTURE[],WA_STRUCTURE. BULID_FIELDLOG: 'MARK' '选择' '' '' 'X' '' '' '' 'X', 'STATU' '状态' 'ICON' 'NAME' '' '' '' '' 'X', 'MESSAGE' '消息' '' '' '' '' '' '' '', 'VBELN' '销售订单号' 'VBAP' 'VBELN' '' '' '' '' 'X', 'POSNR' '行项目号' 'VBAP' 'POSNR' '' '' '' '' 'X', 'VKORG' '销售组织' 'VBAK' 'VKORG' '' '' '' '' 'X', 'VTWEG' '分销渠道' '' '' '' '' '' '' 'X', 'SPART' '产品组' '' '' '' '' '' '' 'X', 'KUNNR' '售达方' 'VBAK' 'KUNNR' '' '' '' '' '', 'KUNNR2' '送达方' 'VBAK' 'KUNNR' '' '' '' '' '', 'KUNNR3' '付款方' 'VBAK' 'KUNNR' '' '' '' '' '', 'KUNNR4' '开票方' 'VBAK' 'KUNNR' '' '' '' '' '', 'AUGRU' '订单原因' '' '' '' '' '' '' '', 'VSART' '运费结算方式' '' '' '' '' '' '' '', 'SDABW' '带托盘' '' '' '' '' '' '' '', 'AUART' '订单类型' '' '' '' '' '' '' '', 'BSTKD' 'K3订单号' '' '' '' '' '' '' '', 'VDATU' '交货日期' '' '' '' '' '' '' '', 'BSTDK' '到货日期' '' '' '' '' '' '' '', 'MATNR' '物料编码' 'MARA' 'MATNR' '' '' '' '' '', 'WERKS' '工厂' '' '' '' '' '' '' '', 'ZMENG' '数量' 'VBAP' 'ZMENG' '' '' '' '' '', 'ZIEME' '订单单位' 'VBAP' 'ZIEME' '' '' '' '' '', 'VGBEL' '参考合同号' '' '' '' '' '' '' '', 'VGPOS' '参考合同项目号' '' '' '' '' '' '' '', 'REF_DOC_CA' '参考凭证类型' '' '' '' '' '' '' '', 'PRSDT' '定价日期' '' '' '' '' '' '' '', 'NETPR' 'ZPR1价格' '' '' '' '' '' '' '', 'KPEIN' '条件定价单位' '' '' '' '' '' '' '', 'ITEXT' '行项目备注' '' '' '' '' '' '' ''. ****设置行格式 CLEAR WA_LAYOUT. WA_LAYOUT-CWIDTH_OPT = 'X'. WA_LAYOUT-NO_MERGING = 'X'. WA_LAYOUT-STYLEFNAME = 'CELLSTYLES'. WA_LAYOUT-ZEBRA = 'X'. WA_LAYOUT-SEL_MODE = 'A'. WA_LAYOUT-BOX_FNAME = 'SEL'. CLEAR S_DISVARIANT. S_DISVARIANT-REPORT = SY-REPID. S_DISVARIANT-USERNAME = SY-UNAME. S_DISVARIANT-LOG_GROUP = 'LG'. ENDFORM. *&---------------------------------------------------------------------* *& Form DISPLAY_ALV *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM DISPLAY_ALV . DATA: LT_TOOLS TYPE TABLE OF SY-UCOMM. "用于排除按钮 IF G_DOCKING IS INITIAL. CREATE OBJECT G_DOCKING EXPORTING REPID = SY-REPID DYNNR = '9001' SIDE = CL_GUI_DOCKING_CONTAINER=>DOCK_AT_TOP * SIDE = 10 EXTENSION = 99999 EXCEPTIONS CNTL_ERROR = 1 CNTL_SYSTEM_ERROR = 2 CREATE_ERROR = 3 LIFETIME_ERROR = 4 LIFETIME_DYNPRO_DYNPRO_LINK = 5 OTHERS = 6. IF SY-SUBRC 0. MESSAGE S001(00) WITH '屏幕初始化失败'. LEAVE LIST-PROCESSING. ENDIF. CREATE OBJECT GR_GRID EXPORTING I_PARENT = G_DOCKING. * SET HANDLER LCL_EVENT_RECEIVER=>TOOLBAR FOR GR_GRID. SET HANDLER LCL_EVENT_RECEIVER=>AFTER_USER_COMMAND FOR GR_GRID. SET HANDLER LCL_EVENT_RECEIVER=>HANDLE_DOUBLE_CLICK FOR GR_GRID. CALL METHOD GR_GRID->REGISTER_EDIT_EVENT EXPORTING I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED. CLEAR LT_TOOLS[]. APPEND '&LOCAL&DELETE_ROW' TO LT_TOOLS. APPEND '&LOCAL©_ROW' TO LT_TOOLS. APPEND '&LOCAL©' TO LT_TOOLS. APPEND '&LOCAL&APPEND' TO LT_TOOLS. APPEND '&LOCAL&INSERT_ROW' TO LT_TOOLS. APPEND '&LOCAL&CUT' TO LT_TOOLS. APPEND '&LOCAL&PASTE_NEW_ROW' TO LT_TOOLS. APPEND '&LOCAL&PASTE' TO LT_TOOLS. APPEND '&LOCAL&UNDO' TO LT_TOOLS. APPEND '&PRINT' TO LT_TOOLS. APPEND '&GRAPH ' TO LT_TOOLS. APPEND '&INFO' TO LT_TOOLS. CALL METHOD GR_GRID->SET_TABLE_FOR_FIRST_DISPLAY EXPORTING IS_LAYOUT = WA_LAYOUT I_SAVE = 'A' IS_VARIANT = S_DISVARIANT IT_TOOLBAR_EXCLUDING = LT_TOOLS CHANGING IT_FIELDCATALOG = GT_STRUCTURE IT_OUTTAB = GT_ALV[]. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form FRM_EVENT_TOOLBAR *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM FRM_EVENT_TOOLBAR USING E_OBJECT TYPE REF TO CL_ALV_EVENT_TOOLBAR_SET E_INTERACTIVE TYPE C. PERFORM SET_TOOLBAR USING '&ALL' ICON_SELECT_ALL ' ' '全选' '' '' 6 E_OBJECT. PERFORM SET_TOOLBAR USING '&SAL' ICON_DESELECT_ALL ' ' '取消全选' '' '' 7 E_OBJECT. PERFORM SET_TOOLBAR USING '' '' ' ' '' '' 3 22 E_OBJECT. PERFORM SET_TOOLBAR USING '&CONF' ICON_EXECUTE_OBJECT ' ' '创建订单' '创建订单' '' 23 E_OBJECT. ENDFORM. *&---------------------------------------------------------------------* *& Form SET_TOOLBAR *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM SET_TOOLBAR USING P_FUNCTION P_ICON P_DISABLED P_QUICKINFO P_TEXT P_TYPE P_POS E_OBJECT TYPE REF TO CL_ALV_EVENT_TOOLBAR_SET. DATA: LS_TOOLBAR TYPE STB_BUTTON. CLEAR LS_TOOLBAR. MOVE P_FUNCTION TO LS_TOOLBAR-FUNCTION. MOVE P_ICON TO LS_TOOLBAR-ICON. * move '更改'(111) to ls_toolbar-quickinfo. * move '更改' to ls_toolbar-text. MOVE P_DISABLED TO LS_TOOLBAR-DISABLED. MOVE P_QUICKINFO TO LS_TOOLBAR-QUICKINFO. MOVE P_TYPE TO LS_TOOLBAR-BUTN_TYPE. MOVE P_TEXT TO LS_TOOLBAR-TEXT. INSERT LS_TOOLBAR INTO E_OBJECT->MT_TOOLBAR INDEX P_POS. FREE: LS_TOOLBAR. ENDFORM. *&---------------------------------------------------------------------* *& Form SET_ALL_SELECTED *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM SET_ALL_SELECTED USING P_VALUE. DATA: L_STATU TYPE STRING. FIELD-SYMBOLS: TYPE TY_ALV. LOOP AT GT_ALV ASSIGNING . PERFORM GET_MARK_STATU USING 'MARK' -CELLSTYLES CHANGING L_STATU. IF L_STATU EQ 'DISABLE'. CONTINUE. ENDIF. IF -MARK EQ P_VALUE. CONTINUE. ENDIF. -MARK = P_VALUE. ENDLOOP. UNASSIGN: . PERFORM REFRESH_ALV. FREE: L_STATU. ENDFORM. *&---------------------------------------------------------------------* *& Form GET_MARK_STATU *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM GET_MARK_STATU USING P_FIELD IT_CELLSTYLES TYPE LVC_T_STYL CHANGING E_STATU. DATA: LS_CELL TYPE LVC_S_STYL. E_STATU = 'ENABLE'. CLEAR LS_CELL. READ TABLE IT_CELLSTYLES INTO LS_CELL WITH KEY FIELDNAME = P_FIELD. CHECK SY-SUBRC EQ 0. IF LS_CELL-STYLE EQ '00100000'. E_STATU = 'DISABLE'. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Form REFRESH_ALV *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM REFRESH_ALV . DATA: STBL TYPE LVC_S_STBL. STBL-ROW = 'X'." 基于行的稳定刷新 STBL-COL = 'X'." 基于列的稳定刷新 CHECK GR_GRID IS NOT INITIAL. CALL METHOD GR_GRID->SET_FRONTEND_LAYOUT EXPORTING IS_LAYOUT = WA_LAYOUT. CALL METHOD GR_GRID->REFRESH_TABLE_DISPLAY EXPORTING IS_STABLE = STBL. FREE: STBL. ENDFORM. " REFRESH_ALV *&---------------------------------------------------------------------* *& Form CONFIRM_DATA *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form SET_STYLE *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM SET_STYLE USING FIELDNAME STYLE TYPE STRING CHANGING IT_STYLES TYPE LVC_T_STYL. DATA: LS_STYLE TYPE LVC_S_STYL. CLEAR LS_STYLE. LS_STYLE-FIELDNAME = FIELDNAME. IF STYLE EQ 'ENABLE'. LS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_ENABLED. ELSE. LS_STYLE-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. ENDIF. READ TABLE IT_STYLES TRANSPORTING NO FIELDS WITH KEY FIELDNAME = FIELDNAME. IF SY-SUBRC EQ 0. MODIFY IT_STYLES FROM LS_STYLE INDEX SY-TABIX. ELSE. INSERT LS_STYLE INTO TABLE IT_STYLES. ENDIF. FREE: LS_STYLE. ENDFORM. *&---------------------------------------------------------------------* *& Form SET_ERROR_MESSAGE *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM PF_SET_ERROR_MESSAGE USING P_MESSAGE P_CHANGE_ENA" '',DIS,EN CHANGING WA_ALV TYPE TY_ALV. WA_ALV-STATU = ICON_RED_LIGHT. WA_ALV-MESSAGE = P_MESSAGE. PERFORM PF_CREATE_LOG_1 USING WA_ALV-OBJKEY WA_ALV-MESSAGE 'E'. IF P_CHANGE_ENA = 'DIS'. PERFORM SET_STYLE USING 'MARK' 'DISABLE' CHANGING WA_ALV-CELLSTYLES. ENDIF. ENDFORM. "set_error_message *&---------------------------------------------------------------------* *& Form CALL_BDC *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form CONVER_DATE *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM CONVER_DATE USING I_FKDAT CHANGING E_FKDAT. DATA: LV_FKDAT TYPE STRING, LV_DATE1 TYPE STRING, LV_DATE2 TYPE STRING, LV_DATE3 TYPE STRING, LV_LINE TYPE I. CLEAR LV_FKDAT. LV_FKDAT = I_FKDAT. REPLACE ALL OCCURRENCES OF '年' IN LV_FKDAT WITH '.'. REPLACE ALL OCCURRENCES OF '月' IN LV_FKDAT WITH '.'. REPLACE ALL OCCURRENCES OF '日' IN LV_FKDAT WITH SPACE. IF STRLEN( LV_FKDAT ) GT 6. IF LV_FKDAT+4(1) NA '0123456789' AND LV_FKDAT+6(1) NA '0123456789'. LV_LINE = STRLEN( LV_FKDAT ) - 5. LV_FKDAT = LV_FKDAT+0(5) && '0' && LV_FKDAT+5(LV_LINE). ENDIF. LV_LINE = STRLEN( LV_FKDAT ) - 8. IF LV_FKDAT+7(1) NA '0123456789' AND LV_LINE EQ 1. LV_FKDAT = LV_FKDAT+0(8) && '0' && LV_FKDAT+8(1). ENDIF. REPLACE ALL OCCURRENCES OF '/' IN LV_FKDAT WITH SPACE. REPLACE ALL OCCURRENCES OF '\' IN LV_FKDAT WITH SPACE. REPLACE ALL OCCURRENCES OF '-' IN LV_FKDAT WITH SPACE. REPLACE ALL OCCURRENCES OF '.' IN LV_FKDAT WITH SPACE. CONDENSE LV_FKDAT NO-GAPS. ENDIF. E_FKDAT = LV_FKDAT. ENDFORM. *&---------------------------------------------------------------------* *& Form DILL_DOUBLE_CLICK *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* FORM DILL_DOUBLE_CLICK USING P_ROW TYPE LVC_S_ROW P_COLUMN TYPE LVC_S_COL. DATA: LT_LOG TYPE TABLE OF MASSMSG, LS_LOG TYPE MASSMSG. DATA: LS_ALV TYPE TY_ALV. FIELD-SYMBOLS: TYPE ANY, TYPE ANY. DATA: L_OBJKEY TYPE TY_ALV-OBJKEY. CLEAR LS_ALV. READ TABLE GT_ALV INTO LS_ALV INDEX P_ROW-INDEX. * CHECK SY-SUBRC EQ 0. ASSIGN COMPONENT P_COLUMN-FIELDNAME OF STRUCTURE LS_ALV TO . IF IS INITIAL. RETURN. ENDIF. CASE P_COLUMN-FIELDNAME. WHEN 'MATNR'. SET PARAMETER ID 'MAT' FIELD . CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN. WHEN 'EBELN' OR 'ZFYDD'. CALL FUNCTION 'ME_DISPLAY_PURCHASE_DOCUMENT' EXPORTING I_EBELN = EXCEPTIONS NOT_FOUND = 1 NO_AUTHORITY = 2 INVALID_CALL = 3 PREVIEW_NOT_POSSIBLE = 4 OTHERS = 5. WHEN 'VBELN'. SET PARAMETER ID 'AUN' FIELD . CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN . WHEN 'VBELN2'. SET PARAMETER ID 'VL' FIELD . CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN . WHEN 'LIFNR'. CALL FUNCTION 'MMPUR_VENDOR_DISPLAY' EXPORTING IM_LIFNR = * IM_EKORG = 'B000' . WHEN 'INFNR'. CALL FUNCTION 'MMPUR_INFO_RECORD_DISPLAY' EXPORTING IM_INFNR = IM_EKORG = '' IM_WERKS = ''. WHEN 'WERKS'. DATA: LS_VT001W TYPE V_T001W. LS_VT001W-MANDT = SY-MANDT. LS_VT001W-WERKS = . CALL FUNCTION 'VIEW_MAINTENANCE_SINGLE_ENTRY' EXPORTING ACTION = 'SHOW' VIEW_NAME = 'V_T001W' CHANGING ENTRY = LS_VT001W. WHEN 'BELNR'. SET PARAMETER ID 'BLN' FIELD . SET PARAMETER ID 'BUK' FIELD '1000'. SET PARAMETER ID 'GJR' FIELD '2008'. CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN . WHEN 'STATU' OR 'MESSAGE'. ASSIGN COMPONENT 'OBJKEY' OF STRUCTURE LS_ALV TO . CHECK SY-SUBRC = 0. CHECK IS NOT INITIAL. LT_LOG[] = GT_LOG[]. DELETE LT_LOG WHERE OBJKEY . CHECK LT_LOG IS NOT INITIAL. CALL FUNCTION 'ZFC_SHOW_LOG' TABLES IT_LOG = LT_LOG. WHEN 'VGBEL'. IF LS_ALV-REF_DOC_CA = 'G'. SET PARAMETER ID 'AUN' FIELD . CALL TRANSACTION 'VA43' AND SKIP FIRST SCREEN . ELSE. SET PARAMETER ID 'AUN' FIELD . CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN . ENDIF. WHEN OTHERS. "显示明细 * PERFORM PF_SHOW_ITEM USING LS_ALV. ENDCASE. ENDFORM. FORM PF_CREATE_LOG_1 USING P_OBJKEY TYPE CHAR79 P_MSGTX TYPE MSGTX P_MSGTY TYPE MSGTY . DATA: L_MSGTX TYPE SYMSGV. L_MSGTX = P_MSGTX. CALL FUNCTION 'ZFC_CREATE_LOG' EXPORTING I_OBJKEY = P_OBJKEY I_MSGTY = P_MSGTY I_MSGV1 = L_MSGTX TABLES LT_LOG = GT_LOG. ENDFORM. "PF_CREATE_LOG_1 *&---------------------------------------------------------------------* *& Form PF_CHECK_FILE *&---------------------------------------------------------------------* *& text *&---------------------------------------------------------------------* *& --> p1 text *& FILE_EXIST EXPORTING FILE = LF_FILE RECEIVING RESULT = L_FLAG EXCEPTIONS CNTL_ERROR = 1 ERROR_NO_GUI = 2 WRONG_PARAMETER = 3 NOT_SUPPORTED_BY_GUI = 4 OTHERS = 5. IF SY-SUBRC = 0 AND L_FLAG IS INITIAL. MESSAGE S002(ZMSG_PUB) WITH P_FILE DISPLAY LIKE 'E' . LEAVE LIST-PROCESSING. ENDIF. ENDFORM. |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 |
*&---------------------------------------------------------------------* *& 包含 ZSDR055_F01 *&---------------------------------------------------------------------* FORM CONFIRM_DATA . DATA: LT_ALV TYPE TABLE OF TY_ALV, LS_ALV TYPE TY_ALV. LT_ALV = GT_ALV. DELETE LT_ALV WHERE NOT MARK = 'X'. SORT LT_ALV BY OBJKEY. DELETE ADJACENT DUPLICATES FROM LT_ALV COMPARING OBJKEY. LOOP AT LT_ALV INTO LS_ALV. DELETE GT_LOG WHERE OBJKEY = LS_ALV-OBJKEY. PERFORM PF_CREATE_SO1 USING LS_ALV. ENDLOOP. PERFORM REFRESH_ALV. ENDFORM. FORM PF_CREATE_SO USING PS_ALV TYPE TY_ALV. "如有问题,可考虑修改成使用这个FORM。 DATA: LS_HEADER TYPE ZSSD_027_HEAD, LT_ITEM TYPE ZSSD_027_ITEM_T, LT_PARTNER TYPE ZSSD_027_PART_T, LT_CONDITIONS TYPE ZSSD_027_COND_T, LT_TEXT TYPE ZSSD_027_TEXT_T, LV_MSG TYPE ZSSD_DMSGR. DATA: LS_ALV TYPE TY_ALV. MOVE-CORRESPONDING PS_ALV TO LS_HEADER. CALL FUNCTION 'ZFM_DMS_SD_027' EXPORTING IS_HEADER = LS_HEADER IT_ITEM = LT_ITEM IT_PARTNER = LT_PARTNER IT_CONDITIONS = LT_CONDITIONS IT_TEXT = LT_TEXT IMPORTING EV_MSG = LV_MSG. ENDFORM. FORM PF_CREATE_SO1 USING PS_ALV TYPE TY_ALV. * DATA: L_VBELN TYPE BAPIVBELN-VBELN. DATA: RETURN_FLAG(1) TYPE C, POSNR_G TYPE I VALUE 10 , "项目号 PARTN_NUMB(20) TYPE C. "客户端送达方 * 定义工作区 DATA: WA_HEADER TYPE BAPISDHD1, "表头 WA_HEADERX TYPE BAPISDHD1X, "表头标志 WA_PARTNER TYPE BAPIPARNR, "业务伙伴 WA_ITEM TYPE BAPISDITM, "行项目 WA_ITEMX TYPE BAPISDITMX, "行项目标志 WA_COND TYPE BAPICOND, "价格条件 WA_CONDX TYPE BAPICONDX, "价格条件标志 WA_SCHDL TYPE BAPISCHDL, "交付计划 WA_SCHDLX TYPE BAPISCHDLX, "交付计划标志 WA_RETURN TYPE BAPIRET2. "返回错误信息 * 定义内表 DATA: LT_ITEM TYPE STANDARD TABLE OF BAPISDITM, LT_ITEMX TYPE STANDARD TABLE OF BAPISDITMX, LT_PARTNER TYPE STANDARD TABLE OF BAPIPARNR, LT_COND TYPE STANDARD TABLE OF BAPICOND, LT_CONDX TYPE STANDARD TABLE OF BAPICONDX, LT_SCHDL TYPE STANDARD TABLE OF BAPISCHDL, LT_SCHDLX TYPE STANDARD TABLE OF BAPISCHDLX, LT_RETURN TYPE STANDARD TABLE OF BAPIRET2, LS_SALES_TEXT LIKE BAPISDTEXT, LT_SALES_TEXT LIKE TABLE OF BAPISDTEXT. DATA: LT_ALV TYPE TABLE OF TY_ALV. DATA: LS_ALV TYPE TY_ALV. * 给head 赋值 CLEAR WA_HEADER. WA_HEADER-DOC_TYPE = PS_ALV-AUART. "销售凭证类型 WA_HEADER-SALES_ORG = PS_ALV-VKORG. "销售组织 WA_HEADER-DISTR_CHAN = PS_ALV-VTWEG. "分销渠道 WA_HEADER-DIVISION = PS_ALV-SPART. "产品组 * wa_header-sales_grp = PS_ALV-vkgrp. "销售组 * wa_header-sales_off = PS_ALV-vkbur. "销售办事处 WA_HEADER-REQ_DATE_H = PS_ALV-VDATU."请求交货日期 * wa_header-purch_no_c = PS_ALV-bstkd. "采购订单编号-PC号 * wa_header-pp_search = PS_ALV-ktext_v. "采购订单描述 * wa_header-pmnttrms = PS_ALV-dzterm."付款条件 * wa_header-ship_cond = PS_ALV-dzterm. "装运条件 * wa_header-purch_no_s = PS_ALV-bstkd_e. "装运条件 WA_HEADER-ORD_REASON = PS_ALV-AUGRU."订单原因 WA_HEADER-SHIP_TYPE = PS_ALV-VSART."运费结算方式 WA_HEADER-S_PROC_IND = PS_ALV-SDABW."带托盘 WA_HEADER-PURCH_NO_C = PS_ALV-BSTKD."K3订单号=客户参考 WA_HEADER-PURCH_DATE = PS_ALV-BSTDK."期望到货日期 IF PS_ALV-AUART = 'ZCQ'. WA_HEADER-PO_DAT_S = PS_ALV-VDATU."请求交货日期 ENDIF. * WA_HEADER-REFDOC_CAT = 'G'."期望到货日期 * * CLEAR WA_HEADERX. * WA_HEADERX-DOC_TYPE = 'X'. "销售凭证类型X * WA_HEADERX-SALES_ORG = 'X'. "销售组织 * WA_HEADERX-DISTR_CHAN = 'X'. "分销渠道 * WA_HEADERX-DIVISION = 'X'. "产品组 * WA_HEADERX-SALES_GRP = 'X'. "销售组 * WA_HEADERX-SALES_OFF = 'X'. "销售办事处 * WA_HEADERX-REQ_DATE_H = 'X'."请求交货日期 * WA_HEADERX-PURCH_NO_C = 'X'. "采购订单编号-PC号 * WA_HEADERX-PP_SEARCH = 'X'. "采购订单描述 * WA_HEADERX-PMNTTRMS = 'X'."付款条件 * WA_HEADERX-SHIP_COND = 'X'. "装运条件 * WA_HEADERX-PURCH_NO_S = 'X'. "装运条件 * WA_HEADERX-ORD_REASON = 'X'."订单原因 * WA_HEADERX-SHIP_TYPE = 'X'."运费结算方式 * WA_HEADERX-S_PROC_IND = 'X'."带托盘 * WA_HEADERX-PURCH_NO_C = 'X'."K3订单号=客户参考 * WA_HEADERX-PURCH_DATE = 'X'."期望到货日期 * WA_HEADER-REFDOC_CAT = 'X'."期望到货日期 * * 客户 赋值客户号 客户端送达方 * 售达方 CLEAR: WA_PARTNER, LT_PARTNER[]. WA_PARTNER-PARTN_ROLE = 'AG'. "售达方 WA_PARTNER-PARTN_NUMB = PS_ALV-KUNNR. APPEND WA_PARTNER TO LT_PARTNER. * WE 送达方 CLEAR WA_PARTNER. WA_PARTNER-PARTN_ROLE = 'WE'. "WE 送达方 WA_PARTNER-PARTN_NUMB = PS_ALV-KUNNR2. * wa_partner-name = '宋大房名称'. APPEND WA_PARTNER TO LT_PARTNER. * RG 付款方 CLEAR WA_PARTNER. WA_PARTNER-PARTN_ROLE = 'RG'."RG 付款方 WA_PARTNER-PARTN_NUMB = PS_ALV-KUNNR3. APPEND WA_PARTNER TO LT_PARTNER. * 收票方 CLEAR WA_PARTNER. WA_PARTNER-PARTN_ROLE = 'RE'. "收票方 WA_PARTNER-PARTN_NUMB = PS_ALV-KUNNR4. APPEND WA_PARTNER TO LT_PARTNER. *行项目处理 REFRESH: LT_ITEM,LT_COND,LT_SCHDL. * 循环给lt_item 赋值 LOOP AT GT_ALV INTO LS_ALV WHERE OBJKEY = PS_ALV-OBJKEY AND MARK = 'X' . CLEAR WA_ITEM. WA_ITEM-ITM_NUMBER = LS_ALV-POSNR. "项目号 WA_ITEM-MATERIAL = LS_ALV-MATNR. "物料号 WA_ITEM-SALES_UNIT = LS_ALV-ZIEME. "计量单位 WA_ITEM-TARGET_QTY = LS_ALV-ZMENG. "数量 WA_ITEM-PLANT = LS_ALV-WERKS. "工厂 WA_ITEM-REF_DOC = LS_ALV-VGBEL. "参考单据的单据编号/参考合同 WA_ITEM-REF_DOC_IT = LS_ALV-VGPOS. "参考项目的项目号/参考合同项目号 WA_ITEM-PRICE_DATE = LS_ALV-PRSDT. "定价日期 * WA_ITEM-SHORT_TEXT = LS_ALV-ITEXT. "行项目备注 WA_ITEM-REF_DOC_CA = LS_ALV-REF_DOC_CA."G,H IF LS_ALV-WAERK EQ ''. WA_ITEM-CURRENCY = LS_ALV-WAERK. "货币代码 ELSE. WA_ITEM-CURRENCY = 'CNY'. ENDIF. APPEND WA_ITEM TO LT_ITEM. * CLEAR WA_ITEMX. * WA_ITEMX-ITM_NUMBER = LS_ALV-POSNR. "项目号 * WA_ITEMX-MATERIAL = 'X'. "物料号 * WA_ITEMX-SALES_UNIT = 'X'. "计量单位 * WA_ITEMX-TARGET_QTY = 'X'. "数量 ** wa_itemx-currency = 'X'. "凭证货币不存在此字段 * WA_ITEMX-PLANT = 'X'. "工厂 * WA_ITEMX-REF_DOC = 'X'. "参考单据的单据编号/参考合同 * WA_ITEMX-REF_DOC_IT = 'X'. "参考项目的项目号/参考合同项目号 * WA_ITEMX-PRICE_DATE = 'X'. "定价日期 * WA_ITEMX-SHORT_TEXT = 'X'. "行项目备注 * APPEND WA_ITEMX TO LT_ITEMX. * CLEAR WA_SCHDL. "计划行 WA_SCHDL-ITM_NUMBER = LS_ALV-POSNR. WA_SCHDL-REQ_QTY = LS_ALV-ZMENG. "数量 APPEND WA_SCHDL TO LT_SCHDL. * CLEAR WA_SCHDLX. * WA_SCHDLX-ITM_NUMBER = LS_ALV-POSNR. * WA_SCHDLX-REQ_QTY = 'X'. "数量 * APPEND WA_SCHDLX TO LT_SCHDLX. IF LS_ALV-NETPR 0. CLEAR: WA_COND. "Item Conditions WA_COND-ITM_NUMBER = LS_ALV-POSNR. WA_COND-COND_TYPE = 'ZPR1'. "定价条件 WA_COND-COND_VALUE = LS_ALV-NETPR / 10. "价格 WA_COND-COND_P_UNT = LS_ALV-KPEIN."条件定价单位 APPEND WA_COND TO LT_COND. ENDIF. "文本 LS_SALES_TEXT-ITM_NUMBER = LS_ALV-POSNR . LS_SALES_TEXT-TEXT_ID = '0001'. LS_SALES_TEXT-LANGU = SY-LANGU . LS_SALES_TEXT-TEXT_LINE = LS_ALV-ITEXT . APPEND LS_SALES_TEXT TO LT_SALES_TEXT . ENDLOOP. * 调用bapi 接口创建订单 * CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2' * EXPORTING * ORDER_HEADER_IN = WA_HEADER * IMPORTING * SALESDOCUMENT = L_VBELN * TABLES * RETURN = LT_RETURN "返回记录 * ORDER_ITEMS_IN = LT_ITEM "行记录项 * ORDER_PARTNERS = LT_PARTNER "客户 * ORDER_SCHEDULES_IN = LT_SCHDL "计划行 * ORDER_CONDITIONS_IN = LT_COND. "添加 CALL FUNCTION 'SD_SALESDOCUMENT_CREATE' EXPORTING SALES_HEADER_IN = WA_HEADER IMPORTING SALESDOCUMENT_EX = L_VBELN TABLES RETURN = LT_RETURN "返回记录 SALES_ITEMS_IN = LT_ITEM "行记录项 SALES_PARTNERS = LT_PARTNER "客户 SALES_SCHEDULES_IN = LT_SCHDL "计划行 SALES_CONDITIONS_IN = LT_COND "添加 SALES_TEXT = LT_SALES_TEXT. * 处理错误消息:通过判断消息的类型,来判断BAPI是否成功 CALL FUNCTION 'ZFC_CREATE_LOG' EXPORTING I_OBJKEY = LS_ALV-OBJKEY TABLES LT_LOG = GT_LOG LT_RETURN1 = LT_RETURN. LOOP AT LT_RETURN INTO WA_RETURN. IF WA_RETURN-TYPE EQ 'E' OR WA_RETURN-TYPE = 'A' OR WA_RETURN = 'X'. RETURN_FLAG = 'X'. "失败 ENDIF. ENDLOOP. IF RETURN_FLAG NE 'X'. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING WAIT = 'X'. COMMIT WORK AND WAIT. LOOP AT GT_ALV ASSIGNING WHERE OBJKEY = PS_ALV-OBJKEY AND MARK = 'X'. -STATU = ICON_GREEN_LIGHT. -MESSAGE = '创建销售订单成功'. -MARK = ''. -VBELN = L_VBELN. PERFORM SET_STYLE USING 'MARK' 'DISABLE' CHANGING -CELLSTYLES. ENDLOOP. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' . LOOP AT GT_ALV ASSIGNING WHERE OBJKEY = LS_ALV-OBJKEY AND MARK = 'X'. -STATU = ICON_RED_LIGHT. -MESSAGE = '创建销售订单失败'. ENDLOOP. ENDIF. ENDFORM. " CREATE_SO |