ZSDR005: Upload Sales Order VA02

47 篇文章 0 订阅
22 篇文章 0 订阅
*&---------------------------------------------------------------------*
*& Progarm      :  ZSDR005                        Author : Jimmy Wong
*& Created      :  20 Sep 2012                    App    : SD
*& Title        :  Upload Sales Order
*& Description  :  Upload Sales Order
*&---------------------------------------------------------------------*
*&  Version       Author      Date        description
*&                Jimmy       20 Sep 2012 the first version
*&M1              Jimmy       26 Nov 2012 Add column Po date
*&M2              Jimmy       12 Dec 2012 auto find customer material by table : knmt
*&M3              Jimmy       14 Dec 2012 Add order type 'ZCOS'
*&  the last update time  2012.12.14 19:00
*&---------------------------------------------------------------------*
report  zsdr005 no standard page heading.
*&---------------------------------------------------------------------*
* database table
*&---------------------------------------------------------------------*
tables : rlgrap.
*&---------------------------------------------------------------------*
* internal table & variables
*&---------------------------------------------------------------------*
data:begin of it_record occurs 0,
      order   type i,
      auart   like vbak-auart,  "Order Type
      auart_c like vbak-auart,
      vkorg   like vbak-vkorg,  "Sales Organization
      vtweg   like vbak-vtweg,  "Distribution channel
      spart   like vbak-spart,  "Division
      vkgrp   like vbak-vkgrp,  "Sales Group
      vkbur   like vbak-vkbur,  "Sales Office
      kunnr_d like vbak-kunnr,  "Ship-to Party
      kunnr_dc like vbak-kunnr,
      kunnr_p like vbak-kunnr,  "Sold-to Party
      kunnr_pc like vbak-kunnr,
      bstkd    like vbkd-bstkd, "Pur.Order
      posex    like vbap-posex,  "Pur item
      vdatu   like vbak-vdatu,  "Rq.Del.Date
      prsdt   like vbkd-prsdt,  "Pricing Date
      ablad   type ablad ,      "Unloading Point
      vsart   like vbkd-vsart,  "Shiping type
      inco1   like vbkd-inco1,                              "Incoterm1
      inco2   like vbkd-inco2,                              "Incoterm2
      zterm   like vbkd-zterm,  "Payment Terms
      fkdat   like vbkd-fkdat,  "Billing Date
      posnr   like vbap-posnr,  "Sales Document Item
      posnr_c type length 6,
      matnr   like vbap-matnr,  "Material
      matnr_c type length 20,
      wmeng   like vbep-wmeng,  "Order Quantity
      vrkme   like vbep-vrkme,  "Sales Unit
      edatu   type edatu,       "First Delivery Date
      kscha   type length 4,  "Condition Type
      kbetr   like komv-kbetr,  "Amount
      waers   type waers,      "Currency
      kmein   type kmein,      "condition Unit
      kpein   type kpein,      "Per
      pspnr   like prps-pspnr,
      posid   like prps-posid, "WBS element
      werks   like vbap-werks,  "plant
      bstdk   like vbkd-bstdk,  "PO date   "M1 add
      kdmat   like knmt-kdmat,
      message type length 700,
    end of it_record.
data: it_err like it_record occurs with header line.
data: it_err2 like it_record occurs with header line.
data: it_err3 like it_record occurs with header line.
data:begin of it_order occurs 0,
      auart   like vbak-auart,  "Order Type
      bstkd    like vbkd-bstkd, "Pur.Order
      message    type length 700,
     end of it_order.
data:it_order_err like it_order occurs with header line.
data: lv_tabix like sy-tabix.
data: lt_gt_data type alsmex_tabline occurs with header line.
data: msg   type string.
data: i_sodoc like  bapivbeln-vbeln,  "import header
      i_header like    bapisdhd1,
      i_headerx like    bapisdhd1x,
      e_sodoc like  bapivbeln-vbeln,   "export
      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_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,
      it_return  like  bapiret2 occurs with header line.

data: gs_layout type slis_layout_alv,
      gt_sort type slis_t_sortinfo_alv,
      gs_sort type slis_sortinfo_alv,
      gt_fieldcat type slis_t_fieldcat_alv,
      gs_fieldcat type slis_fieldcat_alv,
      t_repid like sy-repid value sy-repid,
      gs_ucomm type slis_formname value 'USER_COMMAND',
      gs_status type slis_formname value 'FRM_PF_STATUS_SET'.
