Using: Delete Adjacent Duplicates
Hi,
How can we use Delete Adjacent Duplicates where comparing clause is dynamic.
The the number of comparison characteristics are dependent on some other conditions and are decided at runtime. Also can this be used with Field-Symbols.
Arunava
Hi Arunava,
The following were taken from ABAP key word documentation.
1. The DELETE ADJACENT DUPLICATES statement works particularly well if you have sorted the internal table itab according to the fields that you want to compare when looking for duplicates. In this case, deleting adjacent duplicates is the same as deleting all duplicates. The direction of the sort is irrelevant.
2. <b>If you do not know a comparison expression until runtime, you can specify it dynamically as the contents of the field name in the expression COMPARING ... (name) .... If name is empty at runtime, the comparison expression is ignored. If name contains an invalid component name, a runtime error occurs.</b>
3. You can further restrict comparison expressions - both static and dynamic - by specifying offset and length.
Regards
Raja
Similar Messages
-
Problem using DELETE ADJACENT DUPLICATES with dynamic table
Hello All,
In my program i have to delete duplicate records from dynamic table.
I tried using DELETE ADJACENT DUPLICATES FROM <DYN_TABLE> COMPARING <fieldname1> <fieldname2> but it fails in syntax check, then i tried like below:
DATA string type string.
string = '<fieldname1> <fieldname2>.........'.
DELETE ADJACENT DUPLICATES FROM <DYN_TABLE> COMPARING (string).
It also got failed at runtime.
Please suggest how can i achieve this....
Regards
Munish GargHi,
this code is worked truly.
You can try this.
Regards.
DATA itab LIKE STANDARD TABLE OF mard.
SELECT * FROM mard INTO TABLE itab UP TO 100 ROWS.
* You define max number of the field that you need
data : cmp01 TYPE string,
cmp02 TYPE string,
cmp03 TYPE string,
cmp04 TYPE string,
cmp05 TYPE string.
* You fill the fields that you need, others is clear.
cmp01 = 'MATNR'.
cmp02 = 'WERKS'.
CLEAR : cmp03,cmp04,cmp05.
SORT itab BY (cmp01) (cmp02) (cmp03) (cmp04) (cmp05).
DELETE ADJACENT DUPLICATES FROM itab COMPARING (cmp01) (cmp02) (cmp03)
(cmp04) (cmp05). -
How to use 'DELETE ADJACENT DUPLICATES FROM' for deleting as some field
How to use 'DELETE ADJACENT DUPLICATES FROM' for deleting as some field
eg:
I have a inner table ,it contains a field named ast_guid,now,I search ten records,contains some duplicate records in the field of ast_guid.but I can not delete the duplicate records as ast_guid.If the type of inner table is standard table, you should sort the inner table by the fields before user 'DELETE ADJACENT DUPLICATES ', and use COMPARING addtion.
Edited by: Justin on Jun 28, 2009 9:48 AM -
Delete adjacent duplicates how to use in the below select statement
hi i have a problem
i am suing the below select statement
SELECT a~extno
a~guid_lclic " for next select
e~ctsim
e~ctsex
*revised spec 3rd
f~guid_pobj
f~amnt_flt
f~amcur
f~guid_mobj
e~srvll "pk
e~ctsty "PK
e~lgreg "PK
INTO TABLE gt_sagmeld
FROM /SAPSLL/LCLIC as a
INNER JOIN /sapsll/tlegsv as e on elgreg = algreg
inner join /sapsll/legcon as f on fguid_lclic = aguid_lclic " for ccngn1 selection
inner join /sapsll/corcts as g on gguid_pobj = fguid_pobj
where a~extno in s_extno.
sort gt_sagmeld by guid_lclic lgreg ctsty srvll GUID_POBJ GUID_MOBJ.
delete adjacent duplicates from gt_sagmeld comparing guid_lclic lgreg ctsty srvll GUID_POBJ GUID_MOBJ .
now i am confused how to use delete adjacent dupliacate and on which fields
as first table /sal../lclic primary key is guid_lclic
and it is joined to table
legcon by guid_lclci ( not a primary key here)
legcon primary key is guid_legcon
and table 3 legsv by lgreg (pk here)
table 3 has tow more primary key srvll and ctsty also
NOW MY QUESTIO IS TAHT IS I USE ABOVE DELETE ADJACENT STATMENT IT FETCHES 20 LAKH RECORDS
I WANT TO REDUCE IS LET ME KNOW ON WHAT fields i need to use delete adjacen duplicates
or use comparing all fields?
regards
Arorahi sudha
if u see my select statement is contains four Primary keys
srvll
lgreg
ctsty
guid_lclic
but the next table connected to this table legcon is by guid_pobj and anothe table by guid_mobj
and if i take this gt_sagmeld to another temp table and i find abt 10 lakh uniques guid_pobj
similary 6 lakh guid_mobj so the next slect is hanpering because of this
not COMING TO OUR POINT IF I SORT ONLY BY OUR PRIMARY KEYS NOT TAKING INTO ACCOUNT TEH GUID_POBJ AND GUID_MOBJ
THE ENTRIES ARE VERY LESS BUT IF I TAKE INOT ACCCOUNT IN GT_SAGMELD THE ENTRIES ARE ABT 20 LAKH
SO I AM NOT SURE WHETHER TO TAKNE GUID_POBJ AND GUID_MOBJ INOT ACCOUNT FOR DELECTING ADJACENT DUPLICATES?
HENCE THE QUESTION OF ON WHICH FIRLD DELETE OR COMPARING ALL FIELDS I USE? -
hi,
SORT itab ASCENDING BY xxx.
DELETE ADJACENT DUPLICATES FROM itab COMPARING xx.
1)can i do in a loop as i need to throw in error file for those repeated record.
2)the itab without header record is ok rite? our standard is not to use occurs but to define another working area. our standard is loop itab into wa
thanksHi,
You can solve your prob using below code:
DATA: ind(1), p_val like itab-field1.
SORT itab ASCENDING field1.
LOOP AT itab INTO wa_itab.
CLEAR: p_val, ind.
ON CHANGE OF field1.
p_val = itab-field1.
ind = 'X'.
ENDON.
IF itab-field1 = p_val AND NOT ind IS INITIAL.
DELETE itab INDEX sy-tabix.
ENDIF.
ENDLOOP.
Thanks. -
Extract - Delete Adjacent Duplicates
Hi Experts,
As in internal tables is it possible to delete adjacent duplicate records from an extract ?
Thanks in advance.
Ramesh.Hi,
Deleting Adjacent Duplicate Entries
To delete adjacent duplicate entries use the following statement:
DELETE ADJACENT DUPLICATE ENTRIES FROM <itab>
[COMPARING <f1> <f2> ...
|ALL FIELDS].
The system deletes all adjacent duplicate entries from the internal table <itab>. Entries are duplicate if they fulfill one of the following compare criteria:
Without the COMPARING addition, the contents of the key fields of the table must be identical in both lines.
If you use the addition COMPARING <f1> <f2> ... the contents of the specified fields <f1> <f2> ... must be identical in both lines. You can also specify a field <fi> dynamically as
the contents of a field <ni> in the form (<ni>). If <ni> is empty when the statement is executed, it is ignored. You can restrict the search to partial fields by specifying offset and length.
If you use the addition COMPARING ALL FIELDS the contents of all fields of both lines must be identical.
You can use this statement to delete all duplicate entries from an internal table if the table is sorted by the specified compare criterion.
If at least one line is deleted, the system sets SY-SUBRC to 0, otherwise to 4.
Ex.
DATA OFF TYPE I.
DATA: BEGIN OF LINE,
COL1 TYPE I,
COL2 TYPE C,
END OF LINE.
DATA ITAB LIKE STANDARD TABLE OF LINE
WITH NON-UNIQUE KEY COL2.
LINE-COL1 = 1. LINE-COL2 = 'A'. APPEND LINE TO ITAB.
LINE-COL1 = 1. LINE-COL2 = 'A'. APPEND LINE TO ITAB.
LINE-COL1 = 1. LINE-COL2 = 'B'. APPEND LINE TO ITAB.
LINE-COL1 = 2. LINE-COL2 = 'B'. APPEND LINE TO ITAB.
LINE-COL1 = 3. LINE-COL2 = 'B'. APPEND LINE TO ITAB.
LINE-COL1 = 4. LINE-COL2 = 'B'. APPEND LINE TO ITAB.
LINE-COL1 = 5. LINE-COL2 = 'A'. APPEND LINE TO ITAB.
OFF = 0. PERFORM LIST.
DELETE ADJACENT DUPLICATES FROM ITAB COMPARING ALL FIELDS.
OFF = 14. PERFORM LIST.
DELETE ADJACENT DUPLICATES FROM ITAB COMPARING COL1.
OFF = 28. PERFORM LIST.
DELETE ADJACENT DUPLICATES FROM ITAB.
OFF = 42. PERFORM LIST.
FORM LIST.
SKIP TO LINE 3.
LOOP AT ITAB INTO LINE.
WRITE: AT /OFF LINE-COL1, LINE-COL2.
ENDLOOP.
ENDFORM.
Regards,
Bhaskar -
Regarding SELECT FOR ALL ENTRIES AND DELETE ADJACENT DUPLICATES
Hi,
i got few doubts.....
1) Is it necessary to DELETE ADJACENT DUPLICATES when we perform a SELECT FOR ALL ENTRIES ? because for all entries itself eliminates the duplicate entries?
2) Wat Sy-subrc returns after a SELECT FOR ALL ENTRIES statement?
I found some code where these are used
SORT ITAB[] BY NEWKO[].
DELETE ADJACENT DUPLICATES FORM ITAB[].
SELECT buknr
kunnr
FORM KNB1
into table ITAB_KNB1
FOR ALL ENTRIES IN ITAB
where kunnr eq itab-newko.
Regards.
Maehsh.Hi Mahesh,
To be more specific, first you should delete "adjacent duplicates" using the sorting key ( here : NEWKO ), if Itab contains other fields.
SORT ITAB[] BY NEWKO[].
DELETE ADJACENT DUPLICATES FORM ITAB COMPARING NEWKO.
You can delete or not the duplicates, but, you must know that if you don't delete them in the Itab, you will retrieve them in the ITAB_KNB1.
Concerning the return code, it works like for the "SELECT" ( 0 = entries found / 4 = no entrie found )
=> One more thing, it's better check :
Check not ITab[] is initial
because, if the Itab is empty, you'll retrieve all the record of KNB1 !
Hope this helps,
Erwan.
Message was edited by:
Erwan LE BRUN -
Probelm with DELETE ADJACENT DUPLICATES
Hi Guys!
Here's the scenario, I have this syntax in my report..
delete adjacent duplicates from it_itab comparing matkl sptag+0(6)
The values inside the it_tab is as follows..
20080301|01010402
20080301|02024301
20080305|01010402
20080310|01010402
when I debug it, and used the syntax delete adjacent duplicates from it_itab comparing matkl sptag+0(6),
the output will be like this....
20080301|01010402
20080301|02024301
20080305|01010402
I dont know why this output showed up. I'm expecting do have this output
20080301|01010402
20080301|02024301
Could someone explain why this happened? Is there a problem or loop hole in delete adjacent duplicate?
Please help! thanks so much!
Regards,
Mackoyhi
do this:
sort it_itab by matkl sptag.
delete adjacent....
delete adjacent will always look for the adjacent entries, and if a dupliacte is found then it deletes the 2nd records.
for ex , u have,
var1
123
123
124
125
123
in this case....2nd record is deleted and the output will be
123
124
125
123 . if it was sorted by var1 and then delete adjacent duplicates was used then it will have unique records.
regards,
madhumitha -
Delete adjacent duplicates from dynamic table
Hi all,
How to do delete adjacent <tab> comparing f1 f2 f3 for a dynamic table.
Thx in advance
Edited by: Misha Denis on Feb 14, 2010 9:28 AM
Moderator message - Cross post locked
Edited by: Rob Burbank on Feb 14, 2010 3:45 PMyou can use a function GET_COMPONENT_LIST to get all the fields' name after the dynamic table generated. then you can use the field name in the statement "DELETE....COMPARE "
CALL FUNCTION 'GET_COMPONENT_LIST'
EXPORTING
program = SY-REPID
fieldname = THE_NAME_OF_THE_DYNAMIC_INTERNAL_TABLE
tables
components = ITAB
LOOP AT ITAB.
*ASSIGN THE ITAB-COMPNAME TO SOME VARIANTS:FIELD1,FIELD2,FIELD3.
ENDLOOP.
SORT THE_NAME_OF_THE_DYNAMIC_INTERNAL_TABLE BY FIELD1 FIELD2 FIELD3.
DELETE ADJACENT DUPLICATES FROM THE_NAME_OF_THE_DYNAMIC_INTERNAL_TABLE COMPARING FIELD1 FIELD2 FIELD3. -
DELETE ADJACENT DUPLICATES FROM itab
Hi Frends, can any one explain me about
<b>DELETE ADJACENT DUPLICATES FROM itab</b>
and can any one give me sample program using the above statement.
full points will be given for good example
Thanks and Regards
Vijayai am sending 2 programs to u:
DESCRIPTION: INTERACTIVE REPORT FOR SALES DOCUMENT
*FOR PRINTING SALES DOCUMENT HEADER, SALES DOCUMENT DETAILS, PARTNER
DETAILS, SCHEDULE LINE DATA.
D A T A D E C L A R A T I O N S *
INCLUDE z8vg_isro1.
INITIALIZATION.
v_chkbox = ' '.
v_chkbox1 = ''.
S T A R T O F S E L E C T I O N *
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-028.
SELECT-OPTIONS: s_vbeln FOR i_vbak-vbeln.
"FOR RANGE OF VALUES.
SELECTION-SCREEN END OF BLOCK bl1.
A T S E L E C T I O N S C R E E N ( V A L I D A T I O N S ) *
AT SELECTION-SCREEN.
Check if record exists or not.
PERFORM zf_validations.
S T A R T O F S E L E C T I O N *
START-OF-SELECTION.
*this is event blocks which is executed when the user chooses the
*corresponding function key
REFRESH i_ucomm.
CLEAR i_ucomm.
i_ucomm-ucomm = 'G002'. " schdl data
APPEND i_ucomm.
SET PF-STATUS 'MENU2' EXCLUDING i_ucomm.
" MENU BAR STATUS.
*populating sales order header data , item data , partner data ,
*schedule data
PERFORM zf_select_headerdata.
AT USER-COMMAND.
"This event is executed whenever the user presses a menu option 'execute
"' in the list
CASE sy-ucomm.
WHEN 'EX01'. "Cancel
LEAVE PROGRAM.
WHEN 'GO01'. "for item data
vflag = '0'.
REFRESH i_ucomm.
CLEAR i_ucomm.
i_ucomm-ucomm = 'GO01'. " item data
APPEND i_ucomm.
SET PF-STATUS 'MENU2' EXCLUDING i_ucomm .
PERFORM zf_select_details.
WHEN 'G002'. "for schedule data .
REFRESH i_ucomm.
CLEAR i_ucomm.
i_ucomm-ucomm = 'G000'.
APPEND i_ucomm.
APPEND 'GO01' TO i_ucomm.
APPEND 'G002' TO i_ucomm.
SET PF-STATUS 'MENU2' EXCLUDING i_ucomm .
PERFORM zf_scheduledata .
WHEN 'G000'.
"function code for displaying partner details.
REFRESH i_ucomm.
CLEAR i_ucomm.
i_ucomm-ucomm = 'G000'.
APPEND i_ucomm.
APPEND 'GO01' TO i_ucomm.
APPEND 'G002' TO i_ucomm.
SET PF-STATUS 'MENU2' EXCLUDING i_ucomm .
IF vflag = '1'.
PERFORM zf_partnerdetails.
" FOR PARTNER DETAILS OF HEADER
ELSE.
PERFORM zf_partnerdetails1.
" FOR PARTNER DETAILS OF SALES ORDER ITEMS .
ENDIF.
WHEN 'BACK'.
LEAVE PROGRAM.
ENDCASE.
*& FORM TOP_OF_PAGE
TOP-OF-PAGE DURING LINE-SELECTION.
printing header for secondary list of report.
PERFORM zf_tols.
TOP-OF-PAGE.
printing hearder for basic list of report
PERFORM zf_top.
*& Form VALIDATIONS
subroutine to check whether record exists or not
--> p1 text
<-- p2 text
FORM zf_validations .
SELECT SINGLE vbeln FROM vbak
INTO i_vbak-vbeln
WHERE vbeln IN s_vbeln.
EXIT.
CHECK IF THE RECORD EXISTS OR NOT.
IF sy-subrc <> 0.
MESSAGE e001.
ENDIF.
ENDFORM. " VALIDATIONS
*& Form SELECT_HEADERDATA
subroutine for populating header data and other details.
--> p1 text
<-- p2 text
FORM zf_select_headerdata .
*refreshing all the internal tables.
CLEAR i_vbak.
REFRESH i_vbak.
CLEAR i_vbap.
REFRESH i_vbap.
CLEAR i_vbpa.
REFRESH i_vbpa.
CLEAR i_vbep.
REFRESH i_vbep.
*populating sales order header data , item data , partner data ,
*schedule data
SELECT vbeln
erdat
vkorg
FROM vbak
INTO TABLE i_vbak
WHERE vbeln IN s_vbeln.
IF NOT i_vbak[] IS INITIAL.
SELECT vbeln
posnr
matnr FROM vbap
INTO TABLE i_vbap
FOR ALL ENTRIES IN i_vbak
WHERE vbeln = i_vbak-vbeln.
ENDIF.
IF sy-subrc <> 0.
MESSAGE e004.
ENDIF.
SORT i_vbap BY vbeln posnr.
" SORTING TABLE WITH KEY FIELDS .
REFRESH i_mat.
CLEAR i_mat.
fetching of unique material numbers corresponding sales orderno.
LOOP AT i_vbap.
i_mat-matnr = i_vbap-matnr.
APPEND i_mat.
ENDLOOP.
SORT i_mat BY matnr. " sorting of material nos.
IF sy-SUBRC = 0.
deleting duplicate entries from table
DELETE ADJACENT DUPLICATES FROM i_mat
COMPARING matnr.
*endif.
REFRESH i_mat1.
CLEAR i_mat1.
populating material no and dscription .
SELECT matnr
maktx FROM makt
INTO TABLE i_mat1
FOR ALL ENTRIES IN i_mat
WHERE matnr = i_mat-matnr.
SELECT vbeln
posnr
parvw
kunnr
FROM vbpa
INTO TABLE i_vbpa
FOR ALL ENTRIES IN i_vbap
WHERE vbeln = i_vbap-vbeln .
SORT i_vbap BY vbeln posnr.
REFRESH i_tvbpa.
REFRESH i_tpartf.
CLEAR i_tpartf.
*FOR FETCHING UNIQUE PARTNER FUNCTIONS
LOOP AT i_vbpa.
i_tpartf-parvw = i_vbpa-parvw.
APPEND i_tpartf.
ENDLOOP.
SORT i_tpartf BY parvw.
DELETE ADJACENT DUPLICATES FROM i_tpartf
COMPARING parvw.
SELECT spras
parvw
vtext
FROM tpart
INTO TABLE i_tvbpa
FOR ALL ENTRIES IN i_tpartf
WHERE parvw = i_tpartf-parvw AND spras = sy-langu.
IF NOT i_vbap[] IS INITIAL.
SELECT vbeln
posnr
etenr
ettyp
lfrel
edatu
FROM vbep
INTO TABLE i_vbep
FOR ALL ENTRIES IN i_vbap
WHERE vbeln = i_vbap-vbeln.
ENDIF.
SORT i_vbap BY vbeln posnr.
to fetch data from internal table to print report
LOOP AT i_vbak.
WRITE:/1 sy-vline,10 v_chkbox AS CHECKBOX, i_vbak-vbeln,28
sy-vline,
30 i_vbak-erdat,48 sy-vline,
50 i_vbak-vkorg, 132 sy-vline.
ENDLOOP.
ULINE.
ENDFORM. " SELECT_HEADERDATA
*& Form ZF_SELECT_DETAILS
SUBROUTINE FOR DISPLAYING SELECTED ITEM DETAILS DATA
--> p1 text
<-- p2 text
FORM zf_select_details .
vflag = 0.
WRITE:/1 sy-vline,10 text-006 COLOR 3,28 sy-vline,
30 text-007 COLOR 3, 48 sy-vline,
50 text-008 COLOR 3, 68 sy-vline,
70 text-022 COLOR 3, 132 sy-vline.
ULINE.
CLEAR i_selvbap.
CLEAR i_final.
REFRESH i_selvbap.
REFRESH i_final.
CLEAR i_mat1.
vnline = 7.
DO.
READ LINE vnline FIELD VALUE i_vbak-vbeln v_chkbox.
" READING LINES FROM BASIC LIST.
IF sy-subrc <> 0. " no lines read.
EXIT.
ENDIF.
IF v_chkbox = 'X'.
" checking of selected items from basic list.
*alpha conversion function - During conversion from the external to the
*internal format, the system checks to see
*if input is purely nummeric or not ,if not all spaces to the left of
*the value are filled with zeroes ('0').
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = i_vbak-vbeln
IMPORTING
output = i_selvbap-vbeln.
APPEND i_selvbap.
" appending values from header line to body.
flag = flag + 1.
" TO CHECK VALUE OF CHECKBOX.
CLEAR i_vbak.
" clearing of header line after appending.
ENDIF.
vnline = vnline + 1.
ENDDO.
IF flag <> 0.
CLEAR i_final.
CHECK NOT i_selvbap[] IS INITIAL.
LOOP AT i_selvbap.
LOOP AT i_vbap WHERE vbeln = i_selvbap-vbeln.
READ TABLE i_mat1 WITH KEY matnr = i_vbap-matnr BINARY SEARCH.
IF sy-subrc = 0.
i_final-vbeln = i_vbap-vbeln.
i_final-posnr = i_vbap-posnr.
i_final-matnr = i_vbap-matnr.
i_final-maktx = i_mat1-maktx.
APPEND i_final.
CLEAR i_mat1.
ENDIF.
ENDLOOP.
CLEAR i_selvbap.
CLEAR i_vbap.
CLEAR i_final.
ENDLOOP.
ENDIF.
IF flag = 0.
MESSAGE e005.
ENDIF.
to fetch data from internal table to print report
LOOP AT i_final.
WRITE:/1 sy-vline,10 v_chkbox1 AS CHECKBOX,i_final-vbeln,28 sy-vline
30 i_final-posnr, 48 sy-vline,
50 i_final-matnr, 68 sy-vline,
70 i_final-maktx,
132 sy-vline.
ENDLOOP.
ULINE.
ENDFORM. " ZF_SELECT_DETAILS
*& Form ZF_TOLS
text
--> p1 text
<-- p2 text
FORM zf_tols .
*printing header of secondary list
ULINE.
WRITE:/10 text-023,20 text-001 COLOR 4, 45 text-019 COLOR 4.
WRITE: 80 text-024,90 sy-datum .
WRITE:/10 text-025,20 text-027,80 text-026,90 sy-pagno.
WRITE:/.
ULINE.
ENDFORM. " ZF_TOLS
*& Form ZF_TOP
text
--> p1 text
<-- p2 text
FORM zf_top .
*printing header of basic list
ULINE.
WRITE:/10 text-023,20 text-001 COLOR 4 ,45 text-002 COLOR 4.
WRITE: 80 text-024, 90 sy-datum.
WRITE:/10 text-025,20 text-027,80 text-026,90 sy-pagno.
ULINE.
WRITE:/1 sy-vline, 10 text-003 COLOR 3 ,28 sy-vline,
30 text-004 COLOR 3 ,48 sy-vline,
50 text-005 COLOR 3 ,132 sy-vline.
ULINE.
ENDFORM. " ZF_TOP
*& Form ZF_PARTNERDETAILS
SUBROUTINE FOR DISPLAYING SELECTED PARTNER DETAILS DATA
--> p1 text
<-- p2 text
FORM zf_partnerdetails .
IF vflag = 1.
WRITE:/1 sy-vline,10 text-016 COLOR 3,28 sy-vline,
30 text-017 COLOR 3,48 sy-vline,
30 text-018 COLOR 3,48 sy-vline,
70 text-021 COLOR 3, 132 sy-vline.
ULINE.
CLEAR i_selvbpa.
REFRESH i_selvbpa.
" clearing work area and body of internal tables
REFRESH i_finalpd.
vnline = 7.
DO.
CLEAR i_selvbpa.
READ LINE vnline FIELD VALUE i_vbak-vbeln v_chkbox.
" READING LINES FROM BASIC LIST.
IF sy-subrc <> 0.
" NO LINES READ
EXIT.
ENDIF.
IF v_chkbox = 'X'.
" if any value is selected
*converts any number into a string fill with zeroes, with the number at
*the extreme right.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = i_vbak-vbeln
IMPORTING
output = i_selvbpa-vbeln.
APPEND i_selvbpa.
CLEAR i_vbak.
flag = flag + 1.
ENDIF.
vnline = vnline + 1.
ENDDO.
IF flag <> 0.
CHECK NOT i_selvbpa[] IS INITIAL.
LOOP AT i_selvbpa.
LOOP AT i_vbpa WHERE vbeln = i_selvbpa-vbeln.
READ TABLE i_tvbpa WITH KEY parvw = i_vbpa-parvw BINARY SEARCH
IF sy-subrc = 0..
i_finalpd-vbeln = i_vbpa-vbeln.
i_finalpd-posnr = i_vbpa-posnr.
i_finalpd-parvw = i_vbpa-parvw.
i_finalpd-vtext = i_tvbpa-vtext.
APPEND i_finalpd.
CLEAR i_tvbpa.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.
IF flag = 0.
MESSAGE e005.
ENDIF.
LOOP AT i_finalpd.
WRITE:/1 sy-vline,10 i_finalpd-vbeln, 28 sy-vline,
30 i_finalpd-posnr, 48 SY-VLINE,
30 i_finalpd-parvw, 48 sy-vline,
70 i_finalpd-vtext, 132 sy-vline.
ENDLOOP.
ULINE.
ENDIF.
ENDFORM. " ZF_PARTNERDETAILS
*& Form ZF_SCHEDULEDATA
SUBROUTINE FOR DISPLAYING SELECTED ITEM SCHEDULE DATA
--> p1 text
<-- p2 text
FORM zf_scheduledata .
vflag = 0.
WRITE:/1 sy-vline,10 text-009 COLOR 3,18 sy-vline,
20 text-011 COLOR 3,38 sy-vline,
40 text-012 COLOR 3,58 sy-vline,
60 text-013 COLOR 3,78 sy-vline,
80 text-020 COLOR 3,98 sy-vline,
100 text-015 COLOR 3,132 sy-vline.
ULINE.
CLEAR i_selvbep.
REFRESH i_selvbep.
vnline1 = 5.
CLEAR flag.
CLEAR i_final.
REFRESH i_finalsd.
DO.
READ LINE vnline1 FIELD VALUE i_final-vbeln v_chkbox1 i_final-posnr
. " READING LINES FROM BASIC LIST.
IF sy-subrc <> 0.
EXIT.
ENDIF.
IF v_chkbox1 = 'X'.
*converts any number into a string fill with zeroes, with the number at
*the extreme right
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = i_final-vbeln
IMPORTING
output = i_selvbep-vbeln.
i_selvbep-posnr = i_final-posnr.
APPEND i_selvbep.
CLEAR i_final.
flag = flag + 1.
ENDIF.
vnline1 = vnline1 + 1.
ENDDO.
IF flag <> 0.
CHECK NOT i_selvbep[] IS INITIAL.
LOOP AT i_selvbep.
LOOP AT i_vbep WHERE vbeln = i_selvbep-vbeln AND posnr =
i_selvbep-posnr.
i_finalsd-vbeln = i_vbep-vbeln.
i_finalsd-posnr = i_vbep-posnr.
i_finalsd-etenr = i_vbep-etenr.
i_finalsd-ettyp = i_vbep-ettyp.
i_finalsd-lfrel = i_vbep-lfrel.
i_finalsd-edatu = i_vbep-edatu.
APPEND i_finalsd.
CLEAR i_selvbep.
CLEAR i_vbep.
CLEAR i_finalsd.
ENDLOOP.
ENDLOOP.
ENDIF.
IF flag = 0.
MESSAGE e005.
ENDIF.
LOOP AT i_finalsd.
WRITE:/1 sy-vline,10 i_finalsd-vbeln,18 sy-vline,
20 i_finalsd-posnr, 38 sy-vline,
40 i_finalsd-etenr, 58 sy-vline,
60 i_finalsd-ettyp, 78 sy-vline,
80 i_finalsd-lfrel, 98 sy-vline,
100 i_finalsd-edatu,132 sy-vline.
CLEAR i_finalsd.
ENDLOOP.
ULINE.
ENDFORM. " ZF_SCHEDULEDATA
*& Form ZF_PARTNERDETAILS1
text
--> p1 text
<-- p2 text
FORM zf_partnerdetails1 .
vflag = 1.
WRITE:/1 sy-vline,10 text-016 COLOR 3,18 sy-vline,
20 text-017 COLOR 3,38 sy-vline,
40 text-018 COLOR 3,58 sy-vline,
60 text-021 COLOR 3,78 sy-vline,
132 sy-vline.
ULINE.
CLEAR i_selvbpa1.
REFRESH i_selvbpa1.
REFRESH i_finalpd1.
vnline1 = 7.
DO.
CLEAR I_SELVBEP.
READ LINE vnline1 FIELD VALUE i_final-vbeln v_chkbox1 i_final-posnr
. " READING LINES FROM BASIC LIST.
IF sy-subrc <> 0.
EXIT.
ENDIF.
IF v_chkbox1 = 'X'.
*converts any number into a string fill with zeroes, with the number at
*the extreme right
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = i_final-vbeln
IMPORTING
output = i_selvbpa1-vbeln.
i_selvbpa1-posnr = i_final-posnr.
APPEND i_selvbpa1.
CLEAR i_final.
flag = flag + 1.
ENDIF.
vnline1 = vnline1 + 1.
ENDDO.
IF flag <> 0.
CLEAR i_vbpa.
CLEAR i_finalpd1.
CHECK NOT i_selvbpa1[] IS INITIAL.
LOOP AT i_selvbpa1.
LOOP AT i_vbpa WHERE vbeln = i_selvbpa1-vbeln.
CLEAR i_finalpd1.
IF sy-subrc = 0.
i_finalpd1-vbeln = i_vbpa-vbeln.
IF i_vbpa-posnr = 0 OR i_vbpa-posnr = ''.
i_finalpd1-parvw1 = 'NO DATA EXISTS'.
ELSE.
i_finalpd1-posnr = i_vbpa-posnr.
i_finalpd1-parvw = i_vbpa-parvw.
i_finalpd1-vtext = i_vbpa-vtext.
i_finalpd1-kunnr = i_vbpa-kunnr.
ENDIF.
APPEND i_finalpd1.
IF i_finalpd1-vbeln = i_selvbpa1-vbeln.
EXIT.
ENDIF.
CLEAR i_vbpa.
CLEAR i_finalpd1.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.
IF flag = 0.
MESSAGE e005.
ENDIF.
fetching data from internal table for printing.
LOOP AT i_finalpd1.
WRITE:/1 sy-vline,10 i_finalpd1-vbeln,18 sy-vline,
20 I_FINALPD1-POSNR, 38 SY-VLINE,
40 i_finalpd1-parvw1,
58 SY-VLINE,
60 i_finalpd1-vtext,
78 SY-VLINE,
80 i_finalpd1-kunnr,
132 sy-vline.
ENDLOOP.
ULINE.
ENDFORM. " ZF_PARTNERDETAILS1
2nd is :-
REPORT Z8NB_SHA10_1
NO STANDARD PAGE HEADING
LINE-COUNT 30
LINE-SIZE 170
MESSAGE-ID Z8NBSHADOW.
T A B L E D E C L A R A T I O N *
TABLES : LIKP. " Delivery Header.
T Y P E D E C L A R A T I O N *
**-- Type decleration for Delivery Header
TYPES : BEGIN OF T_LIKP,
VBELN LIKE LIKP-VBELN, " Delivery Number
ERDAT LIKE LIKP-ERDAT, " Date on which record was craeted
KUNNR LIKE LIKP-KUNNR, " Sold-to-party
KUNAG LIKE LIKP-KUNAG, " Ship-to-party
TRMTYP LIKE LIKP-TRMTYP, " Means of transport
END OF T_LIKP.
**-- Type decleration for Delivery Items
TYPES : BEGIN OF T_LIPS,
VBELN LIKE LIPS-VBELN, " Delivery Number
POSNR LIKE LIPS-POSNR, " Delivery Item Number
MATNR LIKE LIPS-MATNR, " Material Number
LFIMG LIKE LIPS-LFIMG , " DELIVERED QTY
MEINS LIKE LIPS-MEINS, " Unit of Measurement
BRGEW LIKE LIPS-BRGEW, " Gross Weight
GEWEI LIKE LIPS-GEWEI, " Weight Unit
VOLUM LIKE LIPS-VOLUM, " Volumn
VOLEH LIKE LIPS-VOLEH, " Volumn Unit
END OF T_LIPS.
**-- Type decleration for Customer Details
TYPES : BEGIN OF T_KNA1,
KUNNR LIKE KNA1-KUNNR, " Customer Number
NAME1 LIKE KNA1-NAME1, " Name1
NAME2 LIKE KNA1-NAME2, " Name2
STRAS LIKE KNA1-STRAS, " House/ Street Number
REGIO LIKE KNA1-REGIO, " Region
ORT01 LIKE KNA1-ORT01, " City
LAND1 LIKE KNA1-LAND1, " Country Key
TELF1 LIKE KNA1-TELF1, " First Telephone Number
END OF T_KNA1.
**-- Type decleration for Partner Function
TYPES : BEGIN OF T_KNVP,
KUNNR LIKE KNVP-KUNNR, " Customer Number
PARVW LIKE KNVP-PARVW, " Partner Function
KUNN2 LIKE KNVP-KUNN2, " Cust no of business partner
END OF T_KNVP.
**-- Type decleration for Shipment Header
TYPES : BEGIN OF T_VTTK,
TKNUM LIKE VTTK-TKNUM, " Shipment Number
TNDR_CRNM LIKE VTTK-TNDR_CRNM, " Carrier
END OF T_VTTK.
**-- Type decleration for Shipment Item
TYPES : BEGIN OF T_VTTP,
TKNUM LIKE VTTP-TKNUM, " Shipment Number
VBELN LIKE VTTP-VBELN, " Order Number
END OF T_VTTP.
**-- Type decleration for Material Description
TYPES : BEGIN OF T_MAKT,
MATNR LIKE MAKT-MATNR, " Material Number
MAKTX LIKE MAKT-MAKTX, " Material Description
END OF T_MAKT.
**-- Type decleration for Final table containing all item details
TYPES : BEGIN OF T_FINAL,
VBELN LIKE LIPS-VBELN, " Delivery Number
POSNR LIKE LIPS-POSNR, " Delivery Item Number
MATNR LIKE LIPS-MATNR, " Material Number
LFIMG LIKE LIPS-LFIMG , " DELIVERED QTY
MEINS LIKE LIPS-MEINS, " Unit of Measurement
BRGEW LIKE LIPS-BRGEW, " Gross Weight
GEWEI LIKE LIPS-GEWEI, " Weight Unit
VOLUM LIKE LIPS-VOLUM, " Volumn
VOLEH LIKE LIPS-VOLEH, " Volumn Unit
MAKTX LIKE MAKT-MAKTX, " Material Description
END OF T_FINAL.
C O N S T A N T D E C E L E R A T I O N *
CONSTANTS: C_RE(4) TYPE C VALUE 'RE', "Bill-to-party
C_EQ(4) TYPE C VALUE 'EQ', "Equal To
C_I(2) TYPE C VALUE 'I'. "Inclusion
V A R I A B L E D E C E L E R A T I O N *
DATA : V_SUM TYPE LIPS-LFIMG, "For calculating total of Quantity.
V_SUM_FINAL TYPE LIPS-LFIMG, "For displaying total
V_DESC TYPE C LENGTH 20. "Storing Description
I N T E R N A L D E C L A R A T I O N *
**-- Internal table for delivery header data
DATA: IT_LIKP TYPE STANDARD TABLE OF T_LIKP WITH HEADER LINE,
**-- Internal table for delivery item data
IT_LIPS TYPE STANDARD TABLE OF T_LIPS WITH HEADER LINE,
**-- Internal table for bill-to-party details
IT_KNA1 TYPE STANDARD TABLE OF T_KNA1 WITH HEADER LINE,
**-- Internal table to store partner function data
IT_KVNP TYPE STANDARD TABLE OF T_KNVP WITH HEADER LINE,
**-- Internal table for shipment header data
IT_VTTK TYPE STANDARD TABLE OF T_VTTK WITH HEADER LINE,
**-- Internal table for shipmant item data
IT_VTTP TYPE STANDARD TABLE OF T_VTTP WITH HEADER LINE,
**-- Internal table for material description
IT_MAKT TYPE STANDARD TABLE OF T_MAKT WITH HEADER LINE,
**-- Internal table for final item details
IT_FINAL TYPE STANDARD TABLE OF T_FINAL WITH HEADER LINE,
**-- Temporary internal table for Shipment Item
IT_VTTP_TEMP TYPE STANDARD TABLE OF T_VTTP WITH HEADER LINE,
**-- Temporary internal table for delivery item
IT_LIPS_TEMP TYPE STANDARD TABLE OF T_LIPS WITH HEADER LINE,
**-- Temporary internal table for delivery header
IT_LIKP_TEMP TYPE STANDARD TABLE OF T_LIKP WITH HEADER LINE.
**-- Ranges for Inquiry/Quotation
RANGES R_CUSTOMER FOR KNA1-KUNNR.
S E L C T I O N S C R E E N *
**-- Selection screen containing Delivery no as the obligatory field
SELECTION-SCREEN BEGIN OF BLOCK CHARLY WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : S_VBELN FOR LIKP-VBELN OBLIGATORY.
SELECTION-SCREEN END OF BLOCK CHARLY.
I N I T I A L I Z A T I O N *
INITIALIZATION.
**-- Clear all internal tables
CLEAR : IT_LIKP,
IT_LIPS,
IT_KNA1,
IT_KVNP,
IT_VTTK,
IT_VTTP,
IT_MAKT,
IT_FINAL,
IT_VTTP_TEMP,
R_CUSTOMER,
V_SUM,
V_SUM_FINAL,
V_DESC.
**-- Refresh all internal tables
REFRESH : IT_LIKP,
IT_LIPS,
IT_KNA1,
IT_KVNP,
IT_VTTK,
IT_VTTP,
IT_MAKT,
IT_FINAL,
IT_VTTP_TEMP,
R_CUSTOMER.
A T S E L E C T I O N S C R E E N ( V A L I D A T I O N S ) *
AT SELECTION-SCREEN.
**-- Check the sales order number exists in the database table or not
SELECT SINGLE VBELN
FROM LIKP
INTO IT_LIKP
WHERE VBELN IN S_VBELN.
**-- If no single data selected display error message.
IF SY-SUBRC <> 0.
MESSAGE E000.
ENDIF.
S T A R T O F S E L E C T I O N *
START-OF-SELECTION.
**-- Fetch data from the transprant tables into the internal tables
PERFORM GET_DATA.
**-- Final table for complete item data
PERFORM FINAL_DATA.
E N D O F S E L E C T I O N *
END-OF-SELECTION.
**-- Display of Delivery Note
PERFORM DISPLAY_DATA.
*& Form GET_DATA
text
FORM GET_DATA .
**-- Fetch data from Delivery Header Table ( LIKP )
SELECT VBELN
ERDAT
KUNNR
KUNAG
TRMTYP
FROM LIKP
INTO TABLE IT_LIKP
WHERE VBELN IN S_VBELN
ORDER BY VBELN.
**-- Check SY_SUBRC.
IF SY-SUBRC <> 0 .
ENDIF.
**-- If record is present in IT_LIKP internal table then fetch data from
**-- Delivery Item table (LIPS)
IF NOT IT_LIKP[] IS INITIAL.
SELECT VBELN
POSNR
MATNR
LFIMG
MEINS
BRGEW
GEWEI
VOLUM
VOLEH
FROM LIPS
INTO TABLE IT_LIPS
FOR ALL ENTRIES IN IT_LIKP
WHERE VBELN = IT_LIKP-VBELN.
**-- If record found, sort the internal table on delivery no and item no
IF SY-SUBRC = 0.
SORT IT_LIPS BY VBELN POSNR.
ENDIF.
ENDIF.
**-- If record present in IT_LIPS internal table then fetch data from
**-- Shipment Item Table where delivery number is same
IF NOT IT_LIPS[] IS INITIAL.
SELECT TKNUM
VBELN
FROM VTTP
INTO TABLE IT_VTTP
FOR ALL ENTRIES IN IT_LIPS
WHERE VBELN = IT_LIPS-VBELN.
**-- If record found, sort the internal table on shipment no
IF SY-SUBRC = 0.
SORT IT_VTTP BY TKNUM.
ENDIF.
ENDIF.
**-- Move records in IT_LIPS to an temporary internal table for
**-- removing the duplicate entries of material number.
IT_LIPS_TEMP[] = IT_LIPS[].
SORT IT_LIPS_TEMP BY MATNR.
DELETE ADJACENT DUPLICATES FROM IT_LIPS_TEMP
COMPARING MATNR.
IF NOT IT_LIPS_TEMP[] IS INITIAL.
**-- Fetch Material description from MAKT for all materials in
**-- IT_LIPS_TEMP
SELECT MATNR
MAKTX
INTO TABLE IT_MAKT
FROM MAKT FOR ALL ENTRIES IN IT_LIPS_TEMP
WHERE MATNR = IT_LIPS_TEMP-MATNR.
**-- If record found, sort the internal table on Matreial No.
IF SY-SUBRC = 0.
SORT IT_MAKT BY MATNR.
ENDIF.
ENDIF.
**-- Transfer data in shipment item internal table to a temporary
**-- internal table to delete duplicate entries of shipment number.
IT_VTTP_TEMP[] = IT_VTTP[].
SORT IT_VTTP_TEMP BY TKNUM.
DELETE ADJACENT DUPLICATES FROM IT_VTTP_TEMP
COMPARING TKNUM.
**-- If record found in IT_VTTP_TEMP then fetch shipment no and carrier
**--from Shipment Header Table(VTTK).
IF NOT IT_VTTP_TEMP[] IS INITIAL.
SELECT TKNUM
TNDR_CRNM
FROM VTTK
INTO TABLE IT_VTTK
FOR ALL ENTRIES IN IT_VTTP_TEMP
WHERE TKNUM = IT_VTTP_TEMP-TKNUM.
**-- If record found, sort the internal table on shipment no
IF SY-SUBRC = 0.
SORT IT_VTTK BY TKNUM.
ENDIF.
ENDIF.
**-- Move the data of IT_LIKP to an internal table to remove the
**-- duplicate entries of sold-to-party number.
IT_LIKP_TEMP[] = IT_LIKP[].
SORT IT_LIKP_TEMP BY KUNAG.
DELETE ADJACENT DUPLICATES FROM IT_LIKP_TEMP
-
Problem in delete adjecent duplicates
Hi All,
i have a problem in delete adjacent duplicate in an internal table .
when i use it i want that the records which are getting doubled to be removed
but i also want that if the value in that field is empty for which i am comparing , to be ignored means i dont want the records
to be deleted in which the field value is empty for which i am comparing.
snippet of my code
delete ADJACENT DUPLICATES FROM xkomv COMPARING KSCHL.
so if theere is no value in KSCHL THAT RECORD NOT TO BE DELETED .
waiting for your reply..
Thanks in advanceTry the following,
"delete ADJACENT DUPLICATES FROM xkomv COMPARING KSCHL.
Before using the above statement do the following,
u201C decalare a temporary table for u2018xkomvu2019 say u2018t_xkomvu2019, and copy the data.
Refresh t_xkomv[].
t_xkomv[] = xkomv[].
Delete t_xkomv where KSCHL <> u2018 u2018.
Delete xkomv where KSCHL = u2018 u2018.
u201C Sort xkomv and then use delete adjacent duplicates.
And after this append data from t_xkomv to xkomv.
Hope it helps you,
Regards,
Abhijit G. Borkar -
How to collect adjacent duplicates ?
Hi,
duplicte values can be deleted using 'DELETE ADJACENT DUPLICATES'. But how to collect the field values that are duplicated into another internal table.Hi Sharmila,
You can use the statement 'FIND IN TABLE itab ' for your purpose. Have a look at following code.
Ex:
TYPES:
BEGIN OF ty_itab,
name TYPE char10,
id TYPE numc5,
END OF ty_itab.
DATA:
itab TYPE STANDARD TABLE OF ty_itab,
itab2 TYPE match_result_tab,
itab3 TYPE STANDARD TABLE OF ty_itab,
wa_itab TYPE ty_itab.
CLEAR wa_itab.
wa_itab-name = 'Test'.
wa_itab-id = 1.
APPEND wa_itab TO itab.
CLEAR wa_itab.
wa_itab-name = 'Test'.
wa_itab-id = 1.
APPEND wa_itab TO itab.
CLEAR wa_itab.
wa_itab-name = 'Test'.
wa_itab-id = 1.
APPEND wa_itab TO itab.
CLEAR wa_itab.
wa_itab-name = 'Test2'.
wa_itab-id = 2.
APPEND wa_itab TO itab.
CLEAR wa_itab.
wa_itab-name = 'Test2'.
wa_itab-id = 2.
APPEND wa_itab TO itab.
CLEAR wa_itab.
wa_itab-name = 'Test3'.
wa_itab-id = 3.
APPEND wa_itab TO itab.
CLEAR wa_itab.
wa_itab-name = 'Test4'.
wa_itab-id = 4.
APPEND wa_itab TO itab.
CLEAR wa_itab.
SORT itab.
Logic
LOOP AT itab INTO wa_itab.
AT NEW id.
FIND ALL OCCURRENCES OF wa_itab
IN TABLE itab
RESPECTING CASE
RESULTS itab2.
DESCRIBE TABLE itab2 LINES v_count.
v_count = v_count - 1.
IF NOT v_count IS INITIAL.
DO v_count TIMES.
APPEND wa_itab TO itab3.
ENDDO.
ENDIF.
CLEAR: wa_itab.
ENDAT.
ENDLOOP.
But you have to keep in mind that..the field which is used along with AT NEW statement should be
last one in your internal table so that it checks all the components left of that field for duplicates.
If you want any more help, you can get back to me.
Regards,
Jallu -
HI FRIENDS,
HAVE A LOOK ON THIS PROGRAM.
HERE THE HAD NOT SORTED BEFORE USING DELETE ADJACENT STATEMENT.BUT EVENTHOUGH IT IS WORKING
WHY....PLEASE TELL ME THE REASON .
DATA OFF TYPE I.
DATA: BEGIN OF LINE,
COL1 TYPE I,
COL2 TYPE C,
END OF LINE.
DATA ITAB LIKE STANDARD TABLE OF LINE
WITH NON-UNIQUE KEY COL2.
LINE-COL1 = 1. LINE-COL2 = 'A'. APPEND LINE TO ITAB.
LINE-COL1 = 1. LINE-COL2 = 'A'. APPEND LINE TO ITAB.
LINE-COL1 = 1. LINE-COL2 = 'B'. APPEND LINE TO ITAB.
LINE-COL1 = 2. LINE-COL2 = 'B'. APPEND LINE TO ITAB.
LINE-COL1 = 3. LINE-COL2 = 'B'. APPEND LINE TO ITAB.
LINE-COL1 = 4. LINE-COL2 = 'B'. APPEND LINE TO ITAB.
LINE-COL1 = 5. LINE-COL2 = 'A'. APPEND LINE TO ITAB.
OFF = 0. PERFORM LIST.
DELETE ADJACENT DUPLICATES FROM ITAB COMPARING ALL FIELDS.
OFF = 14. PERFORM LIST.
DELETE ADJACENT DUPLICATES FROM ITAB COMPARING COL1.
OFF = 28. PERFORM LIST.
DELETE ADJACENT DUPLICATES FROM ITAB.Hi,
Now try this
DATA OFF TYPE I.
DATA: BEGIN OF LINE,
COL1 TYPE I,
COL2 TYPE C,
END OF LINE.
DATA ITAB LIKE STANDARD TABLE OF LINE
WITH NON-UNIQUE KEY COL2.
LINE-COL1 = 1. LINE-COL2 = 'A'. APPEND LINE TO ITAB.
LINE-COL1 = 1. LINE-COL2 = 'B'. APPEND LINE TO ITAB.
LINE-COL1 = 2. LINE-COL2 = 'B'. APPEND LINE TO ITAB.
LINE-COL1 = 1. LINE-COL2 = 'A'. APPEND LINE TO ITAB.
LINE-COL1 = 3. LINE-COL2 = 'B'. APPEND LINE TO ITAB.
LINE-COL1 = 4. LINE-COL2 = 'B'. APPEND LINE TO ITAB.
LINE-COL1 = 5. LINE-COL2 = 'A'. APPEND LINE TO ITAB.
OFF = 0. PERFORM LIST.
DELETE ADJACENT DUPLICATES FROM ITAB COMPARING ALL FIELDS.
OFF = 14. PERFORM LIST.
DELETE ADJACENT DUPLICATES FROM ITAB COMPARING COL1.
OFF = 28. PERFORM LIST.
DELETE ADJACENT DUPLICATES FROM ITAB
It will not work. The program you written was already sorted thats why it was working.
Regards,
Atish -
Hello everybody, I'm in a trouble so I've decided to post here.
I have an internal table with several duplicates, and I need to delete ALL of them.
I'm using this sentences:
SORT <table> BY <fields>.
DELETE ADJACENT DUPLICATES FROM <table> COMPARING <fields>.
After that, my table still has a record; and I want to delete ALL records with duplicates.
Can somebody help me??
Thanks a lot!DATA: contador TYPE i.
SORT t_datos BY connid.
Se declara otra tabla igual y se copian los datos
t_datos2[] = t_datos[].
Se recorre lap primera
LOOP AT t_datos.
CLEAR contador.
Se recorre la segunda tabla con el campo que queremos vigilar
LOOP AT t_datos2 WHERE connid = t_datos-connid.
Se incrementa el contador
ADD 1 TO contador.
Si hay más de un registro repetido para el mismo campo
(En este caso CONNID)
IF contador GT 1.
Se borran todas las entradas
DELETE t_datos2 WHERE connid = t_datos-connid.
ENDIF. " contador GT 1
ENDLOOP. " t_datos2
ENDLOOP. " t_datos1
Restauramos t_datos.
t_datos[] = t_datos2[]. -
Hi Experts,
I wonder why delete adjacent duplicate sometimes
doesn't work and sometimes doesn't. Any idea?
Thanks in advance.
Regards,
Rosehi
chk this
DELETE ADJACENT DUPLICATES FROM itab.
Extras:
1. ... COMPARING f1 f2 ...
2. ... COMPARING ALL FIELDS
Effect
Deletes adjacent duplicate entries from the internal table itab. If there are n duplicate entries in succession, the first entry is retained, and the following n-1 entries are deleted.
Two lines are regarded as duplicates if their keys are identical.
The Return Code is set as follows:
SY-SUBRC = 0:
At least one duplicate was found, and at least one entry was deleted.
SY-SUBRC = 4:
No duplicates found, no entries deleted.
Addition 1
... COMPARING f1 f2 ...
Effect
Two lines of the internal table itab are regarded as duplicates if they have identical contents in the fields f1, f2, ...
Addition 2
... COMPARING ALL FIELDS
Effect
Two lines of the internal table are regarded as duplicates if all of their field contents are identical.
<b>Notes
The DELETE ADJACENT DUPLICATES statement works particularly well if you have sorted the internal table itab according to the fields that you want to compare when looking for duplicates. In this case, deleting adjacent duplicates is the same as deleting all duplicates. The direction of the sort is irrelevant.
If you do not know a comparison expression until runtime, you can specify it dynamically as the contents of the field name in the expression COMPARING ... (name) .... If name is empty at runtime, the comparison expression is ignored. If name contains an invalid component name, a runtime error occurs.
You can further restrict comparison expressions - both static and dynamic - by specifying offset and length.
Note
Performance:
When you delete a line of an internal table, index maintenance costs are incurred. These depend on the index of the table. The runtime is independent of the width of the table line.
Deleting a line from the middle of an internal table with 200 entries usually requires around 10 msn (standardized microseconds).
When you delete a set of entries using "DELETE itab FROM idx1 TO idx2." or "DELETE itab WHERE ...", index maintenance costs are only incurred once. This means that it is considerably more efficient than deleting entries in a LOOP.
If you want to delete adjacent duplicate entries from an internal table, use the variant " DELETE ADJACENT DUPLICATES FROM itab." instead of a LOOP construction.</b>
Maybe you are looking for
-
I can no longer change the volume, anyone know why?
when i use the volume keys nothing happens. its blocked i cant change it in system preference eather i can mute or have the sound at the loudest. can any one tell me how to fix this?
-
How do I access a library already on an external drive, from a new computer?
I moved my library from an old hard drive onto a larger external drive, following the online instructions and then continued to use the old machine to access the library. I now want to swap computers completely (the library can stay where it is) but
-
Hi All, I have a view object with a query that uses a bind variable. I drag the data control onto my .jsf page to create a table. I create a query method on a view scope bean. The query method uses the contents of one of the bean's attributes to set
-
How to change schedule line fields when save sales documents in va01/va02
Hi, every Experts, I want to change schedule line when save the sales documents in va01 or va02, such as change delivery block or schedule line category. of course, can use user exit USEREXIT_SAVE_DOCUMENT_PREPARE, but I do not know to use this user
-
Updating An Existing iWeb Site?
So, i have a great site, and I'm scratching my head as to figure out how to update my site using iWeb without REPUBLISHING the entire site again. I've searched all throughout iWeb Help but I cannot seem to find anything useful. Help Anyone?