SAP ZSD008:Change SO Item Split

47 篇文章 0 订阅

Program ZSDR008

T-Code: ZSD008

SO Item Split

1、  可以修改当前item 的值(除了数量)

2、  拆分的话,满足拆分的Item 和被拆的Item数量和等于原先的数量。

3、  SO Status = 20

4、  Test check √没有进行拆分,只是检查是否有没有错误

SO No.

New Item

Ref item

Qty

Delivery date

Ship to

Unloading Point

Shipping type

PO Item

100003794

10

10

48

 

2065_001

HK warehouse1

04

 

100003794

80

10

1

 

206501

HK warehouse2

04

 

100003794

90

10

1

 

2065_001

HK warehouse3

04

 

 

*&---------------------------------------------------------------------*
*& Progarm      :  zsdr008                        Author : Jimmy Wong
*& Created      :  14 Nov 2012                    App    : SD
*& Title        :  Change SO Item Split
*& Description  :  Change SO Item Split
*&---------------------------------------------------------------------*
*&  Version       Author      Date        description
*&                Jimmy       14 Nov 2012 the first version
*& M1             Jimmy       10 Dec 2012 Add Po item & check split item qty >= DN Qty
*& M2             Jimmy       23 Apr 2013 add item text
*&  the last update time  2013.04.23 19:00
*&---------------------------------------------------------------------*
report  zsdr008 no standard page heading.
*&---------------------------------------------------------------------*
* database table
*&---------------------------------------------------------------------*
tables : rlgrap.
*&---------------------------------------------------------------------*
* internal table & variables
*&---------------------------------------------------------------------*
data:begin of it_record occurs 0,
      vbeln like vbak-vbeln,      "SO
      posnr like vbap-posnr,      "Item
      posnr_ref like vbap-posnr,    "ref item
      kwmeng   like vbap-kwmeng,  "Order Quantity Old
      wmeng   like vbep-wmeng,  "Order Quantity
      edatu   type edatu,       "First Delivery Date
      kunnr type vbak-kunnr,    "Ship to
      ablad like vbpa-ablad,    "Unloading Point
      vsart like vbkd-vsart,    "shipping type
      posex  like vbap-posex,  "Pur item   "M1
      knumv   like konv-knumv,
      ischange type c,
      message type length 700,
    end of it_record.
data:it_qty like it_record occurs with header line.
data:it_tmp like it_record occurs with header line.
data:begin of it_success occurs 0,
      vbeln like vbak-vbeln,      "SO
      message type length 700,
    end of it_success .
data:it_err like it_success occurs with header line.
data:lv_tabix like sy-tabix.
data: i_headerx like   bapisdh1x ,
      i_item like bapisditm  occurs with header line,
      i_itemx like bapisditmx occurs with header line,
      i_partners like bapiparnr occurs with header line,
      i_partnerchanges like bapiparnrc occurs with header line,
      i_sch   like bapischdl occurs with header line,
      i_schx   like bapischdlx occurs with header line,
      i_cond like bapicond occurs with header line,
      i_condx like bapicondx occurs with header line,
      i_itemtext like table of bapisdtext with header line,
      it_return  like  bapiret2 occurs with header line.
data: it_vbap like vbap occurs with header line.
data: it_vbkd like vbkd occurs with header line.
data: it_vbpa like vbpa occurs with header line.
data: it_vbak like vbak occurs with header line.
data: it_konv like konv occurs with header line.
data: it_vbep like vbep occurs with header line.
data: begin of it_ablad occurs 0,
      vbeln like vbpa-vbeln,
      posnr like vbpa-posnr,
      parvw like vbpa-parvw,
      ablad like vbpa-ablad,
    end of it_ablad.
data:begin of it_t173 occurs 200,
   vsart   like t173-vsart,
    end of it_t173.
type-pools: slis.
data: fc_hier type slis_t_fieldcat_alv,
      wa_hier type slis_fieldcat_alv .