constants:c_chk_num like pa0001-ename value '0123456789.,'.
constants:c_chk_date like pa0001-ename value '0123456789/'.
data:begin of it_tvko occurs 100,
   vkorg   like tvko-vkorg,
    end of it_tvko.
data:begin of it_tvtw occurs 100,
   vtweg   like tvtw-vtweg ,
    end of it_tvtw.
data:begin of it_tspa occurs 100,
   spart   like tspa-spart,
    end of it_tspa.
data:begin of it_tvbur occurs 100,
   vkbur   like tvbur-vkbur,
    end of it_tvbur.
data:begin of it_tvkgr occurs 0,
   vkgrp   like tvkgr-vkgrp,
    end of it_tvkgr.
data:begin of it_kna1 occurs 0,
   kunnr   like kna1-kunnr,
    end of it_kna1.
data:begin of it_t173 occurs 200,
   vsart   like t173-vsart,
    end of it_t173.
data:begin of it_tinc occurs 200,
   inco1   like tinc-inco1,
    end of it_tinc.
data:begin of it_t052 occurs 0,
   zterm  like t052-zterm,
    end of it_t052.
data:begin of it_t685 occurs 0,
   kschl  like t685-kschl,
    end of it_t685.
data:begin of it_t001w occurs 50,
    werks   like t001w-werks,
    end of it_t001w.
data:begin of it_mvke occurs 0,
   matnr   like mara-matnr,
   vkorg   like vbak-vkorg,  "Sales Organization
   vtweg   like vbak-vtweg,  "Distribution channel
   spart   like vbak-spart,  "Division
   end of it_mvke.
data:begin of it_mara occurs 0,
   matnr   like mara-matnr,
   mtart   like mara-mtart,
   end of it_mara.
data:begin of it_knmt occurs 0,                             "M2 add
    vkorg like knmt-vkorg,
    vtweg like knmt-vtweg,
    kunnr like knmt-kunnr,
    matnr like knmt-matnr,
    kdmat like knmt-kdmat,
    end of it_knmt.
*----------------------------------------------------------------------*
*  Parameter & Select-Options                                          *
*----------------------------------------------------------------------*
selection-screen begin of block with frame title text-001.
parameters filename type rlgrap-filename obligatory.
parameters: p_empty as checkbox.
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.
  perform up_select.

