2008 Aug 14 6:06 PM
Hi all,
My requirement is I have 6 plants for which I have two internal tables in which data is coming from
a function module. Now here inside a loop at plant I want to open 6 files from one internal table and 6 from another table. Files are getting opened for both tables once and after its trying to open the same files due to which am getting an error.
Inside a perform :
*******************************************************************
inputfile-zprc = '\usr\sap\QAS\DVEBMGS00\work\ZJOHN.TXT'.
append inputfile.
inputfile-zprc = '\usr\sap\QAS\DVEBMGS00\work\test1.txt'.
append inputfile.
inputfile-zprc = '\usr\sap\QAS\DVEBMGS00\work\TEST.TXT'.
append inputfile.
inputfile-zprc = '\usr\sap\QAS\DVEBMGS00\work\ZSAMPLE.TXT'.
append inputfile.
inputfile-zprc = '\usr\sap\QAS\DVEBMGS00\work\ZSAMPLE2.TXT'.
append inputfile.
inputfile-zprc = '\usr\sap\QAS\DVEBMGS00\work\ZSAMPLE1.TXT'.
append inputfile.
CLEAR INPUTFILE.
********************************************************************
LOOP AT inputfile.
PERFORM OPEN_DATASET USING w_input_file.
PERFORM PASS_FILE.
ENDLOOP.
******************************************************************
outfile-zprc = '\usr\sap\QAS\DVEBMGS00\work\ZSITA.TXT'.
append outfile.
outfile-zprc = '\usr\sap\QAS\DVEBMGS00\work\ZSITA1.txt'.
append outfile.
outfile-zprc = '\usr\sap\QAS\DVEBMGS00\work\ZSITA2.TXT'.
append outfile.
outfile-zprc = '\usr\sap\QAS\DVEBMGS00\work\ZSITA4.TXT'.
append outfile.
outfile-zprc = '\usr\sap\QAS\DVEBMGS00\work\ZSITA5.TXT'.
append outfile.
outfile-zprc = '\usr\sap\QAS\DVEBMGS00\work\ZSITA6.TXT'.
append outfile.
clear outfile.
refresh outfile.
*****************************************************************
LOOP AT outfile.
PERFORM OUT_DATASET USING w_OUTPUT_file.
PERFORM OUT_FILE.
ENDLOOP.
ENDFORM. "OPEN_FILE
************************************************************************
FORM OPEN_DATASET USING p_w_input_file.
w_input_file = inputfile-zprc.
OPEN DATASET w_input_file FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc NE c_zero.
MESSAGE a002 WITH w_input_file. "File & could not be opened
ENDIF.
ENDFORM.
FORM PASS_FILE.
R_VAR = R_VAR + 1.
CASE R_VAR.
WHEN 1.
w_input_file1 = inputfile-zprc.
WHEN 2.
w_input_file2 = inputfile-zprc.
WHEN 3.
w_input_file3 = inputfile-zprc.
WHEN 4.
w_input_file4 = inputfile-zprc.
WHEN 5.
w_input_file5 = inputfile-zprc.
WHEN 6.
w_input_file6 = inputfile-zprc.
WHEN OTHERS.
ENDCASE.
ENDFORM.
Thanks & Regards
Jerry
2008 Aug 15 4:23 AM
Hi Jerry,
Looking at the code I can see some problems:
1) You are not passing the file name to the open_dataset routine correctly. See Below for correction.
LOOP AT inputfile.
PERFORM OPEN_DATASET USING inputfile-zprc.
PERFORM PASS_FILE.
ENDLOOP.
*****************************************************************
LOOP AT outfile.
PERFORM OUT_DATASET USING outfile-zprc.
PERFORM OUT_FILE.
ENDLOOP.
ENDFORM. "OPEN_FILE
2) The datasets need to be closed. after reading the content.
Open Input Files
Read Input Files into Internal Tables or Process 1 record at a time building up output files in an internal table
Close Input Files
Open Output Files
Transfer data to output files
Close Output Files.
Try to use CLOSE DATASET also inside the loop at input file & endloop. In ur code there is no CLOSE DATASET. May be thats why u r getting error. Try it and see...
2008 Aug 14 6:50 PM
Try to use CLOSE DATASET also inside the loop at input file & endloop. In ur code there is no CLOSE DATASET. May be thats why u r getting error. Try it and see...
2008 Aug 15 4:23 AM
Hi Jerry,
Looking at the code I can see some problems:
1) You are not passing the file name to the open_dataset routine correctly. See Below for correction.
LOOP AT inputfile.
PERFORM OPEN_DATASET USING inputfile-zprc.
PERFORM PASS_FILE.
ENDLOOP.
*****************************************************************
LOOP AT outfile.
PERFORM OUT_DATASET USING outfile-zprc.
PERFORM OUT_FILE.
ENDLOOP.
ENDFORM. "OPEN_FILE
2) The datasets need to be closed. after reading the content.
Open Input Files
Read Input Files into Internal Tables or Process 1 record at a time building up output files in an internal table
Close Input Files
Open Output Files
Transfer data to output files
Close Output Files.
2008 Aug 16 4:30 PM
Hi , thanks for your help!!
Now I am not getting any error in openings files on application server but when I have to transfer the data that is fetched from database to app server files data is not getting transferred........
p1 = 2.
form conver_data using p1.
FIELD-SYMBOLS <ff>.
DO.
CASE p1.
WHEN 1.
ASSIGN COMPONENT sy-index OF STRUCTURE header_record TO <ff>.
WHEN 2.
ASSIGN COMPONENT sy-index OF STRUCTURE out_rec1 TO <ff>.
WHEN 3.
ASSIGN COMPONENT sy-index OF STRUCTURE itab_hts TO <ff>.
WHEN 4.
ASSIGN COMPONENT sy-index OF STRUCTURE header_record TO <ff>.
WHEN 5.
ASSIGN COMPONENT sy-index OF STRUCTURE out_rec2 TO <ff>.
WHEN 6.
ASSIGN COMPONENT sy-index OF STRUCTURE trailer_record TO <ff>.
ENDCASE.
***Break at internal table inside of itab_material table
IF sy-index EQ 9.
EXIT.
ENDIF.
IF sy-subrc <> 0.
EXIT.
ENDIF.
following needed if you need a field separator within the record
if sy-index > 1.
MOVE C_SEPARATOR TO W_WA+W_OFFSET(C_ONE).
w_rec_len = w_rec_len + c_one.
w_offset = w_offset + c_one.
endif.
DESCRIBE FIELD <ff> OUTPUT-LENGTH w_len.
w_rec_len = w_rec_len + w_len.
MOVE <ff> TO w_wa+w_offset(w_len).
w_offset = w_offset + w_len.
ENDDO.
endform
TRANSFER w_wa TO w_output_file1 LENGTH w_rec_len.
******************************************************************
TRANSFER w_wa TO w_output_file2 LENGTH w_rec_len.
TRANSFER w_wa TO w_output_file3 LENGTH w_rec_len.
TRANSFER w_wa TO w_output_file4 LENGTH w_rec_len.
TRANSFER w_wa TO w_output_file5 LENGTH w_rec_len.
TRANSFER w_wa TO w_output_file6 LENGTH w_rec_len.
Your help is appreciated
Thanks & Regards
Jerry
2008 Aug 18 4:27 AM
Hi Jerry,
Personally I am not a big fan of using field-symbols in this way.
My preference would be as follows:
form conver_data using p1.
field-symbols: <fs> type any.
data: l_text(50) type c.
CASE p1.
WHEN 1.
ASSIGN COMPONENT sy-index OF STRUCTURE header_record TO <fs>
WHEN 2.
do 9 times.
ASSIGN COMPONENT sy-index OF STRUCTURE out_rec1 TO <fs>.
if sy-subrc eq 0. "Test if assignment worked
l_text = <fs>.
concatenate w_wa l_text into w_wa separated by c_separator.
endif.
enddo.
WHEN 3.
ASSIGN COMPONENT sy-index OF STRUCTURE itab_hts TO <fs>
WHEN 4.
ASSIGN COMPONENT sy-index OF STRUCTURE header_record TO <fs>
WHEN 5.
ASSIGN COMPONENT sy-index OF STRUCTURE out_rec2 TO <fs>
WHEN 6.
ASSIGN COMPONENT sy-index OF STRUCTURE trailer_record TO <fs>
ENDCASE.
endform.
Kind Regards
David Cooper
Edited by: David Cooper on Aug 18, 2008 11:30 AM
2008 Aug 18 10:20 AM
Hi, thanks for your answer!!!
As I said I have 6 company codes and for each company code the plant information should be transferred to outfile i.e 6 plants info should be transferred to 6 output files of app server.
LOOP AT S_COMPCODE.
outfile-zprc = '\usr\sap\QAS\DVEBMGS00\work\ZJOHN.TXT'.
append outfile.
outfile-zprc = '\usr\sap\QAS\DVEBMGS00\work\test1.txt'.
append outfile.
outfile-zprc = '\usr\sap\QAS\DVEBMGS00\work\TEST.TXT'.
append outfile.
outfile-zprc = '\usr\sap\QAS\DVEBMGS00\work\ZSAMPLE.TXT'.
append outfile.
outfile-zprc = '\usr\sap\QAS\DVEBMGS00\work\ZSAMPLE2.TXT'.
append outfile.
outfile-zprc = '\usr\sap\QAS\DVEBMGS00\work\ZSAMPLE1.TXT'.
append outfile.
CLEAR OUTFILE.
LOOP AT outfile.
PERFORM OUT_DATASET USING w_output_file.
PERFORM OUT_FILE.
ENDLOOP.
ENDFORM.
| User | Count |
|---|---|
| 3 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |