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 

部分代码节选,非完整程序。

posted @ 2017-07-21 17:04  Leath.Shi  阅读(732)  评论(0编辑  收藏  举报