end-of-selection.
*&---------------------------------------------------------------------*
*&      Form  UP_SELECT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form up_select .
  refresh: it_record ,lt_gt_data,it_order,it_order_err,it_err2,it_err.
  clear:it_record,lt_gt_data,it_order,it_order_err,it_err2,it_err.
  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 get_check_data.
  perform check_it_record.

  loop at it_record.
    if not it_record-message ' OK.'.
      it_order_err-auart =  it_record-auart.
      it_order_err-bstkd =  it_record-bstkd.
      collect it_order_err.
      clear it_order_err.
    endif.
  endloop.
  if not it_order_err[] is initial.
    sort it_order_err by auart bstkd.
    delete adjacent duplicates from it_order_err comparing all fields.
    loop at it_order_err.
      loop at it_record where auart it_order_err-auart
                         and  bstkd it_order_err-bstkd.
        move-corresponding it_record to it_err2.
        append it_err2.
        clear it_err2.
      endloop.
      delete  it_order where auart it_order_err-auart
                          and bstkd it_order_err-bstkd.
    endloop.
  endif.

  sort it_order  by auart bstkd.
  delete adjacent duplicates from it_order comparing all fields.
  sort it_record by auart bstkd.
  loop at  it_order.
    lv_tabix sy-tabix.
    clear:it_order-message.
    read table it_record with key auart it_order-auart bstkd it_order-bstkd  binary search.
    check sy-subrc eq 0.

    i_headerx-updateflag 'I'.   "Update flag
    i_header-doc_type it_record-auart.    "Sales document type
    i_headerx-doc_type 'X'.
    i_header-sales_org it_record-vkorg. "Sales organization
    i_headerx-sales_org 'X'.
    i_header-distr_chan it_record-vtweg .  " Distribution channel
    i_headerx-distr_chan 'X' .
    i_header-division it_record-spart .   "Division
    i_headerx-division 'X'.
    i_header-sales_grp it_record-vkgrp .   "Sales Group
    i_headerx-sales_grp 'X'.
    i_header-sales_off it_record-vkbur .   "Sales office
    i_headerx-sales_off 'X'.
    i_header-req_date_h it_record-vdatu.    "Rq.Del.Date
    i_headerx-req_date_h 'X'.
    i_header-purch_no_c it_record-bstkd .  "Purchase order
    i_headerx-purch_no_c =  'X'.
    i_header-pmnttrms it_record-zterm.   "Payment Terms
    i_headerx-pmnttrms 'X'.
    i_header-incoterms1 it_record-inco1.                  "Incoterm1
    i_headerx-incoterms1 'X'.
    i_header-incoterms2 it_record-inco2.                  "Incoterm2
    i_headerx-incoterms2 'X'.
    i_header-ship_type it_record-vsart.  "ship type
    i_headerx-ship_type 'X'.
    i_header-bill_date it_record-fkdat . "billing date
    i_headerx-bill_date 'X'.

    i_header-purch_date it_record-bstdk. "PO date  "M1 add
    i_headerx-purch_date 'X'.

    i_partners-partn_role 'AG'.
    i_partners-partn_numb it_record-kunnr_d.   "sold to party
    append i_partners.

    i_partners-partn_role 'WE'.
    i_partners-partn_numb it_record-kunnr_p. "ship to party
    i_partners-unload_pt it_record-ablad.
    append i_partners.

    loop at it_record where auart it_order-auart and bstkd it_order-bstkd.
      i_itemx-updateflag 'I'.
      i_item-itm_number it_record-posnr.      "item no
      i_itemx-itm_number 'X'.
      i_item-po_itm_no  it_record-posex.    " PO item
      i_itemx-po_itm_no 'X'.
      i_item-material it_record-matnr.      "material
      i_itemx-material =  'X'.
      i_item-target_qty it_record-wmeng.    "quantity
      i_itemx-target_qty ='X' .
      i_item-target_qu it_record-vrkme.    "Unit
      i_itemx-target_qu ='X' .
      i_item-price_date it_record-prsdt.   "Pricing Date
      i_itemx-price_date ='X'.
      i_item-ship_type it_record-vsart.  "ship type
      i_itemx-ship_type 'X'.
      i_item-incoterms1 it_record-inco1.                  "Incoterm1
      i_itemx-incoterms1 'X'.
      i_item-incoterms2 it_record-inco2.                  "Incoterm1
      i_itemx-incoterms2 'X'.
      i_item-pmnttrms it_record-zterm.   "Payment Terms
      i_itemx-pmnttrms 'X'.
      i_item-bill_date it_record-fkdat . "billing date
      i_itemx-bill_date 'X'.
      i_item-wbs_elem it_record-posid. "WBS element
      i_itemx-wbs_elem 'X'.
      if not it_record-werks is initial.
        i_item-plant it_record-werks. "plant
        i_itemx-plant 'X'.
      endif.
*M2 add
      i_item-cust_mat35 =  it_record-kdmat.
      i_itemx-cust_mat35 'X'.
*M2 end
      append i_item.
      append i_itemx.
*      if it_record-auart ne 'ZREP'.
      i_cond-itm_number it_record-posnr.
      i_cond-cond_st_no '011'.
      i_cond-cond_count '01'.
      i_cond-cond_type it_record-kscha.  "Condition Type
      i_cond-cond_value it_record-kbetr.   "Amount
      i_cond-currency it_record-waers.  "Currency
      i_cond-cond_p_unt it_record-kpein .    "Per
      i_cond-cond_unit it_record-kmein.   "Condition Unit
      append i_cond.

      i_condx-updateflag 'U'.
      i_condx-itm_number  it_record-posnr.
      i_condx-cond_st_no '011'.
      i_condx-cond_count '01'.
      i_condx-cond_type  it_record-kscha.
      i_condx-cond_value  'X'.
      i_condx-currency  'X'.
      i_condx-cond_p_unt  'X'.
      i_condx-cond_unit 'X'.
      append i_condx.
