REUSE_ALV_GRID_DISPLAY_LVC 单元格可编辑
1 *----------------------------------------------------------------------- 2 REPORT zm00_upload_agreement. 3 4 *&---------------------------------------------------------------------* 5 *& Include ZM00_UPLOAD_AGREEMENT_TOP 6 *&---------------------------------------------------------------------* 7 *&---------------------------------------------------------------------* 8 *& TYPE-POOLS 9 *&---------------------------------------------------------------------* 10 TYPE-POOLS : slis, truxs, icon. 11 12 *&---------------------------------------------------------------------* 13 *& TABLES 14 *&---------------------------------------------------------------------* 15 TABLES : ekko. 16 17 *&---------------------------------------------------------------------* 18 *& TYPES 19 *&---------------------------------------------------------------------* 20 TYPES : 21 BEGIN OF ty_t024, 22 ekgrp TYPE t024-ekgrp, 23 END OF ty_t024, 24 25 BEGIN OF ty_t001w, 26 werks TYPE t001w-werks, 27 END OF ty_t001w, 28 29 BEGIN OF ty_t161, 30 bsart TYPE t161-bsart, 31 pincr TYPE t161-pincr, 32 END OF ty_t161, 33 34 BEGIN OF ty_lfm1, 35 lifnr TYPE lfm1-lifnr, 36 ekorg TYPE lfm1-ekorg, 37 zterm TYPE lfm1-zterm, 38 webre TYPE lfm1-webre, 39 xersy TYPE lfm1-xersy, 40 waers TYPE lfm1-waers, 41 END OF ty_lfm1, 42 43 BEGIN OF ty_lfa1, 44 lifnr TYPE lfa1-lifnr, 45 name1 TYPE lfa1-name1, 46 END OF ty_lfa1, 47 48 BEGIN OF ty_t163, 49 pstyp TYPE t163-pstyp, 50 wepos TYPE t163-wepos, 51 repos TYPE t163-repos, 52 END OF ty_t163, 53 54 BEGIN OF ty_valuetab, 55 field TYPE char80, 56 END OF ty_valuetab, 57 58 * iv 1.2 59 BEGIN OF ty_ekpo, 60 ebeln TYPE ekpo-ebeln, 61 ebelp TYPE ekpo-ebelp, 62 matnr TYPE ekpo-matnr, 63 peinh TYPE ekpo-peinh, 64 knttp TYPE ekpo-knttp, 65 END OF ty_ekpo, 66 67 68 BEGIN OF ty_upload, 69 70 cbox TYPE c, 71 style TYPE lvc_t_styl, "FOR DISABLE 72 73 status TYPE icon_d, 74 znumber TYPE zsm_upload_agreement-znumber. 75 INCLUDE TYPE zsm_download_agreement_1. 76 TYPES : 77 name1 TYPE lfa1-name1, 78 agreeno TYPE zsm_upload_agreement-agreeno, 79 message TYPE zsm_upload_agreement-message, 80 msgtype TYPE zsm_upload_agreement-msgtype, 81 sele TYPE char1, 82 msg_id TYPE i, 83 END OF ty_upload, 84 85 BEGIN OF ty_ekko, 86 ebeln TYPE ekpo-ebeln, 87 END OF ty_ekko, 88 89 BEGIN OF ty_return. 90 INCLUDE TYPE bapiret2. 91 TYPES : 92 msg_id TYPE i, 93 END OF ty_return. 94 95 *&---------------------------------------------------------------------* 96 *& GLOBAL INTERNAL TABLE 97 *&---------------------------------------------------------------------* 98 DATA : gt_map_desc TYPE TABLE OF zc00_map_desc, 99 gt_upload TYPE TABLE OF ty_upload, 100 * Begin ins v1.5 by Linzhi Shi @14.07.2017 16:08:54 101 gt_out TYPE TABLE OF ty_upload, 102 * end ins v1.5 by Linzhi Shi @14.07.2017 16:08:54 103 gt_return TYPE TABLE OF ty_return, 104 gt_t163 TYPE TABLE OF ty_t163, 105 gt_t161 TYPE TABLE OF ty_t161, 106 gt_a016 TYPE TABLE OF a016, 107 gs_a016 TYPE a016, 108 gt_ekpo TYPE SORTED TABLE OF ty_ekpo WITH UNIQUE KEY ebeln ebelp, "iv 1.2 109 gt_lfa1 TYPE HASHED TABLE OF ty_lfa1 WITH UNIQUE KEY lifnr, 110 gt_lfm1 TYPE TABLE OF ty_lfm1, 111 gs_lfm1 TYPE ty_lfm1, 112 gt_fcat TYPE TABLE OF lvc_s_fcat. 113 114 *&---------------------------------------------------------------------* 115 *& GLOBAL VARIABLES 116 *&---------------------------------------------------------------------* 117 DATA : "gv_ok TYPE char1, 118 gv_success TYPE i, 119 gv_total_rec TYPE i. 120 121 *&---------------------------------------------------------------------* 122 *& GLOBAL RANGES 123 *&---------------------------------------------------------------------* 124 DATA : r_kschl TYPE RANGE OF konp-kschl. 125 126 *&---------------------------------------------------------------------* 127 *& GLOBAL FIELD SYMBOLS 128 *&---------------------------------------------------------------------* 129 FIELD-SYMBOLS : <fs_report> TYPE STANDARD TABLE, 130 <fs_wa> TYPE any. 131 132 CONSTANTS : cv_upload TYPE char20 VALUE 'ZSM_UPLOAD_AGREEMENT', 133 cv_change TYPE char20 VALUE 'ZSM_CHANGE_AGREEMENT'. 134 135 *&---------------------------------------------------------------------* 136 *& SELECTION SCREEN 137 *&---------------------------------------------------------------------* 138 SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME. 139 PARAMETERS : p_ekorg TYPE ekko-ekorg OBLIGATORY MEMORY ID eko, 140 p_werks TYPE ekpo-werks OBLIGATORY MEMORY ID wrk. 141 *SELECT-OPTIONS s_bsart FOR ekko-bsart. "dv 1.2 142 SELECT-OPTIONS s_bsart FOR ekko-bsart DEFAULT 'MK'. "iv 1.2 143 SELECTION-SCREEN END OF BLOCK b1. 144 145 SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME. 146 SELECTION-SCREEN BEGIN OF LINE. 147 SELECTION-SCREEN COMMENT 3(31) text-t01 FOR FIELD p_file. 148 PARAMETERS : p_file TYPE ibipparms-path MEMORY ID fln. "ch 1.2 149 SELECTION-SCREEN END OF LINE. 150 PARAMETERS : rb_creat RADIOBUTTON GROUP g1, 151 rb_chang RADIOBUTTON GROUP g1, 152 p_test AS CHECKBOX. 153 SELECTION-SCREEN END OF BLOCK b2. 154 155 *----------------------------------------------------------------------- 156 * AT SELECTION SCREEN 157 *----------------------------------------------------------------------- 158 AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. 159 PERFORM get_directory. 160 161 *&---------------------------------------------------------------------* 162 *& START-OF-SELECTION 163 *&---------------------------------------------------------------------* 164 START-OF-SELECTION. 165 166 * upload from LOCAL to itab 167 PERFORM upload_local_to_itab. 168 169 * get and set vendor name 170 PERFORM get_vendor_name. 171 * get payment term,currency,GR ind,ERS ind 172 PERFORM get_payment_term. 173 * get item interval 174 PERFORM get_item_interval. 175 * get GR IR indicator 176 PERFORM get_gr_ir_ind. 177 178 IF rb_chang IS NOT INITIAL. "CHANGE MODE , get KNUMH 179 * get condition 180 PERFORM get_condition. 181 * get old PO 182 PERFORM get_old_po. 183 ENDIF. 184 185 *&---------------------------------------------------------------------* 186 *& END-OF-SELECTION 187 *&---------------------------------------------------------------------* 188 END-OF-SELECTION. 189 190 * display in ALV 191 PERFORM display_upload. 192 193 FORM display_upload. 194 DATA:ls_layout TYPE lvc_s_layo , 195 lt_fieldcat TYPE lvc_t_fcat, 196 ls_fieldcat TYPE lvc_s_fcat, 197 ls_map_desc TYPE zc00_map_desc. 198 DATA : lv_stru TYPE dd02l-tabname. 199 200 FIELD-SYMBOLS <lfs_fcat> TYPE lvc_s_fcat. 201 202 IF rb_chang IS NOT INITIAL. "change 203 lv_stru = cv_change. 204 ELSE. "upload 205 lv_stru = cv_upload. 206 ENDIF. 207 208 ls_layout-cwidth_opt = 'X'. 209 ls_layout-stylefname = 'STYLE'. 210 211 CALL FUNCTION 'LVC_FIELDCATALOG_MERGE' 212 EXPORTING 213 i_structure_name = lv_stru 214 CHANGING 215 ct_fieldcat = lt_fieldcat 216 EXCEPTIONS 217 inconsistent_interface = 1 218 program_error = 2 219 OTHERS = 3. 220 IF sy-subrc <> 0. 221 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 222 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 223 ENDIF. 224 225 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC' 226 EXPORTING 227 i_callback_program = sy-cprog 228 i_callback_pf_status_set = 'SET_PF_STATUS' 229 i_callback_user_command = 'USER_COMMAND' 230 i_callback_top_of_page = 'TOP_OF_PAGE' 231 is_layout_lvc = ls_layout 232 it_fieldcat_lvc = lt_fieldcat 233 TABLES 234 t_outtab = gt_out 235 EXCEPTIONS 236 program_error = 1 237 OTHERS = 2. 238 IF sy-subrc <> 0. 239 * Implement suitable error handling here 240 ENDIF. 241 ENDFORM. 242 243 *&---------------------------------------------------------------------* 244 *& Form top_of_page 245 *&---------------------------------------------------------------------* 246 * Standard Header 247 *----------------------------------------------------------------------* 248 FORM top_of_page . "#EC CALLED 249 250 DATA: lt_comments TYPE slis_t_listheader, 251 ls_comments TYPE LINE OF slis_t_listheader, 252 lv_bukrs TYPE bukrs. 253 254 * add comment 255 ls_comments-typ = 'S'. 256 ls_comments-key = 'Test Run:'(t22). 257 ls_comments-info = p_test. 258 APPEND ls_comments TO lt_comments. 259 260 * add total rec 261 ls_comments-typ = 'S'. 262 ls_comments-key = 'Total Records:'(t23). 263 ls_comments-info = gv_total_rec. 264 APPEND ls_comments TO lt_comments. 265 266 * add total success 267 ls_comments-typ = 'S'. 268 ls_comments-key = 'Total Success:'(t24). 269 ls_comments-info = gv_success. 270 APPEND ls_comments TO lt_comments. 271 272 ENDFORM. " top_of_page 273 274 *&---------------------------------------------------------------------* 275 *& Form user_command 276 *&---------------------------------------------------------------------* 277 * text 278 *----------------------------------------------------------------------* 279 * -->R_UCOMM sy-ucomm 280 * -->RS_SELFIELD field selection 281 *----------------------------------------------------------------------* 282 FORM user_command USING r_ucomm LIKE sy-ucomm 283 rs_selfield TYPE slis_selfield. 284 285 DATA: lr_grid TYPE REF TO cl_gui_alv_grid. 286 CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' 287 IMPORTING 288 e_grid = lr_grid. 289 CALL METHOD lr_grid->check_changed_data. 290 rs_selfield-refresh = 'X'. 291 SET PF-STATUS 'DISPLAY'. 292 CASE r_ucomm. 293 WHEN '&SV'. 294 * update agreement 295 IF rb_creat IS NOT INITIAL. "create 296 PERFORM create_agreement. 297 ELSE. 298 PERFORM update_agreement. "update 299 ENDIF. 300 301 ENDCASE. 302 303 ENDFORM. "user_command 304 305 *&---------------------------------------------------------------------* 306 *& Form set_pf_status 307 *&---------------------------------------------------------------------* 308 * set pf_status 309 *----------------------------------------------------------------------* 310 FORM set_pf_status USING rt_extab TYPE slis_t_extab. 311 DATA : ls_extab TYPE LINE OF slis_t_extab. 312 313 314 IF p_test IS NOT INITIAL OR sy-ucomm = '&SV'. 315 ls_extab-fcode = '&SV'. 316 APPEND ls_extab TO rt_extab. 317 ENDIF. 318 SET PF-STATUS 'UPDATE' EXCLUDING rt_extab. 319 320 ENDFORM. "pf_status 321 322 *&---------------------------------------------------------------------* 323 *& Include ZM00_AGREEMENT_I01 324 *&---------------------------------------------------------------------* 325 *&---------------------------------------------------------------------* 326 *& Form build_fieldcat 327 *&---------------------------------------------------------------------* 328 * build field catalog 329 *----------------------------------------------------------------------* 330 FORM build_fieldcat USING pv_down TYPE char1. 331 332 DATA : lt_fcat1 TYPE TABLE OF lvc_s_fcat, 333 lt_fcat2 TYPE TABLE OF lvc_s_fcat, 334 lt_fcat3 TYPE TABLE OF lvc_s_fcat, 335 ls_fcat TYPE lvc_s_fcat, 336 ls_map_desc TYPE zc00_map_desc, 337 lt_content TYPE REF TO data, 338 ls_wa TYPE REF TO data, 339 lv_fcurr TYPE char20, 340 lv_name TYPE char20, 341 lv_text TYPE char20, 342 ls_kschl LIKE LINE OF r_kschl. 343 344 FIELD-SYMBOLS <lfs_fcat> TYPE lvc_s_fcat. 345 346 DEFINE m_build_fcat_from_stru. 347 call function 'LVC_FIELDCATALOG_MERGE' 348 exporting 349 i_structure_name = &1 350 changing 351 ct_fieldcat = &2 352 exceptions 353 others = 1. 354 if sy-subrc <> 0. 355 message id sy-msgid type sy-msgty number sy-msgno 356 with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 357 endif. 358 END-OF-DEFINITION. 359 360 DEFINE m_add_fcat. 361 ls_fcat-fieldname = &1. 362 ls_fcat-scrtext_l = &2. 363 ls_fcat-datatype = &3. 364 ls_fcat-intlen = &4. 365 ls_fcat-decimals = &5. 366 ls_fcat-cfieldname = &6. 367 ls_fcat-convexit = &7. 368 append ls_fcat to lt_fcat3. 369 END-OF-DEFINITION. 370 371 DEFINE m_add_fcat_cond. 372 373 loop at r_kschl into ls_kschl. 374 concatenate &1 ls_kschl-low '_TYPE'(t09) into lv_name. 375 concatenate &1 ls_kschl-low 'Type'(t15) into lv_text separated by space. 376 m_add_fcat lv_name lv_text 'CHAR' 4 0 space space. 377 concatenate &1 ls_kschl-low '_VAL'(t10) into lv_name. 378 concatenate &1 ls_kschl-low 'Value'(t16) into lv_text separated by space. 379 m_add_fcat lv_name lv_text 'DEC' 11 2 lv_fcurr space. 380 concatenate &1 ls_kschl-low '_CUR'(t11) into lv_fcurr. 381 concatenate &1 ls_kschl-low 'Currency'(t17) into lv_text separated by space. 382 m_add_fcat lv_fcurr lv_text 'CUKY' 3 0 space space. 383 concatenate &1 ls_kschl-low '_PU'(t12) into lv_name. 384 concatenate &1 ls_kschl-low 'Price Unit'(t18) into lv_text separated by space. 385 m_add_fcat lv_name lv_text 'DEC' 5 0 space space. 386 concatenate &1 ls_kschl-low '_UOM'(t13) into lv_name. 387 concatenate &1 ls_kschl-low 'UoM'(t19) into lv_text separated by space. 388 m_add_fcat lv_name lv_text 'UNIT' 3 0 space 'CUNIT'. 389 endloop. 390 391 END-OF-DEFINITION. 392 393 * get map description table 394 SELECT * INTO TABLE gt_map_desc 395 FROM zc00_map_desc 396 WHERE cprog EQ 'ZM00_AGREEMENT'. 397 398 * build structure 1 399 m_build_fcat_from_stru 'ZSM_DOWNLOAD_AGREEMENT_1' lt_fcat1. 400 * build condition structure 401 m_add_fcat_cond space. 402 m_add_fcat 'INFNR' 'Info Record No'(t90) space 10 0 space space. "additional : PIR 403 m_add_fcat 'ANGDT' 'PIR Quotation Due Date'(t91) 'DATS' 10 0 space space. "additional : PIR due date 404 m_add_fcat_cond 'PIR'. 405 406 APPEND LINES OF lt_fcat1 TO gt_fcat. 407 APPEND LINES OF lt_fcat3 TO gt_fcat. 408 409 * build structure 2 410 m_build_fcat_from_stru 'ZSM_DOWNLOAD_AGREEMENT_2' lt_fcat2. 411 "modify lt_fcat2 to invisible 412 ls_fcat-no_out = 'X'. 413 MODIFY lt_fcat2 FROM ls_fcat TRANSPORTING no_out WHERE no_out IS INITIAL . 414 415 APPEND LINES OF lt_fcat2 TO gt_fcat. 416 417 * sort fieldcatalog & change description 418 LOOP AT gt_fcat ASSIGNING <lfs_fcat>. 419 <lfs_fcat>-col_pos = sy-tabix. 420 CLEAR ls_map_desc. 421 READ TABLE gt_map_desc INTO ls_map_desc WITH KEY field = <lfs_fcat>-fieldname 422 BINARY SEARCH. 423 IF sy-subrc EQ 0. "if found, then change description 424 <lfs_fcat>-scrtext_s = ls_map_desc-text_s. 425 <lfs_fcat>-scrtext_m = ls_map_desc-text_m. 426 <lfs_fcat>-scrtext_l = ls_map_desc-text_l. 427 <lfs_fcat>-reptext = ls_map_desc-text_s. 428 ENDIF. 429 ENDLOOP. 430 431 * Create dynamic table for data 432 CALL METHOD cl_alv_table_create=>create_dynamic_table 433 EXPORTING 434 it_fieldcatalog = gt_fcat 435 IMPORTING 436 ep_table = lt_content. 437 IF sy-subrc = 0. 438 ASSIGN lt_content->* TO <fs_report>. 439 ELSE. 440 MESSAGE e000(zm00) WITH 'Error creating internal table'(e01). 441 ENDIF. 442 443 * create dynamic wa 444 CREATE DATA ls_wa LIKE LINE OF <fs_report>. 445 ASSIGN ls_wa->* TO <fs_wa>. 446 447 ENDFORM. " build_fieldcat 448 449 *&---------------------------------------------------------------------* 450 *& Form get_directory 451 *&---------------------------------------------------------------------* 452 * get directory 453 *----------------------------------------------------------------------* 454 FORM get_directory . 455 456 CALL FUNCTION 'F4_FILENAME' 457 EXPORTING 458 program_name = syst-cprog 459 dynpro_number = syst-dynnr 460 field_name = 'P_DIR' 461 IMPORTING 462 file_name = p_file. 463 464 ENDFORM. " get_directory 465 *&---------------------------------------------------------------------* 466 *& Form upload_local_to_itab 467 *&---------------------------------------------------------------------* 468 * upload local to itab 469 *----------------------------------------------------------------------* 470 FORM upload_local_to_itab . 471 DATA: lt_raw TYPE truxs_t_text_data, 472 ls_upload TYPE ty_upload, 473 lv_tabix TYPE sy-tabix. 474 475 REFRESH gt_upload. 476 477 CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP' 478 EXPORTING 479 * I_FIELD_SEPERATOR = 480 i_line_header = 'X' 481 i_tab_raw_data = lt_raw 482 i_filename = p_file 483 TABLES 484 i_tab_converted_data = <fs_report> 485 EXCEPTIONS 486 conversion_failed = 1 487 OTHERS = 2. 488 IF sy-subrc <> 0. 489 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 490 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 491 ELSE. 492 LOOP AT <fs_report> INTO <fs_wa>. 493 MOVE sy-tabix TO lv_tabix. 494 495 MOVE-CORRESPONDING <fs_wa> TO ls_upload. 496 m_move_field '<fs_wa>-ebeln' ls_upload-znumber. 497 498 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' 499 EXPORTING 500 input = ls_upload-lifnr 501 IMPORTING 502 output = ls_upload-lifnr. 503 504 CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT' 505 EXPORTING 506 input = ls_upload-matnr 507 IMPORTING 508 output = ls_upload-matnr 509 EXCEPTIONS 510 length_error = 1 511 OTHERS = 2. 512 IF sy-subrc <> 0. 513 MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 514 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 515 ENDIF. 516 517 * dv 1.2 518 * IF ls_upload-ekorg EQ p_ekorg AND 519 * ls_upload-werks EQ p_werks AND 520 * ls_upload-bsart IN s_bsart. 521 * end dv 1.2 522 "add to temp header 523 APPEND ls_upload TO gt_upload. 524 * dv 1.2 525 * ELSE. 526 * "delete item 527 * DELETE <fs_report> INDEX lv_tabix. 528 * ENDIF. 529 * end dv 1.2 530 ENDLOOP. 531 SORT gt_upload BY ebeln lifnr ebelp. 532 ENDIF. 533 534 ENDFORM. " upload_local_to_itab 535 536 *&---------------------------------------------------------------------* 537 *& Form CREATE_AGREEMENT 538 *&---------------------------------------------------------------------* 539 * text 540 *----------------------------------------------------------------------* 541 * --> p1 text 542 * <-- p2 text 543 *----------------------------------------------------------------------* 544 FORM create_agreement . 545 DATA : ls_header TYPE bapimeoutheader, 546 ls_headerx TYPE bapimeoutheaderx, 547 lt_return TYPE TABLE OF bapiret2, 548 ls_return TYPE bapiret2, 549 lt_item TYPE TABLE OF bapimeoutitem, 550 ls_item TYPE bapimeoutitem, 551 lt_itemx TYPE TABLE OF bapimeoutitemx, 552 ls_itemx TYPE bapimeoutitemx, 553 lt_item_validity TYPE TABLE OF bapimeoutvalidity, 554 ls_item_validity TYPE bapimeoutvalidity, 555 lt_item_validityx TYPE TABLE OF bapimeoutvalidityx, 556 ls_item_validityx TYPE bapimeoutvalidityx, 557 lt_item_cond TYPE TABLE OF bapimeoutcondition, 558 ls_item_cond TYPE bapimeoutcondition, 559 lt_item_condx TYPE TABLE OF bapimeoutconditionx, 560 ls_item_condx TYPE bapimeoutconditionx, 561 lt_upload TYPE TABLE OF ty_upload. 562 563 DATA : 564 lv_tabix TYPE sy-tabix, 565 lv_pos TYPE sy-tabix, 566 lv_ebeln TYPE ekko-ebeln, 567 lv_ebelp TYPE ekpo-ebelp, 568 lv_lifnr TYPE ekko-lifnr, 569 lv_name TYPE char20, 570 lv_serial TYPE i, 571 lv_error TYPE c, "iv 1.2 572 lv_meins TYPE mara-meins, "iv 1.2 573 * lv_ekorg TYPE ekko-ekorg, "iv 1.2 574 * lv_werks TYPE ekpo-werks, "iv 1.2 575 * lv_bsart TYPE ekko-bsart, "iv 1.2 576 lv_count TYPE num2, 577 lv_doc TYPE bapimeoutheader-number, 578 ls_kschl LIKE LINE OF r_kschl. 579 DATA lt_return_temp TYPE bapiret2_t. 580 581 FIELD-SYMBOLS : <lfs_upload> TYPE ty_upload, 582 <lfs_upload_ori> TYPE ty_upload, 583 <fs_return> TYPE bapiret2. 584 585 586 587 588 SORT gt_upload BY ebeln lifnr ebelp. 589 lt_upload = gt_upload. 590 DELETE ADJACENT DUPLICATES FROM lt_upload COMPARING ebeln lifnr. 591 592 SORT <fs_report> BY ('EBELN') ('LIFNR') ('EBELP'). 593 594 lv_tabix = 1. 595 596 "set total recs 597 gv_total_rec = lines( lt_upload ). 598 599 LOOP AT lt_upload ASSIGNING <lfs_upload>. 600 601 * clear & refresh 602 REFRESH : lt_item, lt_itemx, lt_item_cond, lt_item_condx, lt_item_validity, lt_item_validityx, 603 lt_return. 604 CLEAR : lv_serial, lv_error. "ch 1.2 605 * --------------------------------------- 606 * set msg ID. 607 <lfs_upload>-msg_id = sy-tabix. 608 609 * modify HEADER 610 PERFORM set_header USING <lfs_upload> 611 CHANGING ls_header. 612 613 * modify HEADERX 614 PERFORM set_headerx CHANGING ls_headerx. 615 616 * fill ITEM 617 LOOP AT <fs_report> ASSIGNING <fs_wa> FROM lv_tabix. 618 619 m_move_field '<fs_wa>-ebeln' lv_ebeln. 620 m_move_field '<fs_wa>-ebelp' lv_ebelp. 621 m_move_field '<fs_wa>-lifnr' lv_lifnr. 622 623 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' 624 EXPORTING 625 input = lv_lifnr 626 IMPORTING 627 output = lv_lifnr. 628 629 IF lv_ebeln NE <lfs_upload>-ebeln OR lv_lifnr NE <lfs_upload>-lifnr. 630 lv_tabix = sy-tabix. 631 EXIT. 632 ENDIF. 633 " Check the item is correct and selected 634 READ TABLE gt_out TRANSPORTING NO FIELDS WITH KEY cbox = abap_true 635 ebeln = lv_ebeln lifnr = lv_lifnr ebelp = lv_ebelp. 636 CHECK sy-subrc = 0. 637 DELETE gt_out WHERE ebeln = lv_ebeln AND lifnr = lv_lifnr AND ebelp = lv_ebelp. 638 639 m_change_input_uom '<fs_wa>-meins' lv_meins. 640 641 * fill ITEMX 642 PERFORM set_item USING <lfs_upload> 643 CHANGING ls_item. 644 645 APPEND ls_item TO lt_item. 646 647 PERFORM set_itemx USING ls_item-item_no 648 CHANGING ls_itemx. 649 650 APPEND ls_itemx TO lt_itemx. 651 652 * fill ITEM VALIDITY 653 ADD 1 TO lv_serial. 654 655 PERFORM set_validity USING ls_item 656 lv_serial 657 space 658 CHANGING ls_item_validity. 659 660 APPEND ls_item_validity TO lt_item_validity. 661 662 * fill ITEM VALIDITYX 663 PERFORM set_validityx USING ls_item 664 CHANGING ls_item_validityx. 665 666 APPEND ls_item_validityx TO lt_item_validityx. 667 668 * fill ITEM CONDITION 669 m_move_field '<fs_wa>-bpumz' ls_item_cond-numerator. 670 m_move_field '<fs_wa>-bpumn' ls_item_cond-denominator. 671 672 CLEAR lv_count. 673 LOOP AT r_kschl INTO ls_kschl. 674 ADD 1 TO lv_count. 675 ls_item_cond-item_no = ls_item-item_no. 676 ls_item_cond-serial_id = lv_serial. 677 MOVE lv_count TO ls_item_cond-cond_count. 678 MOVE lv_count TO ls_item_condx-cond_count. 679 MOVE ls_item-po_unit TO ls_item_cond-base_uom. 680 * MOVE ls_kschl-low TO ls_item_cond-cond_type. 681 CONCATENATE '<fs_wa>-'(t14) ls_kschl-low '_TYPE'(t09) INTO lv_name. 682 m_move_field lv_name ls_item_cond-cond_type. 683 CHECK ls_item_cond-cond_type IS NOT INITIAL. 684 685 CONCATENATE '<fs_wa>-'(t14) ls_kschl-low '_VAL'(t10) INTO lv_name. 686 m_move_field lv_name ls_item_cond-cond_value. 687 CONCATENATE '<fs_wa>-'(t14) ls_kschl-low '_CUR'(t11) INTO lv_name. 688 m_move_field lv_name ls_item_cond-currency. 689 IF ls_item_cond-currency IS INITIAL. 690 MOVE gs_lfm1-waers TO ls_item_cond-currency. 691 ENDIF. 692 CONCATENATE '<fs_wa>-'(t14) ls_kschl-low '_PU'(t12) INTO lv_name. 693 m_move_field lv_name ls_item_cond-cond_p_unt. 694 CONCATENATE '<fs_wa>-'(t14) ls_kschl-low '_UOM'(t13) INTO lv_name. 695 m_change_input_uom lv_name lv_meins. "iv 1.2 696 m_move_field lv_name ls_item_cond-cond_unit. 697 ls_item_cond-change_id = 'I'. 698 ls_item_condx-item_no = ls_item-item_no. 699 * ls_item_condx-serial_id = 'X'. "iv 1.3 700 ls_item_condx-serial_id = '1'. "iv 1.3 701 ls_item_condx-serial_idx = 'X'. "iv 1.3 702 ls_item_condx-item_nox = 'X'. 703 ls_item_condx-cond_countx = 'X'. 704 ls_item_condx-cond_type = 'X'. 705 ls_item_condx-cond_value = 'X'. 706 ls_item_condx-currency = 'X'. 707 ls_item_condx-cond_p_unt = 'X'. 708 ls_item_condx-cond_unit = 'X'. 709 ls_item_condx-base_uom = 'X'. 710 ls_item_condx-numerator = 'X'. 711 ls_item_condx-denominator = 'X'. 712 "append to condition itab 713 APPEND ls_item_cond TO lt_item_cond. 714 APPEND ls_item_condx TO lt_item_condx. 715 ENDLOOP. 716 717 ENDLOOP. "end looping - item 718 719 SORT lt_item BY item_no. 720 SORT lt_itemx BY item_no. 721 DELETE ADJACENT DUPLICATES FROM lt_item COMPARING item_no. 722 DELETE ADJACENT DUPLICATES FROM lt_itemx COMPARING item_no. 723 724 CLEAR lv_doc. 725 726 CALL FUNCTION 'BAPI_CONTRACT_CREATE' 727 EXPORTING 728 header = ls_header 729 headerx = ls_headerx 730 * VENDOR_ADDRESS = 731 testrun = p_test 732 * TECHNICAL_DATA = 733 IMPORTING 734 purchasingdocument = lv_doc 735 * EXP_HEADER = 736 TABLES 737 return = lt_return 738 item = lt_item 739 itemx = lt_itemx 740 * ACCOUNT = 741 * ACCOUNTPROFITSEGMENT = 742 * ACCOUNTX = 743 * DELIVERY_ADDRESS = 744 item_cond_validity = lt_item_validity 745 item_cond_validityx = lt_item_validityx 746 item_condition = lt_item_cond 747 item_conditionx = lt_item_condx 748 * ITEM_COND_SCALE_VALUE = 749 * ITEM_COND_SCALE_QUAN = 750 * ITEM_TEXT = 751 * HEADER_TEXT = 752 * HEAD_COND_VALIDITY = 753 * HEAD_COND_VALIDITYX = 754 * HEAD_CONDITION = 755 * HEAD_CONDITIONX = 756 * HEAD_COND_SCALE_VAL = 757 * HEAD_COND_SCALE_QUAN = 758 * PARTNER = 759 * PARTNERX = 760 * EXTENSIONIN = 761 * EXTENSIONOUT = 762 . 763 764 765 READ TABLE lt_return INTO ls_return WITH KEY type = 'E'. 766 IF sy-subrc EQ 0. "there is an error 767 ROLLBACK WORK. " iv 1.1 768 ELSE. 769 * iv 1.1 770 IF p_test IS INITIAL. 771 CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' 772 EXPORTING 773 wait = 'X'. 774 ENDIF. 775 IF lv_doc IS NOT INITIAL. "agreement created 776 MOVE lv_doc TO <lfs_upload>-agreeno. 777 ENDIF. 778 779 ls_return-message = 'Quantity Contract created under the number'(t25). 780 781 LOOP AT lt_item INTO ls_item . 782 READ TABLE gt_upload TRANSPORTING NO FIELDS WITH KEY ebeln = <lfs_upload>-ebeln 783 lifnr = lv_lifnr ebelp = ls_item-item_no. 784 PERFORM set_successful_message USING <fs_wa> sy-tabix ls_return-message lv_doc 785 CHANGING lt_return. 786 CLEAR ls_item. 787 ENDLOOP. 788 ENDIF. 789 790 CLEAR lt_return_temp. 791 lt_return_temp = lt_return. 792 LOOP AT lt_return_temp ASSIGNING <fs_return>. 793 CLEAR ls_item. 794 IF <fs_return>-row IS INITIAL. 795 READ TABLE lt_itemx INTO ls_itemx INDEX 1. 796 ELSE. 797 READ TABLE lt_itemx INTO ls_itemx INDEX <fs_return>-row. 798 ENDIF. 799 READ TABLE gt_upload TRANSPORTING NO FIELDS WITH KEY ebeln = <lfs_upload>-ebeln 800 lifnr = lv_lifnr ebelp = ls_itemx-item_no. 801 <fs_return>-row = sy-tabix. 802 ENDLOOP. 803 PERFORM set_message_display TABLES lt_return_temp. 804 805 ENDLOOP. "end looping 806 807 ENDFORM. " CREATE_AGREEMENT_SEL 808 *&---------------------------------------------------------------------* 809 *& Form UPDATE_AGREEMENT_SEL 810 *&---------------------------------------------------------------------* 811 * text 812 *----------------------------------------------------------------------* 813 * --> p1 text 814 * <-- p2 text 815 *----------------------------------------------------------------------* 816 FORM update_agreement . 817 DATA : ls_header TYPE bapimeoutheader, 818 ls_headerx TYPE bapimeoutheaderx, 819 lt_item TYPE TABLE OF bapimeoutitem, 820 ls_item TYPE bapimeoutitem, 821 lt_itemx TYPE TABLE OF bapimeoutitemx, 822 ls_itemx TYPE bapimeoutitemx, 823 lt_item_validity TYPE TABLE OF bapimeoutvalidity, 824 ls_item_validity TYPE bapimeoutvalidity, 825 lt_item_validityx TYPE TABLE OF bapimeoutvalidityx, 826 ls_item_validityx TYPE bapimeoutvalidityx, 827 lt_item_cond TYPE TABLE OF bapimeoutcondition, 828 ls_item_cond TYPE bapimeoutcondition, 829 lt_item_condx TYPE TABLE OF bapimeoutconditionx, 830 ls_item_condx TYPE bapimeoutconditionx, 831 lt_return TYPE TABLE OF bapiret2, 832 lt_return_temp TYPE TABLE OF bapiret2, 833 lt_upload TYPE TABLE OF ty_upload, 834 ls_return TYPE bapiret2, 835 ls_kschl LIKE LINE OF r_kschl, 836 ls_ekpo TYPE ty_ekpo. "iv 1.2 837 838 DATA : lv_ebeln TYPE ekpo-ebeln, 839 lv_lifnr TYPE ekko-lifnr, 840 lv_tabix TYPE sy-tabix, 841 lv_name TYPE char20, 842 lv_error TYPE c, "iv 1.2 843 lv_meins TYPE mara-meins, "iv 1.2 844 lv_ebelp TYPE ekpo-ebelp, "iv 1.2 845 lv_pos TYPE sy-tabix, 846 lv_count TYPE i. 847 848 FIELD-SYMBOLS : <lfs_upload> TYPE ty_upload, 849 <lfs_upload_ori> TYPE ty_upload , 850 <fs_return> TYPE bapiret2. 851 852 SORT gt_upload BY ebeln lifnr ebelp datab datbi. 853 lt_upload = gt_upload. 854 DELETE ADJACENT DUPLICATES FROM lt_upload COMPARING ebeln lifnr. 855 SORT <fs_report> BY ('EBELN') ('LIFNR') ('EBELP') ('DATAB') ('DATBI'). 856 857 "set total recs 858 gv_total_rec = lines( lt_upload ). 859 lv_tabix = 1. 860 LOOP AT lt_upload ASSIGNING <lfs_upload>. 861 * CLEAR & REFRESH 862 REFRESH : lt_item, lt_itemx, lt_item_cond, lt_item_condx, lt_item_validity, lt_item_validityx, 863 lt_return. 864 865 * modify HEADER 866 PERFORM set_header USING <lfs_upload> 867 CHANGING ls_header. 868 869 ls_header-number = <lfs_upload>-ebeln. 870 871 * modify HEADERX 872 PERFORM set_headerx CHANGING ls_headerx. 873 LOOP AT <fs_report> ASSIGNING <fs_wa> FROM lv_tabix. 874 m_move_field '<fs_wa>-ebeln' lv_ebeln. 875 m_move_field '<fs_wa>-ebelp' lv_ebelp. 876 m_move_field '<fs_wa>-lifnr' lv_lifnr. 877 CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' 878 EXPORTING 879 input = lv_lifnr 880 IMPORTING 881 output = lv_lifnr. 882 883 IF lv_ebeln NE <lfs_upload>-ebeln OR lv_lifnr NE <lfs_upload>-lifnr. 884 lv_tabix = sy-tabix. 885 EXIT. 886 ENDIF. 887 " Check the item is correct and selected 888 READ TABLE gt_out TRANSPORTING NO FIELDS WITH KEY cbox = abap_true 889 ebeln = lv_ebeln ebelp = lv_ebelp. 890 CHECK sy-subrc = 0. 891 DELETE gt_out WHERE ebeln = lv_ebeln AND ebelp = lv_ebelp. 892 m_change_input_uom '<fs_wa>-meins' lv_meins. 893 m_change_input_uom '<fs_wa>-bprme' lv_meins. 894 * fill ITEMX 895 PERFORM set_item USING <lfs_upload> 896 CHANGING ls_item. 897 898 APPEND ls_item TO lt_item. 899 900 PERFORM set_itemx USING ls_item-item_no 901 CHANGING ls_itemx. 902 903 APPEND ls_itemx TO lt_itemx. 904 905 * fill ITEM VALIDITY 906 PERFORM set_validity USING ls_item 907 1 "default 908 lv_ebeln 909 CHANGING ls_item_validity. 910 911 APPEND ls_item_validity TO lt_item_validity. 912 913 * fill ITEM VALIDITYX 914 PERFORM set_validityx USING ls_item 915 CHANGING ls_item_validityx. 916 917 APPEND ls_item_validityx TO lt_item_validityx. 918 919 * fill ITEM CONDITION 920 m_move_field '<fs_wa>-bpumz' ls_item_cond-numerator. 921 m_move_field '<fs_wa>-bpumn' ls_item_cond-denominator. 922 923 CLEAR lv_count. 924 LOOP AT r_kschl INTO ls_kschl. 925 ADD 1 TO lv_count. 926 ls_item_cond-item_no = ls_item-item_no. 927 MOVE lv_count TO ls_item_cond-cond_count. 928 MOVE lv_count TO ls_item_condx-cond_count. 929 930 MOVE ls_item-po_unit TO ls_item_cond-base_uom. 931 * MOVE ls_kschl-low TO ls_item_cond-cond_type. 932 CONCATENATE '<fs_wa>-'(t14) ls_kschl-low '_TYPE'(t09) INTO lv_name. 933 m_move_field lv_name ls_item_cond-cond_type. 934 CHECK ls_item_cond-cond_type IS NOT INITIAL. 935 936 CONCATENATE '<fs_wa>-'(t14) ls_kschl-low '_VAL'(t10) INTO lv_name. 937 m_move_field lv_name ls_item_cond-cond_value. 938 CONCATENATE '<fs_wa>-'(t14) ls_kschl-low '_CUR'(t11) INTO lv_name. 939 m_move_field lv_name ls_item_cond-currency. 940 IF ls_item_cond-currency IS INITIAL. 941 MOVE gs_lfm1-waers TO ls_item_cond-currency. 942 ENDIF. 943 CONCATENATE '<fs_wa>-'(t14) ls_kschl-low '_PU'(t12) INTO lv_name. 944 m_move_field lv_name ls_item_cond-cond_p_unt. 945 CONCATENATE '<fs_wa>-'(t14) ls_kschl-low '_UOM'(t13) INTO lv_name. 946 m_change_input_uom lv_name lv_meins. "iv 1.2 947 m_move_field lv_name ls_item_cond-cond_unit. 948 949 IF gs_a016 IS NOT INITIAL. 950 MOVE gs_a016-knumh TO ls_item_cond-serial_id. 951 ELSE. 952 MOVE 1 TO ls_item_cond-serial_id. 953 ENDIF. 954 955 IF ls_item_cond-currency IS INITIAL. 956 MOVE gs_lfm1-waers TO ls_item_cond-currency. 957 ENDIF. 958 959 ls_item_condx-item_no = ls_item-item_no. 960 ls_item_condx-serial_id = 'X'. 961 ls_item_condx-item_nox = 'X'. 962 ls_item_condx-cond_countx = 'X'. 963 ls_item_condx-cond_type = 'X'. 964 ls_item_condx-cond_value = 'X'. 965 ls_item_condx-currency = 'X'. 966 ls_item_condx-cond_p_unt = 'X'. 967 ls_item_condx-cond_unit = 'X'. 968 ls_item_condx-base_uom = 'X'. 969 ls_item_condx-numerator = 'X'. 970 ls_item_condx-denominator = 'X'. 971 972 "append to condition itab 973 APPEND ls_item_cond TO lt_item_cond. 974 APPEND ls_item_condx TO lt_item_condx. 975 ENDLOOP. 976 ENDLOOP. 977 CALL FUNCTION 'BAPI_CONTRACT_CHANGE' 978 EXPORTING 979 purchasingdocument = ls_header-number 980 header = ls_header 981 headerx = ls_headerx 982 * VENDOR_ADDRESS = 983 testrun = p_test 984 * TECHNICAL_DATA = 985 * IMPORTING 986 * EXP_HEADER = 987 TABLES 988 item = lt_item 989 itemx = lt_itemx 990 * ACCOUNT = 991 * ACCOUNTPROFITSEGMENT = 992 * ACCOUNTX = 993 * DELIVERY_ADDRESS = 994 item_cond_validity = lt_item_validity 995 item_cond_validityx = lt_item_validityx 996 item_condition = lt_item_cond 997 item_conditionx = lt_item_condx 998 * ITEM_COND_SCALE_VALUE = 999 * ITEM_COND_SCALE_QUAN = 1000 * ITEM_TEXT = 1001 * HEADER_TEXT = 1002 * HEAD_COND_VALIDITY = 1003 * HEAD_COND_VALIDITYX = 1004 * HEAD_CONDITION = 1005 * HEAD_CONDITIONX = 1006 * HEAD_COND_SCALE_VAL = 1007 * HEAD_COND_SCALE_QUAN = 1008 * PARTNER = 1009 * PARTNERX = 1010 * RELEASE_DOCU = 1011 * EXTENSIONIN = 1012 * EXTENSIONOUT = 1013 return = lt_return 1014 . 1015 1016 * read return 1017 CLEAR ls_return. 1018 READ TABLE lt_return INTO ls_return WITH KEY type = 'E'. 1019 IF sy-subrc EQ 0. "there is an error 1020 1021 ROLLBACK WORK. " iv 1.1 1022 ELSE. 1023 * iv 1.1 1024 IF p_test IS INITIAL. 1025 CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' 1026 EXPORTING 1027 wait = 'X'. 1028 ENDIF. 1029 ENDIF. 1030 1031 DELETE lt_return WHERE type NE 'E' AND type NE 'W' AND type NE 'S'. 1032 DELETE lt_return WHERE type EQ 'S' AND number NE '023'. 1033 * DELETE lt_return WHERE type EQ 'E' AND number EQ '003'. 1034 1035 CLEAR lt_return_temp. 1036 lt_return_temp = lt_return. 1037 LOOP AT lt_return_temp ASSIGNING <fs_return>. 1038 CLEAR ls_itemx. 1039 IF <fs_return>-row IS INITIAL. 1040 READ TABLE lt_itemx INTO ls_itemx INDEX 1. 1041 ELSE. 1042 READ TABLE lt_itemx INTO ls_itemx INDEX <fs_return>-row. 1043 ENDIF. 1044 READ TABLE gt_upload TRANSPORTING NO FIELDS WITH KEY ebeln = <lfs_upload>-ebeln 1045 lifnr = <lfs_upload>-lifnr ebelp = ls_itemx-item_no. 1046 <fs_return>-row = sy-tabix. 1047 1048 ENDLOOP. 1049 1050 PERFORM set_message_display TABLES lt_return_temp. 1051 1052 ENDLOOP. 1053 ENDFORM. " UPDATE_AGREEMENT
部分代码节选,非完整程序。