data: lt_gt_data type alsmex_tabline occurs with header line.
data: msg   type string.
data:lv_message type length 700.
constants:c_chk_num like pa0001-ename value '0123456789.,'.
constants:c_chk_date like pa0001-ename value '0123456789/'.
data: lv_stonr like tj30-stonr.
*----------------------------------------------------------------------*
*  Parameter & Select-Options                                          *
*----------------------------------------------------------------------*
selection-screen begin of block with frame title text-001.
parameters filename type rlgrap-filename obligatory.
parameters p_test as checkbox default 'X' .
selection-screen end of block 1.
*----------------------------------------------------------------------*
*  Initialize                                                          *
*----------------------------------------------------------------------*
initialization.
*----------------------------------------------------------------------*
*  AT SELECTION-SCREEN
*----------------------------------------------------------------------*
at selection-screen on value-request for filename.
  call function 'WS_FILENAME_GET'
    exporting
      def_path         'C:\'
      mask             ',Excel Files,*.xls,All Files,*.*.'(101)
      mode             'O'
      title            'Select file'(100)
    importing
      filename         filename
    exceptions
      selection_cancel 1
      selection_error  2
      others           3.
  if sy-subrc ne 0.
    "     .
  endif.
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
  refresh: it_record ,lt_gt_data.
  clear:it_record ,lt_gt_data.
  perform manual_upld.
  if sy-subrc ne 0.
    clear msg.
    concatenate 'Upload Filename ' filename ' is Error' into msg.
    message msg type 'I'.
    exit.
  endif.
  sort lt_gt_data by row col value.
  read table lt_gt_data index 1.
  if sy-subrc ne 0.
    clear : msg.
    concatenate 'Upload File ' filename  ' Is Null!' into msg.
    message msg type 'I'.
    exit.
  endif.
  perform get_it_record.
  if it_record[] is initial.
    message 'No Record Found' type 'I'.
    exit.
  endif.
  perform check_it_record.
  "if p_test is initial.
  perform process_data.
  "endif.
  perform display_data.

end-of-selection.
*&---------------------------------------------------------------------*
*&      Form  MANUAL_UPLD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form manual_upld .
  call function 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    exporting
      filename    filename
      i_begin_col '1'
      i_begin_row '2'
      i_end_col   '8'
      i_end_row   '50000'
    tables
      intern      lt_gt_data
    exceptions
      upload_ole  1.
  if sy-subrc ne 0.
    "     message i004(zmm)
  endif.
endform.                    " MANUAL_UPLD
*&---------------------------------------------------------------------*
*&      Form  GET_IT_RECORD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_it_record .
  check not lt_gt_data[] is initial.
  call function 'SAPGUI_PROGRESS_INDICATOR'
    exporting
      text 'Get Data........'.
  loop at lt_gt_data.
    shift lt_gt_data-value right deleting trailing space.
    shift lt_gt_data-value left deleting leading space.
    case lt_gt_data-col.
      when '1'.
        it_record-vbeln lt_gt_data-value .
        perform add_pre_zero using it_record-vbeln
                             changing it_record-vbeln.
      when '2'.
        it_record-posnr lt_gt_data-value .
        perform add_pre_zero using it_record-posnr
                             changing it_record-posnr.
      when '3'.
        it_record-posnr_ref lt_gt_data-value .
        perform add_pre_zero using it_record-posnr_ref
                             changing it_record-posnr_ref.
      when '4'.
        perform process_num using lt_gt_data-value
                  changing it_record-wmeng .
*      when '5'.
*        perform change_char_to_data using lt_gt_data-value
*                                     changing it_record-edatu .
      when '5'.
        it_record-kunnr lt_gt_data-value .
        perform add_pre_zero using  it_record-kunnr
                             changing  it_record-kunnr.
      when '6'.
        it_record-ablad lt_gt_data-value .
      when '7'.
        it_record-vsart lt_gt_data-value .
        perform add_pre_zero using  it_record-vsart
                             changing  it_record-vsart.
      when '8'.                                             "M1 add
        it_record-posex lt_gt_data-value .
        perform add_pre_zero using it_record-posex
                             changing it_record-posex.
    endcase.

    at end of row.
      append it_record.
      clear:it_record.
    endat.
  endloop.
  sort it_record by vbeln posnr.