*      endif.
      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.

    endloop.

    call function 'BAPI_SALESORDER_CREATEFROMDAT2'
      exporting
        order_header_in      i_header
        order_header_inx     i_headerx
      importing
        salesdocument        e_sodoc
      tables
        return               it_return
        order_items_in       i_item
        order_items_inx      i_itemx
        order_partners       i_partners
        order_schedules_in   i_sch
        order_schedules_inx  i_schx
        order_conditions_in  i_cond
        order_conditions_inx i_condx.

    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 it_order-message ' E: ' it_return-message into it_order-message.
      endloop.
      modify it_order index lv_tabix.
    else.
      call function 'BAPI_TRANSACTION_COMMIT'
        exporting
          wait 'X'.
      " wait up to 1 seconds.

      concatenate  e_sodoc ' Success.' into it_order-message.
      modify it_order index lv_tabix.

    endif.

    clear:i_header,i_headerx,e_sodoc,it_return,i_item,i_itemx,i_partners,i_sch,i_schx,i_cond,i_condx,e_sodoc.
    refresh:it_return,i_item,i_itemx,i_partners,i_sch,i_schx,i_cond,i_condx.
  endloop.

  loop at it_order.
    loop at it_record where  auart it_order-auart and bstkd it_order-bstkd.
      move-corresponding it_record to it_err.
      it_err-message it_order-message.
      append it_err.
      clear it_err.
    endloop  .
  endloop.


  clear it_err3.
  refresh it_err3.
  append lines of it_err to it_err3.
  append lines of it_err2 to it_err3.
  sort it_err3 by auart bstkd .

  perform write_data.

