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(20) type C,
MENGE like MSEG-MENGE,
MENGE_C(20) type C,
MEINS like MSEG-MEINS,
MEINS_C(3) type C,
CHARG like MSEG-CHARG,
POSID like PRPS-POSID,
POSID_C like PRPS-POSID,
MESSAGE(700) type 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 0 with header line.
data: IT_ERR3 like IT_ERR occurs 0 with header line.
types:LV_TYPE type C 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(700) type 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 0 with header line,
IT_SERIAL like BAPI2017_GM_SERIALNUMBER occurs 0 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 0 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(1000) type C,
end of IT_DOWN .
data: begin of I_FILE occurs 0,
LINE(1000) type C,
end of I_FILE.
data: GV_FILE like RLGRAP-FILENAME.
*----------------------------------------------------------------------*
* Parameter & Select-Options *
*----------------------------------------------------------------------*
selection-screen begin of block 1 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(30) type C.
data: LV_I type I.
data: LV_C(1) type C.
data: WA_DATE(8) type 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 = STRLEN( PR_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