endform.                    " GET_IT_RECORD
*&---------------------------------------------------------------------*
*&      Form  ADD_PRE_ZERO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_IT_RECORD_WEEKS_C  text
*      <--P_IT_RECORD_WEEKS_C  text
*----------------------------------------------------------------------*
form add_pre_zero  using    p_old
                   changing p_new .

  call function 'CONVERSION_EXIT_ALPHA_INPUT'
    exporting
      input  p_old
    importing
      output p_new.
endform.                    " ADD_PRE_ZERO
*&---------------------------------------------------------------------*
*&      Form  PROCESS_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form process_data .
  data:lv_total_line type i,
     lv_line type decimals 3,
     lv_wbs type ps_posid,
     it_lines type table of tline with header line,         "M2 dd
     lv_tdname type tdobname,
     lv_kwmeng type length 20,
     lv_wmeng type length 20.
  data:lv_date type length 10.
  perform change_date_format using sy-datum  'X' changing lv_date.
  describe table it_success lines lv_total_line.
  loop at it_success.
    lv_tabix sy-tabix.
    lv_line =  sy-tabix  / lv_total_line * 100.
    call function 'SAPGUI_PROGRESS_INDICATOR'
      exporting
        percentage lv_line
        text       'Change Data........'.

    i_headerx-updateflag 'U'.   "Update flag

    loop at it_record where vbeln it_success-vbeln.
      clear:lv_wbs.
      if it_record-ischange  'U'.
        i_itemx-updateflag 'U'.
        i_item-itm_number it_record-posnr.      "item no
        i_itemx-itm_number it_record-posnr.
        i_item-target_qty it_record-wmeng.    "quantity
        i_itemx-target_qty ='X' .
        i_item-reason_rej ''.
        i_itemx-reason_rej 'X'.
        i_item-ship_type it_record-vsart.
        i_itemx-ship_type 'X'.
        i_item-po_itm_no  it_record-posex.    " PO item
        i_itemx-po_itm_no 'X'.
        append i_item.
        append i_itemx.

        i_schx-updateflag 'U'.
        i_sch-itm_number it_record-posnr.
        i_schx-itm_number  =  it_record-posnr.
        i_sch-sched_line '0001'.
        i_schx-sched_line '0001'.
        i_sch-req_date it_record-edatu.
        i_schx-req_date 'X'.
        i_sch-req_qty it_record-wmeng. "2012-01-24 Modify
        i_schx-req_qty 'X'.
        append i_sch.
        append i_schx.


        read table it_vbpa with key vbeln it_success-vbeln posnr it_record-posnr parvw 'WE' .
        if sy-subrc eq 0.
          i_partnerchanges-document it_success-vbeln.
          i_partnerchanges-itm_number it_record-posnr.
          i_partnerchanges-updateflag 'U'.
          i_partnerchanges-partn_role 'WE'.
          i_partnerchanges-p_numb_old it_vbpa-kunnr .
          i_partnerchanges-p_numb_new it_record-kunnr.
          append i_partnerchanges.

          it_ablad-vbeln it_success-vbeln.
          it_ablad-posnr it_record-posnr.
          it_ablad-parvw 'WE'.
          it_ablad-ablad it_record-ablad."it_vbpa-ablad.
          append  it_ablad.

        else.
          read table it_vbpa with key vbeln it_success-vbeln  parvw 'WE' .
          if sy-subrc eq 0.
            i_partnerchanges-document it_success-vbeln.
            i_partnerchanges-itm_number it_record-posnr.
            i_partnerchanges-updateflag 'U'.
            i_partnerchanges-partn_role 'WE'.
            i_partnerchanges-p_numb_old it_vbpa-kunnr .
            i_partnerchanges-p_numb_new it_record-kunnr.
            append i_partnerchanges.

            it_ablad-vbeln it_success-vbeln.
            it_ablad-posnr it_record-posnr.
            it_ablad-parvw 'WE'.
            it_ablad-ablad it_record-ablad. "it_vbpa-ablad.
            append  it_ablad.
          endif.
        endif.
