2007 Jul 18 3:44 PM
HELLO EXPERTS,
I need some help in coding.
I have to read the data from 3 different files which r in apps server with 3 different structures.
so i declared one common form form_read_data....... with the code...
&----
*& Form FORM_READ_DATA
&----
Imports the data into an internal table from the specified
file on the application server.
----
<T> i_filedata Table containing the imported records
--> src_filename Full name of file containing the source data
--> l_PIPE Indicator: file PIPE delimited or not
<-- l_rc System return code
----
Usage:
*
This perform will be called from within the perform
'sub_importData'. Explicit call to this perform is not
recommended.
----
form FORM_READ_DATA tables I_FILEDATA
using S_FNAME1
S_PIPE
changing S_RC .
Ensure the internal table is empty
refresh i_filedata.
clear v_message.
Open the source file for reading
open dataset S_FNAME1 for input in text mode
encoding default
message v_message.
if sy-subrc = 0.
Read each line in the source file and add it's contents to the
internal table.
do.
read dataset S_FNAME1 into i_filedata.
EOF reached
if sy-subrc <> 0.
exit.
else.
append i_filedata.
endif.
enddo.
if i_filedata[] is not initial.
S_RC = 0.
else.
S_RC = 4.
endif.
else.
S_RC = sy-subrc.
endif.
Close the source file
close dataset S_FNAME1.
endform. " FORM_READ_DATA.
and call that routine as............
PERFORM FORM_READ_DATA tables I_FILEDATA1
using V_FNAME1
C_PIPE
changing L_SUBRC.
PERFORM FORM_READ_DATA tables I_FILEDATA2
using V_FNAME2
C_PIPE
changing L_SUBRC.
PERFORM FORM_READ_DATA tables I_FILEDATA3
using V_FNAME3
C_PIPE
changing L_SUBRC.
and declarations are like............
types: begin of IT_AR_FILE,
P_DATE type sydatum,
P_XBLNR TYPE XBLNR,
P_BLDAT TYPE BLDAT,
P_BUDAT TYPE BUDAT,
P_BLART TYPE BLART,
P_AWKEY TYPE AWKEY,
P_KUNNR TYPE KUNNR,
P_XREF1 type XREF1 ,
P_XREF2 type XREF2 ,
P_XREF3 type XREF3,
P_WRBTR TYPE WRBTR,
P_ZTERM TYPE DZTERM,
P_ZUONR TYPE DZUONR,
P_RSTGR TYPE RSTGR,
P_WSKTO TYPE WSKTO,
P_SGTXT TYPE SGTXT,
P_BUKRS TYPE BUKRS,
chkflg type boolean,
end of IT_AR_FILE.
TYPES: BEGIN OF IT_GLITEM,
P_DATE type sydatum ,
P_KUNNR TYPE KUNNR,
P_XBLNR TYPE XBLNR,
P_BLDAT TYPE BLDAT,
P_BUDAT TYPE BUDAT,
P_BLART TYPE BLART,
P_AWKEY TYPE AWKEY,
P_KUNNR TYPE KUNNR,
P_XREF1 type XREF1 ,
P_XREF2 type XREF2 ,
P_XREF3 type XREF3,
P_WRBTR TYPE WRBTR,
P_ZTERM TYPE DZTERM,
P_ZUONR TYPE DZUONR,
P_RSTGR TYPE RSTGR,
P_WSKTO TYPE WSKTO,
P_SGTXT TYPE SGTXT,
P_BUKRS TYPE BUKRS,
chkflg type boolean,
END OF IT_GLITEM.
DATA: I_FILEDATA1 TYPE IT_AR_FILE OCCURS 0 WITH HEADER LINE,
WA_FILEDATA1 TYPE IT_AR_FILE ,
I_FILEDATA2 TYPE IT_GLITEM OCCURS 0 WITH HEADER LINE,
WA_FILEDATA2 TYPE IT_GLITEM,
I_FILEDATA3 TYPE IT_GLITEM OCCURS 0 WITH HEADER LINE,
WA_FILEDATA3 TYPE IT_GLITEM .
does the above code work properly.... guide me plz....................right now it is not giving me any syntax error.
SRI
2007 Jul 18 4:44 PM
It will work as long as you don't try to refer to individual fields of those internal tables. Also, if you have unicode checks on, there may some conflicts with the data types.
Another thing I noted is that you are passing a parameter C_PIPE but you are not using it in the subroutine. Are these files pipe-delimited? If so you cannot use it the way you have it now, because when you try to split at pipe, you will have to specify the target fields which you don't have within the subroutine.
Instead, define an internal table that can accommodate data for any of the 3 files as below.
data: begin of itab_file occurs 0,
record(500).
data: end of itab_file.
Read each file into this same internal table and then once the file contents are in this internal table, then outside you can do something like
loop at itab_file.
split itab_file at c_pipe into itab1-field1 itab1-field2 ....... where itab1 is your internal table for the first file.
2007 Jul 18 3:47 PM
2007 Jul 18 3:49 PM
hi,
See following code :
TABLES: MAKT,T005T,TSKMT,MLAN,TSTL,TSKM, ZERP_EXTRACT_ANR,TVKWZ.
DATA: BEGIN OF I_FINAL OCCURS 0,
*RECID(4),
*I,
MATNR LIKE MARA-MATNR,
I1,
MBRSH LIKE MARA-MBRSH,
I2,
MTART LIKE MARA-MTART,
I3,
WERKS LIKE MARC-WERKS,
I4,
VKORG LIKE MVKE-VKORG,
I5,
VTWEG LIKE MVKE-VTWEG,
END OF I_FINAL.
DATA: BEGIN OF I_FINAL1 OCCURS 0,
MATNR LIKE MARA-MATNR,
I1,
MBRSH LIKE MARA-MBRSH,
I2,
MTART LIKE MARA-MTART,
I3,
WERKS LIKE MARC-WERKS,
I4,
VKORG LIKE MVKE-VKORG,
I5,
VTWEG LIKE MVKE-VTWEG,
I6,
MAKTX LIKE MAKT-MAKTX,
I7,
SPRAS LIKE MAKT-SPRAS,
I8,
MEINS LIKE MARA-MEINS,
I9,
MATKL LIKE MARA-MATKL,
I0,
BISMT LIKE MARA-BISMT,
I11,
SPART LIKE MARA-SPART,
I12,
KTGRM LIKE MVKE-KTGRM,
I13,
MTPOS LIKE MVKE-MTPOS,
I14,
MTPOS_MARA LIKE MARA-MTPOS_MARA,
I15,
AMATKL LIKE MARA-MATKL, "repeated
I15A,
BSPART LIKE MARA-SPART, "repeated
I15B,
CMEINS LIKE MARA-MEINS, "repeated
I15C,
LAND1 LIKE T005T-LAND1,
I16,
TATYP LIKE TSKMT-TATYP,
I17,
DWERK LIKE MVKE-DWERK,
I18,
PRCTR LIKE MARC-PRCTR,
END OF I_FINAL1.
DATA: BEGIN OF I_FINAL2 OCCURS 0,
MATNR LIKE MARA-MATNR,
I1,
MBRSH LIKE MARA-MBRSH,
I2,
MTART LIKE MARA-MTART,
I3,
WERKS LIKE MARC-WERKS,
I4,
VKORG LIKE MVKE-VKORG,
I5,
VTWEG LIKE MVKE-VTWEG,
I6,
TAXKM LIKE TSKMT-TAXKM,
END OF I_FINAL2.
DATA: BEGIN OF I_MARA OCCURS 0,
MATNR LIKE MARA-MATNR,
MBRSH LIKE MARA-MBRSH,
MTART LIKE MARA-MTART,
MEINS LIKE MARA-MEINS,
MATKL LIKE MARA-MATKL,
BISMT LIKE MARA-BISMT,
SPART LIKE MARA-SPART,
MTPOS_MARA LIKE MARA-MTPOS_MARA,
END OF I_MARA.
DATA:BEGIN OF I_MARC OCCURS 0,
MATNR LIKE MARC-MATNR,
WERKS LIKE MARC-WERKS,
PRCTR LIKE MARC-PRCTR,
END OF I_MARC.
DATA: BEGIN OF I_MVKE OCCURS 0,
MATNR LIKE MVKE-MATNR,
VKORG LIKE MVKE-VKORG,
VTWEG LIKE MVKE-VTWEG,
KTGRM LIKE MVKE-KTGRM,
MTPOS LIKE MVKE-MTPOS,
DWERK LIKE MVKE-DWERK,
END OF I_MVKE.
DATA: OBJ_NAME(10) TYPE C VALUE 'OTC_C_15'.
DATA: MSG(100).
DATA: DDROP(3).
DATA HEADER TYPE STRING.
SELECTION-SCREEN SKIP 3.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS: R1 RADIOBUTTON GROUP RG,
R2 RADIOBUTTON GROUP RG,
R3 RADIOBUTTON GROUP RG,
R4 RADIOBUTTON GROUP RG,
R5 RADIOBUTTON GROUP RG DEFAULT 'X',
R6 RADIOBUTTON GROUP RG.
SELECTION-SCREEN END OF BLOCK B1.
DATA: LN TYPE I.
DATA: CNT(20),CNT1(20),CNT2(20).
DATA : DATASET LIKE RLGRAP-FILENAME.
START-OF-SELECTION.
PERFORM GET_DATA.
PERFORM PROCESS_DATA.
PERFORM DOWNLOAD_FILE_APPSERVR.
*&----
*
*& Form GET_DATA
*&----
*
FORM GET_DATA.
SELECT MATNR MBRSH MTART MEINS MATKL BISMT SPART FROM MARA
INTO TABLE I_MARA WHERE LVORM <> 'X' AND ( MTART = 'FSCN' OR
MTART = 'FSTG' OR
MTART = 'OFCN' OR
MTART = 'OFTG' OR
mtart = 'ZSRV' OR
MTART = 'LABO' OR
MTART = 'PHYS')
AND MATKL BETWEEN '00000001' AND '00000017'.
*R001 Material types LABO and PHYS r included, ZSRV delted,matkl added
IF NOT I_MARA[] IS INITIAL.
SELECT MATNR VKORG VTWEG KTGRM MTPOS DWERK FROM MVKE INTO TABLE I_MVKE
FOR ALL ENTRIES IN I_MARA
WHERE MATNR = I_MARA-MATNR AND
VKORG NOT IN ('NE01','SC01','SO01','WW01').
*R001 exlusion of sales org from selecting
*R001 to extract plants which are related to sales orgs
*SELECT * INTO corresponding table i_tvkwz
FROM tvkwz
where
ENDIF.
IF NOT I_MARA[] IS INITIAL.
SELECT MATNR WERKS PRCTR FROM MARC INTO TABLE I_MARC
FOR ALL ENTRIES IN I_MARA
WHERE MATNR = I_MARA-MATNR.
ENDIF.
ENDFORM. " GET_DATA
*&----
*
*& Form PROCESS_DATA
*&----
*
FORM PROCESS_DATA.
LOOP AT I_MARC.
READ TABLE I_MARA WITH KEY MATNR = I_MARC-MATNR.
IF SY-SUBRC = 0.
SELECT SINGLE * FROM MAKT WHERE MATNR = I_MARA-MATNR.
IF SY-SUBRC = 0.
I_FINAL1-MAKTX = MAKT-MAKTX.
I_FINAL1-SPRAS = MAKT-SPRAS.
ENDIF.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-I2 = 'Ï'.
I_FINAL2-I3 = 'Ï'.
I_FINAL2-I4 = 'Ï'.
I_FINAL2-I5 = 'Ï'.
I_FINAL2-I6 = 'Ï'.
I_FINAL-RECID = '0010'.
I_FINAL-MATNR = I_MARA-MATNR.
I_FINAL1-RECID = '0020'.
I_FINAL1-MATNR = I_MARA-MATNR.
I_FINAL1-MBRSH = I_MARA-MBRSH.
I_FINAL1-MTART = I_MARA-MTART.
I_FINAL-MBRSH = I_MARA-MBRSH.
I_FINAL-MTART = I_MARA-MTART.
I_FINAL2-MBRSH = I_MARA-MBRSH.
I_FINAL2-MTART = I_MARA-MTART.
I_FINAL1-WERKS = I_MARC-WERKS.
I_FINAL-WERKS = I_MARC-WERKS.
I_FINAL2-WERKS = I_MARC-WERKS.
I_FINAL1-PRCTR = I_MARC-PRCTR.
I_FINAL1-MEINS = I_MARA-MEINS.
I_FINAL1-CMEINS = I_MARA-MEINS.
I_FINAL1-MATKL = I_MARA-MATKL.
I_FINAL1-AMATKL = I_MARA-MATKL.
I_FINAL1-BISMT = I_MARA-BISMT.
I_FINAL1-SPART = I_MARA-SPART.
I_FINAL1-BSPART = I_MARA-SPART.
ENDIF.
SELECT SINGLE * FROM MLAN WHERE MATNR = I_MARC-MATNR.
IF SY-SUBRC = 0.
I_FINAL1-LAND1 = MLAN-ALAND.
SELECT SINGLE * FROM TSTL WHERE TALND = MLAN-ALAND.
IF SY-SUBRC = 0.
I_FINAL1-TATYP = TSTL-TATYP.
IF NOT MLAN-TAXM1 IS INITIAL.
I_FINAL2-RECID = '0030'.
I_FINAL2-I = 'Ï'.
I_FINAL2-MATNR = I_MARC-MATNR.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-TAXKM = MLAN-TAXM1 .
APPEND I_FINAL2.
CLEAR I_FINAL2.
ENDIF.
IF NOT MLAN-TAXM2 IS INITIAL.
I_FINAL2-RECID = '0030'.
I_FINAL2-I = 'Ï'.
I_FINAL2-MATNR = I_MARC-MATNR.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-TAXKM = MLAN-TAXM2.
APPEND I_FINAL2.
CLEAR I_FINAL2.
ENDIF.
IF NOT MLAN-TAXM3 IS INITIAL.
I_FINAL2-RECID = '0030'.
I_FINAL2-I = 'Ï'.
I_FINAL2-MATNR = I_MARC-MATNR.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-TAXKM = MLAN-TAXM3 .
APPEND I_FINAL2.
CLEAR I_FINAL2.
ENDIF.
IF NOT MLAN-TAXM4 IS INITIAL.
I_FINAL2-RECID = '0030'.
I_FINAL2-I = 'Ï'.
I_FINAL2-MATNR = I_MARC-MATNR.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-TAXKM = MLAN-TAXM4 .
APPEND I_FINAL2.
CLEAR I_FINAL2.
ENDIF.
IF NOT MLAN-TAXM5 IS INITIAL.
I_FINAL2-RECID = '0030'.
I_FINAL2-I = 'Ï'.
I_FINAL2-MATNR = I_MARC-MATNR.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-TAXKM = MLAN-TAXM5 .
APPEND I_FINAL2.
CLEAR I_FINAL2.
ENDIF.
IF NOT MLAN-TAXM6 IS INITIAL.
I_FINAL2-RECID = '0030'.
I_FINAL2-I = 'Ï'.
I_FINAL2-MATNR = I_MARC-MATNR.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-TAXKM = MLAN-TAXM6.
APPEND I_FINAL2.
CLEAR I_FINAL2.
ENDIF.
IF NOT MLAN-TAXM7 IS INITIAL.
I_FINAL2-RECID = '0030'.
I_FINAL2-I = 'Ï'.
I_FINAL2-MATNR = I_MARC-MATNR.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-TAXKM = MLAN-TAXM7.
APPEND I_FINAL2.
CLEAR I_FINAL2.
ENDIF.
IF NOT MLAN-TAXM8 IS INITIAL.
I_FINAL2-RECID = '0030'.
I_FINAL2-I = 'Ï'.
I_FINAL2-MATNR = I_MARC-MATNR.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-TAXKM = MLAN-TAXM8.
APPEND I_FINAL2.
CLEAR I_FINAL2.
ENDIF.
IF NOT MLAN-TAXM9 IS INITIAL.
I_FINAL2-RECID = '0030'.
I_FINAL2-I = 'Ï'.
I_FINAL2-MATNR = I_MARC-MATNR.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-TAXKM = MLAN-TAXM9 .
APPEND I_FINAL2.
CLEAR I_FINAL2.
ENDIF.
ENDIF.
ENDIF.
I_FINAL1-I = 'Ï'.
I_FINAL1-I0 = 'Ï'.
I_FINAL1-I1 = 'Ï'.
I_FINAL1-I2 = 'Ï'.
I_FINAL1-I3 = 'Ï'.
I_FINAL1-I4 = 'Ï'.
I_FINAL1-I5 = 'Ï'.
I_FINAL1-I6 = 'Ï'.
I_FINAL1-I7 = 'Ï'.
I_FINAL-I1 = 'Ï'.
I_FINAL-I2 = 'Ï'.
I_FINAL-I3 = 'Ï'.
I_FINAL-I4 = 'Ï'.
I_FINAL-I5 = 'Ï'.
I_FINAL1-I8 = 'Ï'.
I_FINAL1-I9 = 'Ï'.
I_FINAL1-I11 = 'Ï'.
I_FINAL1-I12 = 'Ï'.
I_FINAL1-I13 = 'Ï'.
I_FINAL1-I14 = 'Ï'.
I_FINAL1-I15 = 'Ï'.
I_FINAL1-I15A = 'Ï'.
I_FINAL1-I15B = 'Ï'.
I_FINAL1-I15C = 'Ï'.
I_FINAL1-I16 = 'Ï'.
I_FINAL1-I17 = 'Ï'.
I_FINAL-I = 'Ï'.
SELECT SINGLE * FROM TVKWZ WHERE WERKS = I_MARC-WERKS
AND VTWEG = 'T1'.
IF SY-SUBRC = 0.
READ TABLE I_MVKE WITH KEY MATNR = I_MARC-MATNR
vkorg = i_marc-werks.
VKORG = TVKWZ-VKORG.
IF SY-SUBRC = 0.
I_FINAL1-VKORG = I_MVKE-VKORG.
I_FINAL1-VTWEG = I_MVKE-VTWEG.
I_FINAL-VKORG = I_MVKE-VKORG.
I_FINAL-VTWEG = I_MVKE-VTWEG.
I_FINAL2-VKORG = I_MVKE-VKORG.
I_FINAL2-VTWEG = I_MVKE-VTWEG.
I_FINAL1-KTGRM = I_MVKE-KTGRM.
I_FINAL1-MTPOS = I_MVKE-MTPOS.
I_FINAL1-DWERK = I_MVKE-DWERK.
APPEND I_FINAL.
APPEND I_FINAL1.
*start of Tax clasification data
SELECT SINGLE * FROM MLAN WHERE MATNR = I_MARC-MATNR.
IF SY-SUBRC = 0.
I_FINAL1-LAND1 = MLAN-ALAND.
SELECT SINGLE * FROM TSTL WHERE TALND = MLAN-ALAND.
IF SY-SUBRC = 0.
I_FINAL1-TATYP = TSTL-TATYP.
IF NOT MLAN-TAXM1 IS INITIAL.
I_FINAL2-RECID = '0030'.
I_FINAL2-I = 'Ï'.
I_FINAL2-MATNR = I_MARC-MATNR.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-TAXKM = MLAN-TAXM1 .
APPEND I_FINAL2.
CLEAR I_FINAL2.
ENDIF.
IF NOT MLAN-TAXM2 IS INITIAL.
I_FINAL2-RECID = '0030'.
I_FINAL2-I = 'Ï'.
I_FINAL2-MATNR = I_MARC-MATNR.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-TAXKM = MLAN-TAXM2.
APPEND I_FINAL2.
CLEAR I_FINAL2.
ENDIF.
IF NOT MLAN-TAXM3 IS INITIAL.
I_FINAL2-RECID = '0030'.
I_FINAL2-I = 'Ï'.
I_FINAL2-MATNR = I_MARC-MATNR.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-TAXKM = MLAN-TAXM3 .
APPEND I_FINAL2.
CLEAR I_FINAL2.
ENDIF.
IF NOT MLAN-TAXM4 IS INITIAL.
I_FINAL2-RECID = '0030'.
I_FINAL2-I = 'Ï'.
I_FINAL2-MATNR = I_MARC-MATNR.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-TAXKM = MLAN-TAXM4 .
APPEND I_FINAL2.
CLEAR I_FINAL2.
ENDIF.
IF NOT MLAN-TAXM5 IS INITIAL.
I_FINAL2-RECID = '0030'.
I_FINAL2-I = 'Ï'.
I_FINAL2-MATNR = I_MARC-MATNR.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-TAXKM = MLAN-TAXM5 .
APPEND I_FINAL2.
CLEAR I_FINAL2.
ENDIF.
IF NOT MLAN-TAXM6 IS INITIAL.
I_FINAL2-RECID = '0030'.
I_FINAL2-I = 'Ï'.
I_FINAL2-MATNR = I_MARC-MATNR.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-TAXKM = MLAN-TAXM6.
APPEND I_FINAL2.
CLEAR I_FINAL2.
ENDIF.
IF NOT MLAN-TAXM7 IS INITIAL.
I_FINAL2-RECID = '0030'.
I_FINAL2-I = 'Ï'.
I_FINAL2-MATNR = I_MARC-MATNR.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-TAXKM = MLAN-TAXM7.
APPEND I_FINAL2.
CLEAR I_FINAL2.
ENDIF.
IF NOT MLAN-TAXM8 IS INITIAL.
I_FINAL2-RECID = '0030'.
I_FINAL2-I = 'Ï'.
I_FINAL2-MATNR = I_MARC-MATNR.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-TAXKM = MLAN-TAXM8.
APPEND I_FINAL2.
CLEAR I_FINAL2.
ENDIF.
IF NOT MLAN-TAXM9 IS INITIAL.
I_FINAL2-RECID = '0030'.
I_FINAL2-I = 'Ï'.
I_FINAL2-MATNR = I_MARC-MATNR.
I_FINAL2-I1 = 'Ï'.
I_FINAL2-TAXKM = MLAN-TAXM9 .
APPEND I_FINAL2.
CLEAR I_FINAL2.
ENDIF.
ENDIF.
ENDIF.
*end of tax clasification data
ENDIF.
ENDIF.
ENDLOOP.
SORT I_FINAL.
DELETE ADJACENT DUPLICATES FROM I_FINAL.
SORT I_FINAL2.
DELETE ADJACENT DUPLICATES FROM I_FINAL2.
SORT I_FINAL1.
DELETE ADJACENT DUPLICATES FROM I_FINAL1.
ENDFORM. " PROCESS_DATA
*&----
*
*& Form DOWNLOAD_FILE_APPSERVR
*&----
*
FORM DOWNLOAD_FILE_APPSERVR.
IF R1 = 'X'.
DDROP = 'MC1'.
ELSEIF R2 = 'X'.
DDROP = 'MC2'.
ELSEIF R3 = 'X'.
DDROP = 'MC3'.
ELSEIF R4 = 'X'.
DDROP = 'IM1'.
ELSEIF R5 = 'X'.
DDROP = 'TR1'.
ELSEIF R6 = 'X'.
DDROP = 'PT1'.
ENDIF.
DATASET = '/var/sapgl/migrate/'.
CONCATENATE DATASET DDROP '_' OBJ_NAME '_0010_' SY-DATUM '_' '01' '.DAT'
INTO DATASET.
PERFORM OPEN_DATASET USING DATASET .
TRANSFER 'MATNRÏMBRSHÏMTARTÏWERKSÏVKORGÏVTWEG' TO DATASET.
LOOP AT I_FINAL.
TRANSFER I_FINAL TO DATASET.
IF I_FINAL-MATNR+0(1) CA '0123456789'.
CNT = CNT + I_FINAL-MATNR.
ENDIF.
ENDLOOP.
PERFORM CLOSE_DATASET USING DATASET.
CLEAR DATASET.
DATASET = '/var/sapgl/migrate/'.
CONCATENATE DATASET DDROP '_' OBJ_NAME '_0020_' SY-DATUM '_' '01' '.DAT'
INTO DATASET.
PERFORM OPEN_DATASET USING DATASET .
CONCATENATE TEXT-002 'PRCTR' INTO HEADER.
TRANSFER HEADER TO DATASET.
LOOP AT I_FINAL1 .
TRANSFER I_FINAL1 TO DATASET.
IF I_FINAL1-MATNR+0(1) CA '0123456789'.
CNT1 = CNT1 + I_FINAL1-MATNR.
ENDIF.
ENDLOOP.
PERFORM CLOSE_DATASET USING DATASET.
CLEAR DATASET.
DATASET = '/var/sapgl/migrate/'.
CONCATENATE DATASET DDROP '_' OBJ_NAME '_0030_' SY-DATUM '_' '01' '.DAT'
INTO DATASET.
PERFORM OPEN_DATASET USING DATASET .
TRANSFER 'MATNRÏMBRSHÏMTARTÏWERKSÏVKORGÏVTWEGÏTAXKM' TO DATASET.
LOOP AT I_FINAL2.
TRANSFER I_FINAL2 TO DATASET.
IF I_FINAL2-MATNR+0(1) CA '0123456789'.
CNT2 = CNT2 + I_FINAL2-MATNR.
ENDIF.
ENDLOOP.
PERFORM CLOSE_DATASET USING DATASET.
{{{{ " audit & Reconcilation for rec-ID 0010
DESCRIBE TABLE I_FINAL LINES LN.
ZERP_EXTRACT_ANR-OBJECT = 'OTC_C_15'.
ZERP_EXTRACT_ANR-EXT_DATE = SY-DATUM.
ZERP_EXTRACT_ANR-REC_ID = '0010'.
ZERP_EXTRACT_ANR-REC_CNT = LN.
ZERP_EXTRACT_ANR-COLUMN_CNT = '06'.
ZERP_EXTRACT_ANR-HASH = CNT.
ZERP_EXTRACT_ANR-COLUMN_NAME = 'MATNR-Material Number'.
MODIFY ZERP_EXTRACT_ANR FROM ZERP_EXTRACT_ANR.
}}}}
{{{{ " audit & Reconcilation for rec-ID 0020
CLEAR LN.
DESCRIBE TABLE I_FINAL1 LINES LN.
ZERP_EXTRACT_ANR-OBJECT = 'OTC_C_15'.
ZERP_EXTRACT_ANR-EXT_DATE = SY-DATUM.
ZERP_EXTRACT_ANR-REC_ID = '0020'.
ZERP_EXTRACT_ANR-REC_CNT = LN.
ZERP_EXTRACT_ANR-COLUMN_CNT = '22'.
ZERP_EXTRACT_ANR-HASH = CNT1.
zerp_extract_anr-column_name = 'BISMT-Old Material Number'.
ZERP_EXTRACT_ANR-COLUMN_NAME = 'MATNR-Material Number'.
MODIFY ZERP_EXTRACT_ANR FROM ZERP_EXTRACT_ANR.
}}}}
{{{{ " audit & Reconcilation for rec-ID 0030
CLEAR LN.
DESCRIBE TABLE I_FINAL2 LINES LN.
ZERP_EXTRACT_ANR-OBJECT = 'OTC_C_15'.
ZERP_EXTRACT_ANR-EXT_DATE = SY-DATUM.
ZERP_EXTRACT_ANR-REC_ID = '0030'.
ZERP_EXTRACT_ANR-REC_CNT = LN.
ZERP_EXTRACT_ANR-COLUMN_CNT = '07'.
ZERP_EXTRACT_ANR-HASH = CNT2.
ZERP_EXTRACT_ANR-COLUMN_NAME = 'MATNR-Material Number'.
MODIFY ZERP_EXTRACT_ANR FROM ZERP_EXTRACT_ANR.
}}}}
ENDFORM. " DOWNLOAD_FILE_APPSERVR
*&----
*
*& Form OPEN_DATASET
*&----
*
FORM OPEN_DATASET USING P_DATASET.
OPEN DATASET P_DATASET FOR OUTPUT IN TEXT MODE MESSAGE MSG.
IF SY-SUBRC <> 0.
WRITE: / MSG, SY-SUBRC.
STOP.
ENDIF.
ENDFORM. " OPEN_DATASET
*&----
*
*& Form CLOSE_DATASET
*&----
*
FORM CLOSE_DATASET USING P_DATASET.
CLOSE DATASET P_DATASET.
ENDFORM. " CLOSE_DATASET
reward points if helpful
Regards
Srikanta Gope
2007 Jul 18 4:22 PM
In response to the reply from SRIKANTA, take a look at this program
REPORT Z_SOME_RANDOM_PROGRAM.
START-OF-SELECTION.
WRITE:/ 'Give us the points'.
END-OF-SELECTION.
2007 Jul 18 3:51 PM
Hi Sri,
It should work.. I dont see any problem with that code..
You can test this program by putting some files in the home directory...
Cheer's
Mahesh
2007 Jul 18 3:59 PM
Mahesh,
What i am wondering is .... i didn't declare the variables anywhere what ever I used in the form subroutine. I can't declare because I have to call the same form for 3 different fiels...
am I in the correct path?
SRI
2007 Jul 18 4:44 PM
It will work as long as you don't try to refer to individual fields of those internal tables. Also, if you have unicode checks on, there may some conflicts with the data types.
Another thing I noted is that you are passing a parameter C_PIPE but you are not using it in the subroutine. Are these files pipe-delimited? If so you cannot use it the way you have it now, because when you try to split at pipe, you will have to specify the target fields which you don't have within the subroutine.
Instead, define an internal table that can accommodate data for any of the 3 files as below.
data: begin of itab_file occurs 0,
record(500).
data: end of itab_file.
Read each file into this same internal table and then once the file contents are in this internal table, then outside you can do something like
loop at itab_file.
split itab_file at c_pipe into itab1-field1 itab1-field2 ....... where itab1 is your internal table for the first file.
2007 Jul 18 5:37 PM
Ya Srinivas,
It is a pipe delimiter file.
srini what ever you said i didn't get. Can you tell me clearly what do u want me to do . where should i declare that internal table n read the data into it whether it is inside the subroutine or outside....
how about read file and split the file at pipe... can you clearly telll me that plz
SRI
2007 Jul 18 5:53 PM
Something like this.
DATA: BEGIN OF itab_file OCCURS 0,
record(500).
DATA: END OF itab_file.
TYPES: BEGIN OF it_ar_file,
p_date TYPE sydatum,
p_xblnr TYPE xblnr,
p_bldat TYPE bldat,
p_budat TYPE budat,
p_blart TYPE blart,
p_awkey TYPE awkey,
p_kunnr TYPE kunnr,
p_xref1 TYPE xref1 ,
p_xref2 TYPE xref2 ,
p_xref3 TYPE xref3,
p_wrbtr TYPE wrbtr,
p_zterm TYPE dzterm,
p_zuonr TYPE dzuonr,
p_rstgr TYPE rstgr,
p_wskto TYPE wskto,
p_sgtxt TYPE sgtxt,
p_bukrs TYPE bukrs,
chkflg TYPE boolean,
END OF it_ar_file.
TYPES: BEGIN OF it_glitem,
p_date TYPE sydatum ,
p_kunnr TYPE kunnr,
p_xblnr TYPE xblnr,
* P_BLDAT TYPE BLDAT,
* P_BUDAT TYPE BUDAT,
* P_BLART TYPE BLART,
* P_AWKEY TYPE AWKEY,
* P_KUNNR TYPE KUNNR,
* P_XREF1 type XREF1 ,
* P_XREF2 type XREF2 ,
* P_XREF3 type XREF3,
p_wrbtr TYPE wrbtr,
* P_ZTERM TYPE DZTERM,
* P_ZUONR TYPE DZUONR,
* P_RSTGR TYPE RSTGR,
* P_WSKTO TYPE WSKTO,
* P_SGTXT TYPE SGTXT,
* P_BUKRS TYPE BUKRS,
chkflg TYPE boolean,
END OF it_glitem.
DATA: i_filedata1 TYPE it_ar_file OCCURS 0 WITH HEADER LINE,
wa_filedata1 TYPE it_ar_file ,
i_filedata2 TYPE it_glitem OCCURS 0 WITH HEADER LINE,
wa_filedata2 TYPE it_glitem,
i_filedata3 TYPE it_glitem OCCURS 0 WITH HEADER LINE,
wa_filedata3 TYPE it_glitem .
PERFORM form_read_data USING v_fname1
CHANGING l_subrc.
IF l_subrc = 0.
LOOP AT itab_file.
SPLIT itab_file-record AT c_pipe
INTO i_filedata1-p_date
i_filedata1-p_xblnr
i_filedata1-p_bldat
i_filedata1-p_budat
i_filedata1-p_blart
i_filedata1-p_awkey
i_filedata1-p_kunnr
i_filedata1-p_xref1
i_filedata1-p_xref2
i_filedata1-p_xref3
i_filedata1-p_wrbtr
i_filedata1-p_zterm
i_filedata1-p_zuonr
i_filedata1-p_rstgr
i_filedata1-p_wskto
i_filedata1-p_sgtxt
i_filedata1-p_bukrs
i_filedata1-chkflg.
APPEND i_filedata1.
CLEAR i_filedata1.
ENDLOOP.
ENDIF.
PERFORM form_read_data USING v_fname2
CHANGING l_subrc.
PERFORM form_read_data USING v_fname3
CHANGING l_subrc.
*&---------------------------------------------------------------------*
*& Form FORM_READ_DATA
*&---------------------------------------------------------------------*
* Imports the data into an internal table from the specified
* file on the application server.
*----------------------------------------------------------------------*
* <T> i_filedata Table containing the imported records
* --> src_filename Full name of file containing the source data
* --> l_PIPE Indicator: file PIPE delimited or not
* <-- l_rc System return code
*----------------------------------------------------------------------*
* Usage:
*
* This perform will be called from within the perform
* 'sub_importData'. Explicit call to this perform is not
* recommended.
*----------------------------------------------------------------------*
FORM form_read_data USING s_fname1
CHANGING s_rc .
* Ensure the internal table is empty
REFRESH itab_file.
CLEAR v_message.
* Open the source file for reading
OPEN DATASET s_fname1 FOR INPUT IN TEXT MODE
ENCODING DEFAULT
MESSAGE v_message.
IF sy-subrc = 0.
* Read each line in the source file and add it's contents to the
* internal table.
DO.
READ DATASET s_fname1 INTO itab_file.
* EOF reached
IF sy-subrc <> 0.
EXIT.
ELSE.
APPEND itab_file.
ENDIF.
ENDDO.
IF itab_file[] IS NOT INITIAL.
s_rc = 0.
ELSE.
s_rc = 4.
ENDIF.
ELSE.
s_rc = sy-subrc.
ENDIF.
* Close the source file
CLOSE DATASET s_fname1.
ENDFORM. " FORM_READ_DATA.