endform.                    " UP_SELECT
*&---------------------------------------------------------------------*
*&      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 '3'
      i_end_col   '31'
      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 .
  data:lv_order type i,
       lv_date(10type c. "Pur.Order .
  check not lt_gt_data[] is initial.
  lv_order 1.
  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-auart_c lt_gt_data-value .
        perform conversion_order_type using it_record-auart_c
                              changing it_record-auart.
        it_order-auart it_record-auart.
      when '2'.
        it_record-vkorg lt_gt_data-value .
      when '3'.
        it_record-vtweg lt_gt_data-value .
      when '4'.
        it_record-spart lt_gt_data-value .
      when '5'.
        it_record-vkbur lt_gt_data-value .
      when '6'.
        it_record-vkgrp lt_gt_data-value .
      when '7'.
        it_record-kunnr_dc lt_gt_data-value .
        perform add_pre_zero using it_record-kunnr_dc
                             changing it_record-kunnr_d.
      when '8'.
        it_record-kunnr_pc lt_gt_data-value .
        perform add_pre_zero using it_record-kunnr_pc
                             changing it_record-kunnr_p.
      when '9'.
        it_order-bstkd lt_gt_data-value.
        it_record-bstkd lt_gt_data-value .
      when '10'.
        it_record-posex lt_gt_data-value .
      when '11'.
        clear:lv_date.
        lv_date =  lt_gt_data-value .
        perform change_char_to_data using lv_date
                                     changing it_record-vdatu.
      when '12'.
        clear:lv_date.
        lv_date =  lt_gt_data-value .
        perform change_char_to_data using lv_date
                                     changing it_record-prsdt.
      when '13'.
        it_record-ablad  lt_gt_data-value .
      when '14'.
        it_record-vsart lt_gt_data-value .
        perform add_pre_zero using it_record-vsart
                             changing it_record-vsart.
      when '15'.
        it_record-inco1 lt_gt_data-value .
      when '16'.
        it_record-inco2  lt_gt_data-value .
      when '17'.
        it_record-zterm  lt_gt_data-value .
      when '18'.
        clear:lv_date.
        lv_date =  lt_gt_data-value .
        perform change_char_to_data using lv_date
                                     changing it_record-fkdat .
      when '19'.
        it_record-posnr_c lt_gt_data-value .
        perform add_pre_zero using it_record-posnr_c
                             changing it_record-posnr.
      when '20'.
        it_record-matnr_c lt_gt_data-value.
        perform  tranfer_material using it_record-matnr_c
                          changing it_record-matnr.
      when '21'.
        perform process_num using lt_gt_data-value
                  changing it_record-wmeng .
      when '22'.
        it_record-vrkme  lt_gt_data-value.
      when '23'.
        clear:lv_date.
        lv_date =  lt_gt_data-value .
        perform change_char_to_data using lv_date
                                     changing it_record-edatu .
      when '24'.
        it_record-kscha  lt_gt_data-value.
      when '25'.
        perform process_num using lt_gt_data-value
                  changing it_record-kbetr .
      when '26'.
        it_record-waers lt_gt_data-value.
      when '27'.
        perform process_num using lt_gt_data-value
                  changing it_record-kpein .
      when '28'.
        it_record-kmein  lt_gt_data-value.
      when '29'.
        it_record-posid  lt_gt_data-value.
        perform  tranfer_wbs using it_record-posid
                                  changing it_record-pspnr.
      when '30'.
        it_record-werks  lt_gt_data-value.
      when '31'.                                            "M1 add
        clear:lv_date.
        lv_date =  lt_gt_data-value .
        if lv_date is not initial.
          perform change_char_to_data using lv_date
                                       changing it_record-bstdk .
        endif.
    endcase.

    at end of row.
      it_record-order lv_order.
      append it_record.
      collect it_order.
      add to lv_order.
      clear:it_record,it_order.
    endat.
  endloop.

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  CHANGE_CHAR_TO_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_LV_DATE  text
*      <--P_IT_RECORD_VDATU  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 'OIU_ME_CHAR_TO_DATE'
      exporting
        i_char      p_char
      importing
        e_date      p_date
      exceptions
        error_found 4.
    if sy-subrc ne 0.
      p_date '00000000'.
      "p_date = sy-datum.
    endif.
  endif.
endform.                    " CHANGE_CHAR_TO_DATA
*&---------------------------------------------------------------------*
*&      Form  WRITE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form write_data .

  if gt_fieldcat is initial.
    perform set_fieldcat.
  endif.

  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
*     i_callback_program       = t_repid
*     i_callback_pf_status_set = gs_status
*     i_callback_user_command  = gs_ucomm
*     i_grid_title             = l_title
*     is_layout                = gs_layout
      it_fieldcat              gt_fieldcat
      i_save                   'A'
*     IT_EVENTS                = LT_EVTS
    tables
      t_outtab                 it_err3
    exceptions
      program_error            1
      others                   2.

endform.                    " WRITE_DATA
*&---------------------------------------------------------------------*
*&      Form  SET_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form set_fieldcat .
  perform fieldcat_init using 'AUART_C' 'Order Type' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'VKORG' 'Sales Organization' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'VTWEG' 'Distribution channel' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'SPART' 'Division' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'VKBUR' 'Sales Office' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'VKGRP' 'Sales Group' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'KUNNR_DC' 'Sold-to Party' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'KUNNR_PC' 'Ship-to Party' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'BSTKD' 'Pur.Order' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'POSEX' 'PO Item' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'VDATU' 'Rq.Del.Date' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'PRSDT' 'Pricing Date' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'ABLAD' 'Unloading Point' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'VSART' 'Shiping type' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'INCO1' 'Incoterm1' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'INCO2' 'Incoterm2' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'ZTERM' 'Payment Terms' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'FKDAT' 'Billing Date' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'POSNR_C' 'Sales Document Item' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'MATNR_C' 'Material' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'WMENG' 'Order Quantity' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'VRKME' 'Sales Unit' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'EDATU' 'First Delivery Date' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'KSCHA' 'Condition Type' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'KBETR' 'Amount' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'WAERS' 'Currency' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'KPEIN' 'Per' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'KMEIN' 'condition Unit' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'POSID' 'WBS element' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'WERKS' 'Plamt' '' '' '' '' '' '' '' '' '' ''.
  perform fieldcat_init using 'BSTDK' 'PO Date' '' '' '' '' '' '' '' '' '' ''. "M1 add
  perform fieldcat_init using 'KDMAT' 'Customer Material' '' '' '' '' '' '' '' '' '' ''. "M2 add
  perform fieldcat_init using 'MESSAGE' 'Message' '100' '' '' '' '' '' '' '' '' ''.
endform.                    " SET_FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  fieldcat_init
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->FIELD_NAME           text
*      -->FIELD_TEXT           text
*      -->FIELD_LENTH          text
*      -->FIELD_EDIT           text
*      -->FIELD_TYPE           text
*      -->FIELD_KEY            text
*      -->FIELD_HOTSPOT        text
*      -->FIELD_CHECKBOX       text
*      -->FIELD_NO_ZERO        text
*      -->FIELD_REF_TABNAME    text
*      -->FIELD_REF_FIELDNAME  text
*      -->FIELD_EMPHASIZE      text
*----------------------------------------------------------------------*
form fieldcat_init using
           field_name      type c
           field_text      type c
           field_lenth     type i
           field_edit      type c
           field_type      type c
           field_key       type c
           field_hotspot   type c
           field_checkbox  type c
           field_no_zero   type c
           field_ref_tabname type c
           field_ref_fieldname type c
           field_emphasize type c.
  clear gs_fieldcat.

  gs_fieldcat-fieldname field_name.
  gs_fieldcat-seltext_l field_text.
  gs_fieldcat-seltext_m field_text.
  gs_fieldcat-seltext_s field_text.
  gs_fieldcat-checkbox  field_checkbox.
*  gs_fieldcat-round = 0.
  gs_fieldcat-edit field_edit.
  gs_fieldcat-datatype field_type.
  if field_type 'Q'.
    gs_fieldcat-just 'R'.
    gs_fieldcat-datatype 'QUAN'.
*    gs_fieldcat-qfieldname = 'MEINS'.
    gs_fieldcat-decimals_out 3.
  else.
    gs_fieldcat-just 'L'.
  endif.
  gs_fieldcat-key  field_key.
  gs_fieldcat-hotspot field_hotspot .
  gs_fieldcat-outputlen field_lenth.
  gs_fieldcat-ddic_outputlen field_lenth.
  gs_fieldcat-no_zero field_no_zero.
  gs_fieldcat-ref_tabname field_ref_tabname.
  gs_fieldcat-ref_fieldname field_ref_fieldname.
  gs_fieldcat-emphasize field_emphasize .

  append gs_fieldcat to gt_fieldcat.

endform.                    "fieldcat_init
*&---------------------------------------------------------------------*
*&      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  CHECK_IT_RECORD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form check_it_record .
  data: lv_flag2 type c .
  clear: lv_flag2.
  loop at it_record.
    lv_tabix sy-tabix.
    clear:lv_flag2,it_record-message.
    "Order Type
    if it_record-auart is initial.
      lv_flag2 'X'.
      concatenate it_record-message  ' Order Type Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.

    "PO No.
    if  p_empty is initial.
      if it_record-bstkd  is initial.
        lv_flag2 'X'.
        concatenate it_record-message  ' PO No. is empty.'
               into it_record-message.
        modify it_record index lv_tabix.
      endif.
    endif.

    "Sales Organization
    read table it_tvko with key  vkorg  it_record-vkorg binary search .
    if sy-subrc ne 0.
      lv_flag2 'X'.
      concatenate it_record-message  ' Sales Organization Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.
    "Distribution channel
    read table it_tvtw with key  vtweg  it_record-vtweg binary search .
    if sy-subrc ne 0.
      lv_flag2 'X'.
      concatenate it_record-message  ' Distribution channel Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.
    "Division
    read table it_tspa with key  spart  it_record-spart binary search .
    if sy-subrc ne 0.
      lv_flag2 'X'.
      concatenate it_record-message  ' Division Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.
    "Sales Office
    read table it_tvbur with key  vkbur   it_record-vkbur   binary search .
    if sy-subrc ne 0.
      lv_flag2 'X'.
      concatenate it_record-message  ' Sales Office Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.
    "Sales Group
    read table it_tvkgr with key  vkgrp   it_record-vkgrp  binary search .
    if sy-subrc ne 0.
      lv_flag2 'X'.
      concatenate it_record-message  ' Sales Group Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.
    "Sold-to Party
    read table it_kna1 with key  kunnr it_record-kunnr_d binary search .
    if sy-subrc ne 0.
      lv_flag2 'X'.
      concatenate it_record-message  ' Sold-to Party Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.
    "Ship-to Party
    read table it_kna1 with key  kunnr it_record-kunnr_p binary search .
    if sy-subrc ne 0.
      lv_flag2 'X'.
      concatenate it_record-message  ' Ship-to Party Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.
    "Shiping type
    read table it_t173 with key vsart  it_record-vsart binary search .
    if sy-subrc ne 0.
      lv_flag2 'X'.
      concatenate it_record-message  ' Shiping type Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.
                                                            "Incoterm1
    if it_record-inco1 ne space .
      read table it_tinc with key inco1 it_record-inco1 binary search .
      if sy-subrc <> 0.
        lv_flag2 'X'.
        concatenate it_record-message  ' Incoterm1 Not Exists.'
               into it_record-message.
        modify it_record index lv_tabix.
      endif.
    endif.
    "Payment Terms
    if it_record-zterm ne space .
      read table it_t052 with key zterm it_record-zterm binary search .
      if sy-subrc <> 0.
        lv_flag2 'X'.
        concatenate it_record-message  ' Payment Terms Not Exists.'
               into it_record-message.
        modify it_record index lv_tabix.
      endif.
    endif.
    "Material
    read table it_mara with key matnr it_record-matnr binary search.
    if sy-subrc <> 0.
      lv_flag2 'X'.
      concatenate it_record-message  ' Material Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    else.
      if it_record-auart_c ne 'ZSP' and it_record-auart_c ne 'ZCOS'. "M3
        read table it_mvke with key matnr it_record-matnr
                   vkorg it_record-vkorg
                   vtweg it_record-vtweg
                   spart it_record-spart binary search.
*        select single mtart into lv_mtart
*           from mara as a
*            inner join mvke as b on a~matnr = b~matnr
*           where a~matnr = it_record-matnr
*               and b~vkorg = it_record-vkorg
*               and b~vtweg = it_record-vtweg
*               and a~spart = it_record-spart .
        if sy-subrc <> 0.
          lv_flag2 'X'.
          concatenate it_record-matnr_c  it_record-vkorg it_record-vtweg   it_record-spart 'No Exists.'
                 into it_record-message separated by space.
          modify it_record index lv_tabix.
        endif.
      endif.
    endif.

    "Quantity
    if it_record-wmeng 0.
      lv_flag2 'X'.
      concatenate it_record-message
        ' Quantity = 0 is error.' into it_record-message.
      modify it_record index lv_tabix.
    elseif it_record-wmeng < 0.
      lv_flag2 'X'.
      concatenate it_record-message
        ' Quantity is negative or Quantity not is number.'
        into it_record-message.
      modify it_record index lv_tabix.
    endif.

    "Condition Type
    read table it_t685 with key kschl  it_record-kscha binary search .
    if sy-subrc <> 0.
      lv_flag2 'X'.
      concatenate it_record-message  ' Condition Type Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.
    "Amount
    if it_record-kbetr 0.
*            lv_flag2 = 'X'.
*            concatenate it_record-message
*              ' Amount = 0 is error.' into it_record-message.
*            modify it_record index lv_tabix.
    elseif it_record-kbetr < 0.
      lv_flag2 'X'.
      concatenate it_record-message
        ' Amount is negative or Amount not is number.'
        into it_record-message.
      modify it_record index lv_tabix.
    endif.
    "Per
    if it_record-kpein 0.
      lv_flag2 'X'.
      concatenate it_record-message
        ' Per = 0 is error.' into it_record-message.
      modify it_record index lv_tabix.
    elseif it_record-kpein < 0.
      lv_flag2 'X'.
      concatenate it_record-message
        ' Per is negative or Per not is number.'
        into it_record-message.
      modify it_record index lv_tabix.
    endif.
    "Production Lot
    if it_record-pspnr is initial.
      lv_flag2 'X'.
      concatenate it_record-message  ' Production Lot Not Exists.'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.
    "plant
    if not it_record-werks is initial.
      read table it_t001w with key  werks it_record-werks binary search.
      if sy-subrc <> 0.
        lv_flag2 'X'.
        concatenate it_record-message  ' Plant Not Exists.'
               into it_record-message.
        modify it_record index lv_tabix.
      endif.
    endif.
    "First Delivery Date
    if it_record-edatu '00000000'.
      lv_flag2 'X'.
      concatenate it_record-message  ' First Delivery Date Is Empty'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.

    "Sales Document Item
    if it_record-posnr '000000'.
      lv_flag2 'X'.
      concatenate it_record-message  ' Sales Document Item Is Empty'
             into it_record-message.
      modify it_record index lv_tabix.
    endif.
*M2 add
    " customer material
    read table it_knmt with  key vkorg it_record-vkorg
                                 vtweg it_record-vtweg
                                 kunnr it_record-kunnr_p
                                 matnr it_record-matnr  .
    if sy-subrc eq 0.
      it_record-kdmat =  it_knmt-kdmat.
      modify it_record index lv_tabix.
    endif.
*m2 End
    if lv_flag2 <> 'X'.
      it_record-message ' OK.'.
      modify it_record index lv_tabix.
    endif.
  endloop.
endform.                    " CHECK_IT_RECORD
*&---------------------------------------------------------------------*
*&      Form  CONVERSION_ORDER_TYPE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_IT_RECORD_AUART_C  text
*      <--P_IT_RECORD_AUART  text
*----------------------------------------------------------------------*
form conversion_order_type  using    p_old
                            changing p_new.
  translate   p_old to upper case.
  call function 'CONVERSION_EXIT_AUART_INPUT'
    exporting
      input  p_old
    importing
      output p_new.

endform.                    " CONVERSION_ORDER_TYPE
*&---------------------------------------------------------------------*
*&      Form  TRANFER_MATERIAL
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_ITAB_MATNR  text
*      <--P_ITAB_MATNR_C  text
*----------------------------------------------------------------------*
form  tranfer_material using    p_old
                       changing p_new  .
  translate p_old to upper case.
  call function 'CONVERSION_EXIT_MATN1_INPUT'
    exporting
      input        p_old
    importing
      output       p_new
    exceptions
      length_error 1
      others       2.
  if sy-subrc <> 0.
    p_new p_old.
  endif.
endform.                    "tranfer_material
*&---------------------------------------------------------------------*
*&      Form  TRANFER_WBS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_IT_RECORD_POSID  text
*      <--P_IT_RECORD_PSPNR  text
*----------------------------------------------------------------------*
form tranfer_wbs  using    p_old
                  changing p_new  .
  translate p_old to upper case.
  call function 'CONVERSION_EXIT_ABPSP_INPUT'
    exporting
      input     p_old
    importing
      output    p_new
    exceptions
      not_found 1
      others    2.
  if sy-subrc <> 0.
    clear:p_new.
  endif.
endform.                    " TRANFER_WBS
*&---------------------------------------------------------------------*
*&      Form  GET_CHECK_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form get_check_data .
  select vkorg  into  table it_tvko
        from tvko .
  sort  it_tvko by  vkorg  .

  select  vtweg  into table it_tvtw
        from tvtw.
  sort  it_tvtw by  vtweg   .

  select spart into table it_tspa
        from tspa.
  sort it_tspa by spart   .

  select  vkbur  into table it_tvbur
        from tvbur .
  sort it_tvbur by vkbur   .

  select  vkgrp  into table it_tvkgr
        from tvkgr .
  sort it_tvkgr by vkgrp  .

  select  kunnr into table it_kna1
       from kna1.
  sort it_kna1 by kunnr .

  select  vsart  into table it_t173
        from t173 .
  sort it_t173 by vsart .

  select  inco1 into table it_tinc
      from tinc.
  sort it_tinc by inco1.

  select distinct zterm into table it_t052
      from  t052.
  sort it_t052 by zterm.

  select distinct kschl into table it_t685
      from t685.
  sort it_t685 by kschl.

  select   werks into table it_t001w
    from t001w.
  sort it_t001w by werks.

  select matnr mtart into table it_mara
      from mara
      for all entries in it_record
      where matnr it_record-matnr.
  sort it_mara by matnr.

  select distinct a~matnr  a~spart b~vkorg b~vtweg
     into corresponding fields of table it_mvke
     from mara as a
     inner join mvke as on a~matnr b~matnr
    for all entries in it_record
     where a~matnr it_record-matnr
         and b~vkorg it_record-vkorg
         and b~vtweg it_record-vtweg
         and a~spart it_record-spart .
  sort it_mvke by matnr  vkorg vtweg  spart.

*M2 add
  select vkorg  vtweg  kunnr matnr kdmat
    into corresponding fields of table it_knmt
      from knmt
      for all entries in it_record
      where vkorg it_record-vkorg
        and vtweg it_record-vtweg
        and kunnr it_record-kunnr_p
        and matnr it_record-matnr.
  sort it_knmt by vkorg  vtweg  kunnr matnr.
*M2 End

endform.                    " GET_CHECK_DATA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值