*M2 add
*        clear: it_lines,it_lines[].
*        concatenate it_success-vbeln it_record-posnr into lv_tdname  .
*        perform get_text tables  it_lines using 'Z002' sy-langu lv_tdname 'VBBP'.
*        if it_lines[] is not initial.
*          loop at it_lines.
*            clear: i_itemtext.
*            i_itemtext-doc_number = it_success-vbeln.
*            i_itemtext-itm_number = it_record-posnr.
*            i_itemtext-text_id = 'Z002'.
*            i_itemtext-langu  = sy-langu.
*            i_itemtext-text_line  = it_lines-tdline.
*            append i_itemtext.
*          endloop.
*        endif.
*        clear: i_itemtext.
*        i_itemtext-doc_number = it_success-vbeln.
*        i_itemtext-itm_number = it_record-posnr.
*        i_itemtext-text_id = 'Z002'.
*        i_itemtext-langu  = sy-langu.
*        lv_kwmeng = it_record-kwmeng.
*        lv_wmeng = it_record-wmeng.
*        condense:  lv_kwmeng, lv_wmeng.
*        concatenate 'Change Qty' lv_kwmeng 'to' lv_wmeng '-' lv_date into i_itemtext-text_line  separated by space.
*        append i_itemtext.
*M2 end

      elseif it_record-ischange 'I'.
        i_itemx-updateflag 'I'.
        read table it_vbap with key vbeln it_success-vbeln posnr it_record-posnr_ref binary search.
        if sy-subrc eq 0 .
          i_item-itm_number it_record-posnr.      "item no
          i_itemx-itm_number it_record-posnr.
          i_item-material it_vbap-matnr.      "material
          i_itemx-material =  'X'.
          i_item-target_qty it_record-wmeng.    "quantity
          i_itemx-target_qty ='X' .
          i_item-target_qu it_vbap-vrkme.    "Unit
          i_itemx-target_qu ='X' .
          i_item-po_itm_no  it_record-posex.    " PO item  "M1 Modify
          i_itemx-po_itm_no 'X'.
          call function 'CONVERSION_EXIT_ABPSP_OUTPUT'
            exporting
              input  it_vbap-ps_psp_pnr
            importing
              output lv_wbs.

          i_item-wbs_elem lv_wbs. "WBS element
          i_itemx-wbs_elem 'X'.
          i_item-plant it_vbap-werks. "plant
          i_itemx-plant 'X'.

        endif.
        read table it_vbkd with key vbeln it_success-vbeln posnr it_record-posnr_ref binary search.
        if sy-subrc eq 0.
          i_item-price_date it_vbkd-prsdt.   "Pricing Date
          i_itemx-price_date ='X'.
*          i_item-ship_type = it_vbkd-vsart.  "ship type
*          i_itemx-ship_type = 'X'.
          i_item-ship_type it_record-vsart.
          i_itemx-ship_type 'X'.
          i_item-incoterms1 it_vbkd-inco1.                "Incoterm1
          i_itemx-incoterms1 'X'.
          i_item-incoterms2 it_vbkd-inco2.                "Incoterm1
          i_itemx-incoterms2 'X'.
          i_item-pmnttrms it_vbkd-zterm.   "Payment Terms
          i_itemx-pmnttrms 'X'.
          i_item-bill_date it_vbkd-fkdat . "billing date
          i_itemx-bill_date 'X'.
        endif.
        append i_item.
        append i_itemx.


        i_schx-updateflag 'I'.
        i_sch-itm_number it_record-posnr.
        i_schx-itm_number  =  it_record-posnr.
        i_sch-sched_line '0001'.
        i_schx-sched_line '0001'.
        i_sch-req_date it_record-edatu.
        i_schx-req_date 'X'.
        i_sch-req_qty it_record-wmeng.
        i_schx-req_qty 'X'.
        append i_sch.
        append i_schx.

        read table it_konv with key knumv it_record-knumv  kposn it_record-posnr_ref binary search.
        if sy-subrc eq 0.
          i_cond-itm_number it_record-posnr.
          i_cond-cond_st_no it_konv-stunr.
          i_cond-cond_count it_konv-zaehk.
          i_cond-cond_type it_konv-kschl.  "Condition Type
          i_cond-cond_value it_konv-kbetr.   "Amount
          i_cond-currency it_konv-waers.  "Currency
          i_cond-cond_p_unt it_konv-kpein .    "Per
          i_cond-cond_unit it_konv-kmein.   "Condition Unit
          append i_cond.

          i_condx-updateflag 'U'.
          i_condx-itm_number  it_record-posnr.
          i_condx-cond_st_no =  it_konv-stunr.
          i_condx-cond_count it_konv-zaehk.
          i_condx-cond_type  it_konv-kschl.
          i_condx-cond_value  'X'.
          i_condx-currency  'X'.
          i_condx-cond_p_unt  'X'.
          i_condx-cond_unit 'X'.
          append i_condx.
        endif.

