‎2007 Dec 05 7:30 PM
hi everybody,
I hv done with a program to delete duplicate entries.... an the code is as below.
TYPES : BEGIN OF TY_LFA1,
LIFNR TYPE LFA1-LIFNR,
LAND1 TYPE LFA1-LAND1,
NAME1 TYPE LFA1-NAME1,
PSTLZ TYPE LFA1-PSTLZ,
END OF TY_LFA1.
DATA : IT_FIRST TYPE STANDARD TABLE OF TY_LFA1 WITH HEADER LINE,
IT_SECOND TYPE STANDARD TABLE OF TY_LFA1 WITH HEADER LINE,
V_FILE TYPE STRING,
V_COUNT TYPE I,
V_COUNTER TYPE I.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
PARAMETERS : P_FILE LIKE RLGRAP-FILENAME.
SELECTION-SCREEN END OF BLOCK B1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
PERFORM GET_FILE.
START-OF-SELECTION.
IF P_FILE IS NOT INITIAL.
V_FILE = P_FILE.
PERFORM GUI_UPLOAD.
ENDIF.
IF IT_FIRST[] = IT_SECOND[].
ELSE.
MESSAGE E001(ZHEMANTH).
ENDIF.
SORT IT_FIRST BY LIFNR.
SORT IT_SECOND BY LIFNR.
DELETE ADJACENT DUPLICATES FROM IT_FIRST.
LOOP AT IT_FIRST.
LOOP AT IT_SECOND WHERE LIFNR = IT_FIRST-LIFNR.
V_COUNT = V_COUNT + 1.
ENDLOOP.
V_COUNTER = V_COUNT + 1.
WRITE : /10 IT_FIRST-LIFNR,
15 IT_FIRST-LAND1,
50 IT_FIRST-NAME1,
60 IT_FIRST-PSTLZ,
70 V_COUNT,
80 V_COUNTER.
CLEAR V_COUNT.
ENDLOOP.
&----
*& Form GET_FILE
&----
FORM GET_FILE .
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = ' '
IMPORTING
FILE_NAME = P_FILE.
.
ENDFORM. " GET_FILE
&----
*& Form GUI_UPLOAD
&----
FORM GUI_UPLOAD .
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = V_FILE
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = 'X'
HEADER_LENGTH = 0
READ_BY_LINE = 'X'
DAT_MODE = ' '
IMPORTING
FILELENGTH =
HEADER =
TABLES
DATA_TAB = IT_FIRST
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 <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " GUI_UPLOAD
when iam excuting the program iam getting a error mesage as i mentiod in prog(ie no data found)
so any one tell hw to gv flatfile for this program.... an hw can i over cm the probs.
‎2007 Dec 05 7:44 PM
Hi satish,
go home and sleep about it.
Maybe tomorrow you can explain your question.
Regards,
Clemens
‎2007 Dec 05 7:49 PM
I don't see IT_SECOND being populated.
You probably want something like:
REPORT ztest MESSAGE-ID 00.
TYPES : BEGIN OF ty_lfa1,
lifnr TYPE lfa1-lifnr,
land1 TYPE lfa1-land1,
name1 TYPE lfa1-name1,
pstlz TYPE lfa1-pstlz,
END OF ty_lfa1.
DATA: it_first TYPE STANDARD TABLE OF ty_lfa1 WITH HEADER LINE,
it_second TYPE STANDARD TABLE OF ty_lfa1 WITH HEADER LINE,
v_file TYPE string,
v_count TYPE i,
v_counter TYPE i.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS : p_file LIKE rlgrap-filename.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
PERFORM get_file.
START-OF-SELECTION.
PERFORM get_db_data. "<====
IF p_file IS NOT INITIAL.
v_file = p_file.
PERFORM gui_upload.
ENDIF.
IF it_first[] = it_second[].
ELSE.
MESSAGE e001(zhemanth).
ENDIF.
SORT it_first BY lifnr.
SORT it_second BY lifnr.
DELETE ADJACENT DUPLICATES FROM it_first.
LOOP AT it_first.
LOOP AT it_second WHERE lifnr = it_first-lifnr.
v_count = v_count + 1.
ENDLOOP.
v_counter = v_count + 1.
WRITE : /10 it_first-lifnr,
15 it_first-land1,
50 it_first-name1,
60 it_first-pstlz,
70 v_count,
80 v_counter.
CLEAR v_count.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Form GET_FILE
*&---------------------------------------------------------------------*
FORM get_file .
CALL FUNCTION 'F4_FILENAME'
IMPORTING
file_name = p_file.
ENDFORM. " GET_FILE
*&---------------------------------------------------------------------*
*& Form GUI_UPLOAD
*&---------------------------------------------------------------------*
FORM gui_upload .
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
filename = v_file
filetype = 'ASC'
has_field_separator = 'X'
TABLES
data_tab = it_first
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 <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " GUI_UPLOAD
*&---------------------------------------------------------------------*
*& Form get_db_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_db_data . "<====
TYPES : BEGIN OF ty_lfa1,
lifnr TYPE lfa1-lifnr,
land1 TYPE lfa1-land1,
name1 TYPE lfa1-name1,
pstlz TYPE lfa1-pstlz,
END OF ty_lfa1.
SELECT lifnr land1 name1 pstlz
FROM lfa1
INTO TABLE it_second.
ENDFORM. " get_db_data
Rob
Message was edited by:
Rob Burbank
‎2007 Dec 05 8:13 PM
IF IT_FIRST[] = IT_SECOND[].
ELSE.
MESSAGE E001(ZHEMANTH).
ENDIF.
assign values to it_second then compare it. In the above statement, always you get message in case you dont copy values to it_second.
Well, if you want to delete duplicate records, i dont think you need to assign.
instead write code like this
if it_first is initial.
message.
else.
delete adjusent duplicates from it_first comparing field1 fields2(if you want).
endif.
that statement deletes the duplicate records if there are entries in it_First.