SAP:ZMM002 Upload Stock 561

44 篇文章 0 订阅

 561 Q 8201 AA01 43-100157-000-N000 19 EA 00002666 A&H
561 Q 8101 AA02 43-100214-000-R000 20 EA 000002667 A&H
561 Q 8101 AA01 80-009287-003-R000 30 EA 000000668 A&H
561 Q 8101 AA01 80-009511-010-R000 2 EA 0000004126 A&H

 

 

*&---------------------------------------------------------------------*
*& Progarm      :  ZMMR002                        Author : Jimmy Wong
*& Created      :  11 Sep 2012                    App    : MM
*& Title        :  Upload Stock
*& Description  :  Upload Stock
*&---------------------------------------------------------------------*
*&  Version       Author      Date        description
*&                Jimmy       13 Sep 2012 the first version
*&  the last update time  2012.09.17 14:00
*&---------------------------------------------------------------------*

report  ZMMR002 no standard page heading.
*&---------------------------------------------------------------------*
* database table
*&---------------------------------------------------------------------*
tables : RLGRAP."T148,t001w,t001l,mara,t006.
*&---------------------------------------------------------------------*
* internal table & variables
*&---------------------------------------------------------------------*
data:begin of IT_RECORD occurs 0,
    ORDER type I,
    BWART like MSEG-BWART,
    SOBKZ like MSEG-SOBKZ,
    SOBKZ_C like MSEG-SOBKZ,
    WERKS like MSEG-WERKS,
    LGORT like MSEG-LGORT,
    MATNR like MSEG-MATNR,
    MATNR_C(20type C,
    MENGE like MSEG-MENGE,
    MENGE_C(20type C,
    MEINS like MSEG-MEINS,
    MEINS_C(3type C,
    CHARG like MSEG-CHARG,
    POSID like PRPS-POSID,
    POSID_C like PRPS-POSID,
    MESSAGE(700type C,
    end of IT_RECORD.
data:begin of IT_ERR occurs 0.
        include structure IT_RECORD.
data:   MATDOC like BAPI2017_GM_HEAD_RET-MAT_DOC,
     end of IT_ERR.
data: IT_ERR2 like IT_ERR occurs with header line.
data: IT_ERR3 like IT_ERR occurs with header line.
types:LV_TYPE type length 50.
data:begin of ITAB occurs 0,
    BWART type LV_TYPE,
    SOBKZ_C type LV_TYPE,
    WERKS type LV_TYPE,
    LGORT type LV_TYPE,
    MATNR_C type LV_TYPE,
    MENGE_C type LV_TYPE,
    MEINS_C type LV_TYPE,
    CHARG type LV_TYPE,
    POSID_C type LV_TYPE,
    end of ITAB.
data:begin of IT_TAB occurs 0.
        include structure ITAB.
data: MESSAGE(700type C,
    end of IT_TAB.
data: LV_FLAG  type C,
      LV_TABIX like SY-TABIX.
data:IT_GDMVT_HEAD  like  BAPI2017_GM_HEAD_01,
       IT_AFS_ITEM    like  BAPI2017_GM_ITEM_CREATE
                           occurs with header line,
       IT_SERIAL     like BAPI2017_GM_SERIALNUMBER occurs with header line,
       LV_MDOC  like BAPI2017_GM_HEAD_RET-MAT_DOC,
       LV_YEAR  like BAPI2017_GM_HEAD_RET-DOC_YEAR.
data:IT_GDMVT_CODE  like  BAPI2017_GM_CODE  value '05'.
data:IT_RETURN      like  BAPIRET2 occurs with header line.
type-pools: SLIS.
data: FC_HIER type SLIS_T_FIELDCAT_ALV,
      WA_HIER type SLIS_FIELDCAT_ALV .
data: MSG   type STRING.
constants:C_CHK_NUM like PA0001-ENAME value '0123456789.'.

data: begin of IT_DOWN occurs 0,
          LINE(1000type C,
end of IT_DOWN .
data: begin of I_FILE occurs 0,
        LINE(1000type C,
      end of I_FILE.
data: GV_FILE like RLGRAP-FILENAME.
*----------------------------------------------------------------------*
*  Parameter & Select-Options                                          *
*----------------------------------------------------------------------*
selection-screen begin of block with frame title TEXT-001.
parameter : FILENAME like RLGRAP-FILENAME obligatory.
parameters: PR_ERROR like RLGRAP-FILENAME obligatory default '/usr/sap/tmp'.
parameters: P_TEST as checkbox   .
selection-screen end of block 1.
*----------------------------------------------------------------------*
*  Initialize                                                          *
*----------------------------------------------------------------------*
initialization.
*----------------------------------------------------------------------*
*  AT SELECTION-SCREEN
*----------------------------------------------------------------------*
at selection-screen on value-request for FILENAME.
  perform F4_FILENAME using FILENAME.

at selection-screen on value-request for  PR_ERROR.
  perform F4_FILENAME using PR_ERROR.
*&---------------------------------------------------------------------*
* start of process
*&---------------------------------------------------------------------*
start-of-selection.
  perform UP_SELECT.

end-of-selection.
*&---------------------------------------------------------------------*
*&      Form  UP_SELECT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form UP_SELECT .
  data: LV_SERNR type MASE-LSERNR,
        LV_J type I.
  refresh: IT_RECORD.

  perform GET_DATA.
  perform GET_IT_RECORD2.
  perform CHECK_IT_RECORD.

  loop at IT_RECORD.
    if not IT_RECORD-MESSAGE ' OK.'.
      move-corresponding IT_RECORD to IT_ERR2.
      append IT_ERR2.
      clear IT_ERR2.
    endif.
  endloop.
  sort IT_RECORD by MATNR WERKS LGORT.
  loop at IT_RECORD.
    check IT_RECORD-MESSAGE ' OK.'.
    clear: IT_ERR,IT_ERR2,LV_SERNR,LV_J.

    select single LSERNR into LV_SERNR
       from MASE
         where MATNR IT_RECORD-MATNR.
    if SY-SUBRC ne 0.
      LV_SERNR 0.
    endif.
    move-corresponding IT_RECORD to IT_ERR.
    move-corresponding IT_RECORD to IT_ERR2.

    IT_GDMVT_HEAD-PSTNG_DATE sy-datum. "  posting date
    IT_GDMVT_HEAD-DOC_DATE  sy-datum.   "docmunt date
    "it_gdmvt_head-header_txt = 'Header text'. "Document header text
    "it_gdmvt_head-ref_doc_no = goodsmvt_data-ref_doc. "
    "it_gdmvt_head-gr_gi_slip_no  = goodsmvt_data-user_id . "

    IT_AFS_ITEM-MATERIAL   =  IT_RECORD-MATNR.     " Material Code
    IT_AFS_ITEM-PLANT      IT_RECORD-WERKS .     "Plant
    IT_AFS_ITEM-STGE_LOC   IT_RECORD-LGORT.      "Storage Location
    IT_AFS_ITEM-BATCH      IT_RECORD-CHARG.      "goodsmvt_data-rfid_batch' .
    IT_AFS_ITEM-MOVE_TYPE  IT_RECORD-BWART.      "Move type"
    IT_AFS_ITEM-ENTRY_QNT  IT_RECORD-MENGE .      " Quantity
*    IT_AFS_ITEM-ENTRY_UOM  = IT_RECORD-MEINS.      " Unit          Mark by Lisa wong 11/07/2012

   if IT_RECORD-BWART eq '561' or IT_RECORD-BWART eq '563' or it_record-bwart eq '562' .
      if IT_RECORD-SOBKZ ne SPACE.
        IT_AFS_ITEM-SPEC_STOCK IT_RECORD-SOBKZ.      "Special Stock
        if IT_RECORD-SOBKZ 'Q'.
          IT_AFS_ITEM-VAL_WBS_ELEM  IT_RECORD-POSID."Production Lot
          IT_AFS_ITEM-WBS_ELEM  IT_RECORD-POSID."Production Lot
        elseif IT_RECORD-SOBKZ 'K'.
          IT_AFS_ITEM-VENDOR  IT_RECORD-POSID."Vendor
        elseif IT_RECORD-SOBKZ 'W'.
          IT_AFS_ITEM-CUSTOMER  IT_RECORD-POSID."customer
        endif.
      endif.
    endif.
    append IT_AFS_ITEM.

    "80* 85* material
    LV_J IT_RECORD-MENGE.
    do LV_J times .
      LV_SERNR LV_SERNR + 1 .
      IT_SERIAL-MATDOC_ITM 1.
      IT_SERIAL-SERIALNO LV_SERNR.
      perform ADD_PRE_ZERO using IT_SERIAL-SERIALNO
                          changing IT_SERIAL-SERIALNO.
      append IT_SERIAL.
      clear:IT_SERIAL.
    enddo.


    call function 'BAPI_GOODSMVT_CREATE'
      exporting
        GOODSMVT_HEADER       IT_GDMVT_HEAD
        GOODSMVT_CODE         IT_GDMVT_CODE
      importing
        MATERIALDOCUMENT      LV_MDOC
        MATDOCUMENTYEAR       LV_YEAR
      tables
        GOODSMVT_ITEM         IT_AFS_ITEM
        GOODSMVT_SERIALNUMBER IT_SERIAL
        RETURN                IT_RETURN.

    read table IT_RETURN with key TYPE 'E'.
    if SY-SUBRC eq 0.
      clear IT_ERR2-MESSAGE.
      loop at IT_RETURN where TYPE 'E'.
        concatenate IT_ERR2-MESSAGE ' E: ' IT_RETURN-MESSAGE into IT_ERR2-MESSAGE.
      endloop.
      "concatenate 'E:' it_return-message into it_return-message.
      "clear it_err2-message.
      "it_err2-message = it_return-message.
      append IT_ERR2.
    else.
      call function 'BAPI_TRANSACTION_COMMIT'
        exporting
          WAIT 'X'.
*      wait up to 1 seconds.
      clear IT_ERR-MESSAGE.
      IT_ERR-MATDOC LV_MDOC.
      concatenate LV_MDOC ' is posted.'
                  into IT_ERR-MESSAGE.
      append IT_ERR.
    endif.
    clear: IT_AFS_ITEM, IT_RETURN, IT_GDMVT_HEAD,LV_MDOC,LV_YEAR,IT_SERIAL.
    refresh: IT_AFS_ITEM, IT_RETURN,IT_SERIAL.
  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 ORDER ascending.

  check not IT_ERR3[] is initial.
  perform DOWN_FILE .


  if P_TEST 'X'.
    perform DOWNLOAD_LOCAL.
    perform WRITE_DATA.
  else.
    perform DOWNLOAD_SERVER.
  endif.
endform.                    " UP_SELECT                 " GET_IT_RECORD
*&---------------------------------------------------------------------*
*&      Form  GET_IT_RECORD2
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form GET_IT_RECORD2 .
  data:LV_ORDER type I.
  check not ITAB[] is initial.
  LV_ORDER 1.
  loop at ITAB.
    move-corresponding ITAB to IT_RECORD.
    translate IT_RECORD-SOBKZ_C to upper case.
    IT_RECORD-SOBKZ IT_RECORD-SOBKZ_C.

    IT_RECORD-MATNR IT_RECORD-MATNR_C.
    replace  '-' with '' into IT_RECORD-MATNR.
    replace  '-' with '' into IT_RECORD-MATNR.
    replace  '-' with '' into IT_RECORD-MATNR.
    condense  IT_RECORD-MATNR no-gaps.

    if IT_RECORD-MENGE_C  cn C_CHK_NUM.
      IT_RECORD-MENGE -1.
    else.
      IT_RECORD-MENGE IT_RECORD-MENGE_C .
    endif.

    IT_RECORD-MEINS IT_RECORD-MEINS_C.

    perform ADD_PRE_ZERO using IT_RECORD-CHARG
                          changing IT_RECORD-CHARG.

    IT_RECORD-POSID IT_RECORD-POSID_C .

    IT_RECORD-ORDER LV_ORDER.
    append IT_RECORD.
    LV_ORDER LV_ORDER + 1.
    clear : IT_RECORD.
  endloop.
endform.                    " GET_IT_RECORD2

*&---------------------------------------------------------------------*
*&      Form  ADD_PRE_ZERO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_IT_RECORD_CHARG  text
*      <--P_IT_RECORD_CHARG  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  CHECK_IT_RECORD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form CHECK_IT_RECORD .
  data: LV_FLAG2  like LV_FLAG,
        LV_SOBKZ like T148,
        LV_WERKS like T001W-WERKS,
        LV_LGORT like T001L-LGORT,
        LV_MTART like MARA-MTART,
        LV_MEINS like MSEG-MEINS,
        LV_POSID like PRPS-POSID,
        LV_LIFNR like LFA1-LIFNR,
        LV_KUNNR like KNA1-KUNNR.
  clear:LV_FLAG,LV_FLAG2.

  loop at IT_RECORD.
    LV_TABIX SY-TABIX.
    clear:LV_FLAG2,IT_RECORD-MESSAGE.

    " Movement type
*    if it_record-bwart <> '561' and it_record-bwart <> '563' and it_record-bwart <> '901'.
*      lv_flag = 'X'.
*      lv_flag2 = 'X'.
*      concatenate it_record-message ' Movement Type Not Exists.'
*          into it_record-message.
*      modify it_record index  lv_tabix .
*    endif.

    " Material code
    clear:LV_MTART.
    select single MTART into LV_MTART
        from MARA
        where MATNR IT_RECORD-MATNR.
    if SY-SUBRC <> 0.
      LV_FLAG 'X'.
      LV_FLAG2 'X'.
      concatenate IT_RECORD-MESSAGE  ' Material Not Exists.'
             into IT_RECORD-MESSAGE.
      modify IT_RECORD index LV_TABIX.
    endif.
    if IT_RECORD-BWART eq '561' or IT_RECORD-BWART eq '563' or it_record-bwart eq '562'.
**      if LV_MTART = 'ZVFG'  or LV_MTART = 'ZUFG'. "  or  lv_mtart = 'ZSUB'  .    " Mark by Lisa wong 11/07/2012
*      if   IT_RECORD-SOBKZ ne 'Q'  and IT_RECORD-SOBKZ ne 'W' and IT_RECORD-SOBKZ ne 'K'.
*        "Special Stock
*        LV_FLAG = 'X'.
*        LV_FLAG2 = 'X'.
*        concatenate IT_RECORD-MESSAGE ' Special Stock <> Q or W is Error.'
*            into IT_RECORD-MESSAGE.
*        modify IT_RECORD index  LV_TABIX .
*      endif.
      if   IT_RECORD-SOBKZ eq 'Q'.
        "Production Lot
        select single POSID into LV_POSID
            from PRPS
            where POSID IT_RECORD-POSID.
        if SY-SUBRC <> 0.
          LV_FLAG 'X'.
          LV_FLAG2 'X'.
          concatenate IT_RECORD-MESSAGE  ' Production Lot Not Exists.'
                 into IT_RECORD-MESSAGE.
          modify IT_RECORD index LV_TABIX.
        endif.
      endif.
      if   IT_RECORD-SOBKZ eq 'W'.
        clear:LV_KUNNR.
        LV_KUNNR IT_RECORD-POSID.
        perform ADD_PRE_ZERO using LV_KUNNR
                            changing LV_KUNNR.
        IT_RECORD-POSID LV_KUNNR .

        select single KUNNR into LV_POSID
            from KNA1
            where KUNNR IT_RECORD-POSID.
        if SY-SUBRC <> 0.
          LV_FLAG 'X'.
          LV_FLAG2 'X'.
          concatenate IT_RECORD-MESSAGE  'Customer Not Exists.'
                 into IT_RECORD-MESSAGE.
        endif.
        modify IT_RECORD index LV_TABIX.
      endif.

      if IT_RECORD-SOBKZ eq 'K'.
        clear:LV_LIFNR.
        LV_LIFNR IT_RECORD-POSID.
        perform ADD_PRE_ZERO using LV_LIFNR
                            changing LV_LIFNR.
        IT_RECORD-POSID LV_LIFNR .

        select single LIFNR into LV_POSID
            from LFA1
            where LIFNR IT_RECORD-POSID.
        if SY-SUBRC <> 0.
          LV_FLAG 'X'.
          LV_FLAG2 'X'.
          concatenate IT_RECORD-MESSAGE  ' Vendor Not Exists.'
                 into IT_RECORD-MESSAGE.
        endif.
        modify IT_RECORD index LV_TABIX.
      endif.

*      elseif  LV_MTART = 'ZRAW' or LV_MTART = 'ZSUB'   .
      if  IT_RECORD-SOBKZ eq 'Q'.
        "Production Lot
        select single POSID into LV_POSID
            from PRPS
            where POSID IT_RECORD-POSID.
        if SY-SUBRC <> 0.
          LV_FLAG 'X'.
          LV_FLAG2 'X'.
          concatenate IT_RECORD-MESSAGE  ' Production Lot Not Exists.'
                 into IT_RECORD-MESSAGE.
          modify IT_RECORD index LV_TABIX.
        endif.
      elseif  IT_RECORD-SOBKZ eq 'K'.
        clear:LV_LIFNR.
        LV_LIFNR IT_RECORD-POSID.
        perform ADD_PRE_ZERO using LV_LIFNR
                            changing LV_LIFNR.
        IT_RECORD-POSID LV_LIFNR .

        select single LIFNR into LV_POSID
            from LFA1
            where LIFNR IT_RECORD-POSID.
        if SY-SUBRC <> 0.
          LV_FLAG 'X'.
          LV_FLAG2 'X'.
          concatenate IT_RECORD-MESSAGE  ' Vendor Not Exists.'
                 into IT_RECORD-MESSAGE.
        endif.
        modify IT_RECORD index LV_TABIX.
      elseif  IT_RECORD-SOBKZ eq 'W'.
        clear:LV_KUNNR.
        LV_KUNNR IT_RECORD-POSID.
        perform ADD_PRE_ZERO using LV_KUNNR
                            changing LV_KUNNR.
        IT_RECORD-POSID LV_KUNNR .

        select single KUNNR into LV_POSID
            from KNA1
            where KUNNR IT_RECORD-POSID.
        if SY-SUBRC <> 0.
          LV_FLAG 'X'.
          LV_FLAG2 'X'.
          concatenate IT_RECORD-MESSAGE  'Customer Not Exists.'
                 into IT_RECORD-MESSAGE.
        endif.
        modify IT_RECORD index LV_TABIX.
*       <else.
*          IT_RECORD-SOBKZ = SPACE.
*          IT_RECORD-POSID = SPACE.
*          modify IT_RECORD index LV_TABIX.
      endif.
*      else.
*        IT_RECORD-SOBKZ = SPACE.
*        IT_RECORD-POSID = SPACE.
*        modify IT_RECORD index LV_TABIX.
    endif.
*    endif.
    "plant
    select single WERKS into  LV_WERKS
       from T001W
       where WERKS IT_RECORD-WERKS.
    if SY-SUBRC <> 0.
      LV_FLAG 'X'.
      LV_FLAG2 'X'.
      concatenate IT_RECORD-MESSAGE  ' Plant Not Exists.'
             into IT_RECORD-MESSAGE.
      modify IT_RECORD index LV_TABIX.
    endif.
    "Stock Location
    select  single LGORT into LV_LGORT
        from T001L
        where LGORT IT_RECORD-LGORT.
    if SY-SUBRC <> 0.
      LV_FLAG 'X'.
      LV_FLAG2 'X'.
      concatenate IT_RECORD-MESSAGE
        ' Storage Location error.' into IT_RECORD-MESSAGE.
      modify IT_RECORD index LV_TABIX.
    endif.
    "Quantity
    if IT_RECORD-MENGE 0.
      LV_FLAG 'X'.
      LV_FLAG2 'X'.
      concatenate IT_RECORD-MESSAGE
        ' Quantity = 0 is error.' into IT_RECORD-MESSAGE.
      modify IT_RECORD index LV_TABIX.
    elseif IT_RECORD-MENGE < 0.
      LV_FLAG 'X'.
      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.
    "Unit
    select single MSEHI into LV_MEINS
        from T006
        where MSEHI IT_RECORD-MEINS.
    if SY-SUBRC <> 0.
      LV_FLAG 'X'.
      LV_FLAG2 'X'.
      concatenate IT_RECORD-MESSAGE  ' Unit Not Exists.'
             into IT_RECORD-MESSAGE.
      modify IT_RECORD index LV_TABIX.
    endif.


    if LV_FLAG2 <> 'X'.
      IT_RECORD-MESSAGE ' OK.'.
      modify IT_RECORD index LV_TABIX.
    endif.

  endloop.
endform.                    " CHECK_IT_RECORD
*&---------------------------------------------------------------------*
*&      Form  WRITE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form WRITE_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.
    APPEND WA_HIER TO FC_HIER.
  end-of-definition.
  ALV_FIELD '1' 'BWART' '' 'Movement type' ''.
  ALV_FIELD '2' 'SOBKZ_C' '' 'Special Stock' ''.
  ALV_FIELD '3' 'WERKS' 'Plant' '' ''.
  ALV_FIELD '4' 'LGORT' '' 'Stock Location' ''.
  ALV_FIELD '5' 'MATNR_C' '' 'Material' '20'.
  ALV_FIELD '6' 'MENGE' 'Quantity' '' ''.
  ALV_FIELD '7' 'MEINS' 'Unit' '' ''.
  ALV_FIELD '8' 'CHARG' 'Batch' '' ''.
  ALV_FIELD '9' 'POSID_C' '' 'Product lot' ''.
  ALV_FIELD '10' 'MESSAGE' 'Message' '' '30'.

  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
      IT_FIELDCAT   FC_HIER[]
    tables
      T_OUTTAB      IT_ERR3[]
    exceptions
      PROGRAM_ERROR 1
      others        2.
  if SY-SUBRC ne 0.
    "     message i004(zmm)
  endif.
endform.                    " WRITE_DATA
*&---------------------------------------------------------------------*
*&      Form  F4_FILENAME
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form F4_FILENAME using P_FILENAME .
  call function 'F4_FILENAME'
*    EXPORTING
*     PROGRAM_NAME        = SYST-CPROG
*     DYNPRO_NUMBER       = SYST-DYNNR
*     FIELD_NAME          =
    importing
      FILE_NAME           P_FILENAME.
endform.                    " F4_FILENAME

*&---------------------------------------------------------------------*
*&      Form  down_file
*&---------------------------------------------------------------------*
form DOWN_FILE .
  clear:IT_DOWN,IT_DOWN[].
  concatenate
            'Movement type'
            'Special Stock'
            'Plant'
            'Stock Location'
            'Material'
            'Quantity'
            'Unit'
            'Batch'
            'Product lot'
            'Message'
            into IT_DOWN separated by  CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
  append IT_DOWN.
  loop at IT_ERR3.
    move-corresponding IT_ERR3 to IT_TAB.
    concatenate IT_TAB-BWART
                IT_TAB-SOBKZ_C
                IT_TAB-WERKS
                IT_TAB-LGORT
                IT_TAB-MATNR_C
                IT_TAB-MENGE_C
                IT_TAB-MEINS_C
                IT_TAB-CHARG
                IT_TAB-POSID_C
                IT_TAB-MESSAGE
                into IT_DOWN separated by CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
    condense IT_DOWN .
    append IT_DOWN .
  endloop.
endform. "   down_file
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_SERVER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  get_file
*&---------------------------------------------------------------------*
form GET_FILE.
  data: WA_KEY(30type C.
  data: LV_I type I.
  data: LV_C(1type C.
  data: WA_DATE(8type C.
  data: WA_TIME like SY-UZEIT.
  data: LV_CHAR type C.
  WA_DATE SY-DATUM.
  WA_TIME =  SY-UZEIT.
  concatenate 'STOCK' WA_DATE WA_TIME  into WA_KEY.
  concatenate WA_KEY '.txt' into WA_KEY.

  LV_I STRLENPR_ERROR ).
  LV_I LV_I 1 .
  if LV_I > 1.
    LV_C PR_ERROR+LV_I(1).
  endif.
  if P_TEST 'X'.
    LV_CHAR '\' .
  else.
    LV_CHAR '/' .
  endif.
  if LV_C eq LV_CHAR.
    concatenate PR_ERROR WA_KEY into GV_FILE.
  else.
    concatenate PR_ERROR LV_CHAR WA_KEY into GV_FILE.
  endif.
endform.  "  get_file
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_SERVER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
form DOWNLOAD_SERVER .
  perform GET_FILE.
  open dataset GV_FILE for output in text mode encoding default.
  loop at IT_DOWN.
    transfer IT_DOWN-LINE to GV_FILE.
  endloop.
  close dataset GV_FILE.
endform.                    "DOWNLOAD_SERVER
*&---------------------------------------------------------------------*
*&      Form  DOWNLOAD_Local
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
form DOWNLOAD_LOCAL .
  data: LV_FILENAME type STRING.

  perform GET_FILE.
  LV_FILENAME GV_FILE.

  call function 'GUI_DOWNLOAD'
    exporting
      FILENAME                LV_FILENAME
      FILETYPE                'ASC'
      WRITE_FIELD_SEPARATOR   'X'
    tables
      DATA_TAB                IT_DOWN
    exceptions
      FILE_WRITE_ERROR        1
      NO_BATCH                2
      GUI_REFUSE_FILETRANSFER 3
      INVALID_TYPE            4
      NO_AUTHORITY            5
      UNKNOWN_ERROR           6
      HEADER_NOT_ALLOWED      7
      SEPARATOR_NOT_ALLOWED   8
      FILESIZE_NOT_ALLOWED    9
      HEADER_TOO_LONG         10
      DP_ERROR_CREATE         11
      DP_ERROR_SEND           12
      DP_ERROR_WRITE          13
      UNKNOWN_DP_ERROR        14
      ACCESS_DENIED           15
      DP_OUT_OF_MEMORY        16
      DISK_FULL               17
      DP_TIMEOUT              18
      FILE_NOT_FOUND          19
      DATAPROVIDER_EXCEPTION  20
      CONTROL_FLUSH_ERROR     21
      others                  22.
  if SY-SUBRC <> 0.
    message id SY-MSGID type SY-MSGTY number SY-MSGNO
          with SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  endif.
endform.                    " DOWNLOAD_DATA
" UPLOAD_SERVER
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form GET_DATA .
  if P_TEST 'X'.
    clear:ITAB,ITAB[] .
    data: LV_FILE  type STRING.

    LV_FILE FILENAME.
    call function 'GUI_UPLOAD'
      exporting
        FILENAME                LV_FILE
        FILETYPE                'ASC'
        HAS_FIELD_SEPARATOR     'X'
      tables
        DATA_TAB                ITAB
      exceptions
        FILE_OPEN_ERROR         1
        FILE_READ_ERROR         2
        NO_BATCH                3
        GUI_REFUSE_FILETRANSFER 4
        INVALID_TYPE            5
        NO_AUTHORITY            6
        UNKNOWN_ERROR           7
        BAD_DATA_FORMAT         8
        HEADER_NOT_ALLOWED      9
        SEPARATOR_NOT_ALLOWED   10
        HEADER_TOO_LONG         11
        UNKNOWN_DP_ERROR        12
        ACCESS_DENIED           13
        DP_OUT_OF_MEMORY        14
        DISK_FULL               15
        DP_TIMEOUT              16
        others                  17.
    if SY-SUBRC ne 0.
      clear : MSG.
      concatenate 'Upload Filename ' FILENAME  ' Is Error!' into MSG.
      message MSG type 'I'.
      exit.
    endif.
  else.
    clear:I_FILE,I_FILE[].
    open dataset FILENAME for input in text mode encoding default.
    if SY-SUBRC 0.
      do.
        read dataset FILENAME into I_FILE.
        if SY-SUBRC ne 0.
          exit.
        endif.
        append I_FILE.
      enddo.
      close dataset FILENAME.
    else.
      clear : MSG.
      concatenate 'Upload Filename ' FILENAME  ' Is Error!' into MSG.
      message MSG type 'I'.
      exit.
    endif.
    if not I_FILE[] is initial.
      loop at I_FILE.
        split I_FILE-LINE at CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB
                                 into ITAB-BWART ITAB-SOBKZ_C
                                      ITAB-WERKS ITAB-LGORT
                                      ITAB-MATNR_C ITAB-MENGE_C
                                      ITAB-MEINS_C ITAB-CHARG
                                      ITAB-POSID_C.
        append ITAB.
        clear:ITAB.
      endloop.
    endif.
  endif.
endform.                    " GET_DATA

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值