*        read table it_vbpa with key vbeln = it_success-vbeln posnr = it_record-posnr_ref   parvw = 'WE'.
*        if sy-subrc eq 0.
*          i_partners-unload_pt = it_vbpa-ablad.
*        else.
*          read table it_vbpa with key vbeln = it_success-vbeln   parvw = 'WE'.
*          if sy-subrc eq 0.
*            i_partners-unload_pt = it_vbpa-ablad.
*          endif.
*        endif.
        i_partners-unload_pt  it_record-ablad.
        i_partners-partn_role 'WE'.
        i_partners-partn_numb it_record-kunnr. "ship to party
        i_partners-itm_number it_record-posnr.
        append i_partners.
*M2 add
*        clear: i_itemtext.
*        i_itemtext-doc_number = it_success-vbeln.
*        i_itemtext-itm_number = it_record-posnr.
*        i_itemtext-text_id = 'Z002'.
*        i_itemtext-langu  = sy-langu.
*        lv_wmeng = it_record-wmeng.
*        condense:   lv_wmeng.
*        concatenate 'Item' it_record-posnr 'Split from Item'
*        it_record-posnr_ref 'Qty-' lv_wmeng '-' lv_date into i_itemtext-text_line separated by space.
*        append i_itemtext.
*M2 end

      endif.
    endloop.

    call function 'BAPI_SALESORDER_CHANGE'
      exporting
        salesdocument      it_success-vbeln
        order_header_inx   i_headerx
      tables
        return             it_return
        order_item_in      i_item
        order_item_inx     i_itemx
        partners           i_partners
        partnerchanges     i_partnerchanges
*       PARTNERADDRESSES   =
*       ORDER_CFGS_REF     =
*       ORDER_CFGS_INST    =
*       ORDER_CFGS_PART_OF =
*       ORDER_CFGS_VALUE   =
*       ORDER_CFGS_BLOB    =
*       ORDER_CFGS_VK      =
*       ORDER_CFGS_REFINST =
        schedule_lines     i_sch
        schedule_linesx    i_schx
*       ORDER_TEXT         = i_itemtext
*       ORDER_KEYS         =
        conditions_in      i_cond
        conditions_inx     i_condx
*       EXTENSIONIN        =
      .


    read table it_return with key type 'E'.
    if sy-subrc eq 0.
      loop at it_return where type 'E'.
        shift it_return-message right deleting trailing space.
        shift it_return-message left deleting leading space.
        concatenate lv_message ' E: ' it_return-message into lv_message.
      endloop.
    else.
      if p_test is initial.
        call function 'BAPI_TRANSACTION_COMMIT'
          exporting
            wait 'X'.
        read table  it_return with key type 'S' id ='V1' number '311'.
        if sy-subrc eq 0.
          loop  at it_ablad .
            update vbpa set ablad it_ablad-ablad where  vbeln it_ablad-vbeln
                                                      and posnr it_ablad-posnr
                                                      and parvw it_ablad-parvw.
            commit work and wait.
          endloop.
          lv_message 'Updated Success'.
        else.
          read table  it_return with key type 'S' id ='V1' number '041'.
          if sy-subrc eq 0.
            lv_message it_return-message.
          else.
            loop at it_return where type 'S'.
              shift it_return-message right deleting trailing space.
              shift it_return-message left deleting leading space.
              concatenate lv_message ' S: ' it_return-message into lv_message.
            endloop.
          endif.
        endif.
      else.
        lv_message 'Test Run Successing.'.
      endif.
    endif.
    it_success-message lv_message.
    modify it_success index lv_tabix.
    clear:i_headerx,lv_message,it_return,it_return[],i_sch,i_sch[],i_schx,i_schx[]
          ,i_item,i_item[],i_itemx,i_itemx[],i_partners[],i_partners
          ,i_cond, i_cond[],i_condx,i_condx[], i_partnerchanges, i_partnerchanges[],it_ablad,it_ablad[],
          i_itemtext,i_itemtext[].
  endloop.
  loop at it_record.
    lv_tabix sy-tabix.
    read table  it_success with key vbeln it_record-vbeln.
    if sy-subrc eq 0.
      it_record-message it_success-message.
      modify it_record index lv_tabix.
    endif.
  endloop.
endform.                    " PROCESS_DATA
*&---------------------------------------------------------------------*
*&      Form  PROCESS_NUM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LT_GT_DATA_VALUE  text
*      <--P_IT_RECORD_KPEIN  text
*----------------------------------------------------------------------*
form process_num  using    p_value
                  changing p_change.
  data :lv_value type length 30 .
  if p_value cn c_chk_num.
    p_change -1.
  else.
    lv_value  p_value.
    call function 'C14DG_CHAR_NUMBER_CONVERSION'
      exporting
        i_string                   lv_value
      importing
*       E_FLOAT                    =
        e_dec                      p_change
*       E_DECIMALS                 =
      exceptions
        wrong_characters           1
        first_character_wrong      2
        arithmetic_sign            3
        multiple_decimal_separator 4
        thousandsep_in_decimal     5
        thousand_separator         6
        number_too_big             7
        others                     8.
    if sy-subrc 7.
      p_change p_value.
    endif.
  endif.
endform.                    " PROCESS_NUM
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form display_data .
  call function 'SAPGUI_PROGRESS_INDICATOR'
    exporting
      text 'Display Data........'.
  refresh fc_hier.
  define alv_field.
    clear:wa_hier.
    wa_hier-col_pos &1.
    wa_hier-fieldname &2.
    wa_hier-seltext_m &3.
    wa_hier-seltext_l &4.
    wa_hier-outputlen &5.
    wa_hier-ref_tabname &6 .
    wa_hier-ref_fieldname &7 .
    append wa_hier to fc_hier.
  end-of-definition.

  alv_field '1' 'VBELN' '' 'SO No.' '15' 'VBAP' 'VBELN'.
  alv_field '2' 'POSNR' '' 'Item' '6' '' ''.
  alv_field '3' 'POSNR_REF' '' 'Ref Item' '8' '' ''.
  alv_field '4' 'KWMENG' '' 'Old Qty' '10' '' ''.
  alv_field '5' 'WMENG' '' 'Change Qty' '10' '' ''.
*  alv_field '6' 'EDATU' '' 'Deli.Date' '10'  '' ''.
  alv_field '7' 'KUNNR' '' 'Ship-to' '10'  '' ''.
  alv_field '8' 'ABLAD' '' 'Unloading Point' '15'  '' ''.
  alv_field '9' 'VSART' '' 'Shipping Type' '10'  '' ''.
  alv_field '10' 'MESSAGE' 'Message' '' '50'  '' ''.

  sort it_record by vbeln posnr_ref.
  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
      it_fieldcat   fc_hier[]
      i_save        'A'
    tables
      t_outtab      it_record
    exceptions
      program_error 1
      others        2.
  if sy-subrc ne 0.
    "     message i004(zmm)
  endif.

endform.                    " DISPLAY_DATA
*&---------------------------------------------------------------------*
*&      Form  CHANGE_CHAR_TO_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LT_GT_DATA_VALUE  text
*      <--P_IT_RECORD_EDATU  text
*----------------------------------------------------------------------*
form change_char_to_data  using    p_char
                          changing p_date.

  check p_char is not initial.
  if p_char cn c_chk_date.
    p_date '00000000'.
  else.
    call function 'CONVERT_DATE_TO_INTERNAL'
      exporting
        date_external            p_char
      importing
        date_internal            p_date
      exceptions
        date_external_is_invalid 1
        others                   2.

    if sy-subrc ne 0.
      p_date '00000000'.
      "p_date = sy-datum.
    endif.
  endif.


endform.                    " CHANGE_CHAR_TO_DATA
*&---------------------------------------------------------------------*
*&      Form  CHECK_IT_RECORD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form check_it_record .

  call function 'SAPGUI_PROGRESS_INDICATOR'
    exporting
      text 'Check Data........'.

  refresh : it_vbap,it_err,it_success,it_vbkd,it_vbpa,it_vbak,it_qty,it_t173.
  select *
     into corresponding fields of table it_vbak
      from vbak
      for all entries in it_record
      where vbeln it_record-vbeln.
  sort it_vbak by  vbeln .
  if it_vbak[] is not initial.
    select *
      into corresponding fields of table it_konv
        from konv
        for all entries in it_vbak
        where knumv it_vbak-knumv
          and kschl 'PR00'
          or kschl like 'Z%'). " ('PR00','ZSC1','ZSC2' ,'ZSC3')
    sort it_konv by  knumv kposn.
  endif.

  select *
     into corresponding fields of table it_vbap
      from vbap
      for all entries in it_record
      where vbeln it_record-vbeln
        and posnr it_record-posnr or  posnr it_record-posnr_ref ).
  sort it_vbap by   vbeln  posnr.

  select *
    into corresponding fields of table it_vbkd
     from vbkd
     for all entries in it_record
     where vbeln it_record-vbeln
      and posnr it_record-posnr or  posnr it_record-posnr_ref ).
  sort it_vbkd by   vbeln  posnr.

  select *
    into corresponding fields of table it_vbpa
     from vbpa
     for all entries in it_record
     where vbeln it_record-vbeln.
  sort it_vbpa by   vbeln  posnr.

  select  vsart  into table it_t173
        from t173 .

  select *
    into corresponding fields of table it_vbep
     from vbep
     for all entries in it_record
     where vbeln it_record-vbeln
       and posnr it_record-posnr or  posnr it_record-posnr_ref )
       and etenr '0001' .
  sort it_vbep by   vbeln  posnr.

  it_tmp[] it_record[].
  loop at it_record.
    lv_tabix sy-tabix.
    "status
    read table it_vbak with key vbeln it_record-vbeln binary search.
    if sy-subrc eq 0.
      call function 'STATUS_READ'
        exporting
          objnr            it_vbak-objnr
        importing
          stonr            lv_stonr
        exceptions
          object_not_found 1
          others           2.
      if sy-subrc eq 0.
        if lv_stonr ne '20'.
          concatenate  'SO Status Is ' lv_stonr into it_record-message separated by space.
        else.
          it_record-knumv it_vbak-knumv.
          "so item  new item
          read table it_vbap with key vbeln it_record-vbeln posnr it_record-posnr binary search.
          if sy-subrc eq 0.
            if it_record-posnr it_record-posnr_ref.
              it_record-ischange 'U'.
              it_record-kwmeng it_vbap-kwmeng.
            else.
              concatenate it_record-message ' The SO new item is in need of changing,Pls input ref item / SO New Item Exists' into it_record-message.
            endif.
          else.
            read table it_vbap with key vbeln it_record-vbeln posnr it_record-posnr_ref  binary search.
            if sy-subrc eq 0.
              it_record-ischange 'I'.
            else.
              concatenate it_record-vbeln it_record-posnr_ref 'No Exists.' into it_record-message separated by space.
            endif.
          endif.
        endif.
      else.
        it_record-message  'Get SO Status Is Error'.
      endif.
    else.
      it_record-message  'SO Is Not Exists'.
    endif.
    "Quantity
    if it_record-wmeng 0.
      clear: it_record-ischange.
      concatenate it_record-message' Quantity = 0 is error.' into it_record-message.
    elseif it_record-wmeng < 0.
      clear: it_record-ischange.
      concatenate it_record-message 'Quantity is negative or Quantity not is number' into it_record-message separated by space.
    endif.

    "Deli.date
    read table it_vbep with key vbeln it_record-vbeln posnr it_record-posnr_ref binary search.
    if sy-subrc eq 0.
      it_record-edatu it_vbep-edatu.
    else.
      clear: it_record-ischange.
      concatenate it_record-message ' Deli.date is error.' into it_record-message.
    endif.

    "Shiping type
    read table it_t173 with key vsart  it_record-vsart binary search .
    if sy-subrc ne 0.
      clear: it_record-ischange.
      concatenate it_record-message ' Shiping type Not Exists.' into it_record-message.
    endif.
*m2 ADD
    read table it_tmp with key vbeln it_record-vbeln posnr it_record-posnr_ref .
    if sy-subrc ne 0.
      clear: it_record-ischange.
      concatenate it_record-message it_record-vbeln  it_record-posnr_ref 'No Exists Excel File' into it_record-message separated by space.
    endif.
*m2 END
    if it_record-ischange ne 'U' and it_record-ischange ne 'I'.
      it_err-vbeln it_record-vbeln.
      collect it_err.
      clear:it_err.
    endif.

    it_success-vbeln it_record-vbeln.
    collect it_success.
    clear:it_success.

    it_qty-vbeln it_record-vbeln.
    it_qty-posnr_ref it_record-posnr_ref.
    it_qty-kwmeng it_record-kwmeng.
    it_qty-wmeng it_record-wmeng.
    collect it_qty.
    clear:it_qty.

    modify it_record index lv_tabix.
    clear:it_record-message,it_record-ischange,lv_stonr.
  endloop.

  "check Qty
  sort it_success by  vbeln.
  sort it_qty  by  vbeln posnr_ref.
  loop at it_record.
    lv_tabix sy-tabix.
    read table it_success with key vbeln it_record-vbeln binary search.
    if sy-subrc eq 0.
      read table it_qty with key vbeln it_record-vbeln posnr_ref  it_record-posnr_ref  binary search.
      if sy-subrc eq 0.
        read table it_vbap with key vbeln it_record-vbeln posnr it_record-posnr_ref  binary search.
        if sy-subrc eq 0.
          if it_vbap-kwmeng < it_qty-wmeng.
            concatenate it_record-message' Split Qty More than old Qty' into it_record-message.
            it_err-vbeln it_record-vbeln.
            collect it_err.
            clear:it_err.
          elseif it_vbap-kwmeng > it_qty-wmeng.
            concatenate it_record-message' Split Qty Less than old Qty' into it_record-message.
            it_err-vbeln it_record-vbeln.
            collect it_err.
            clear:it_err.
          endif.
          modify it_record index lv_tabix.
        endif.
      endif.
    endif.
  endloop.

  loop at it_err.
    delete it_success where vbeln it_err-vbeln.
  endloop.
endform.                    " CHECK_IT_RECORD
*&---------------------------------------------------------------------*
*&      Form  get_text
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
form get_text tables it_lines
              using p_id
                    p_langu
                    p_tdname type tdobname
                    p_object.
  call function 'READ_TEXT'
    exporting
      id                      p_id
      language                p_langu
      name                    p_tdname
      object                  p_object
    tables
      lines                   it_lines
    exceptions
      id                      1
      language                2
      name                    3
      not_found               4
      object                  5
      reference_check         6
      wrong_access_to_archive 7
      others                  8.
endform.                    "get_text
*&---------------------------------------------------------------------*
*&      Form  change_date_format
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_OLD_DATE text
*      -->P_EXTERNAL text
*      -->P_NEW_DATE text
*----------------------------------------------------------------------*
form change_date_format  using p_old_date
                              p_external
                        changing p_new_date.
  constants:c_chk_date like pa0001-ename value '0123456789/'.

  if p_external 'X'.
    call function 'CONVERT_DATE_TO_EXTERNAL'
      exporting
        date_internal            p_old_date
      importing
        date_external            p_new_date
      exceptions
        date_internal_is_invalid 1
        others                   2.
    if sy-subrc <> 0.
      clear:p_new_date.
    endif.
  else.
    check p_old_date is not initial.
    if p_old_date cn c_chk_date.
      p_new_date '00000000'.
    else.
      call function 'CONVERT_DATE_TO_INTERNAL'
        exporting
          date_external            p_old_date
        importing
          date_internal            p_new_date
        exceptions
          date_external_is_invalid 1
          others                   2.
      if sy-subrc ne 0.
        p_new_date '00000000'.
      endif.
    endif.
  endif.
endform.                    " CHANGE_DATE_FORMAT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值