Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Value should increase by comparing 2 fields.

Former Member
0 Likes
773

Hi,

I have a requirement,

This is nothing but Material and Serial no Combination. If same material and Serial number get repeats

no of repairs value should increase

For eg,  
 
       Prt no   Material no     Serial no   No of repairs
 
      #A0005    XYZ                ABC          1
      #A0006    XYZ                DCE          1
      #A0007   PQR                ABC          1
      #A0008   XYZ                 ABC          2

By default the repair value will be 1.

I have Material No and Serial no in my final table T_final.

I want to put a condition where it will let us know the if the Materail number is repated with Serial number so that it should add 1 and append the Number of repairs field.

Any suggestions will be appreciated.

Regards,

Kittu

Edited by: Kittu on Jun 11, 2009 9:27 AM

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
738

Try something like this

DATA :BEGIN OF ITAB OCCURS 10,
           PARTNO(6)  TYPE C,
           MATNR      TYPE MATNR,
           SERIAL     TYPE GERNR,
           REPAIR     TYPE I,
        END OF ITAB.
DATA : PRV_MATNR TYPE MATNR,
           PRV_SERIAL TYPE GERNR,
           LV_REPAIR          TYPE I,
           LV_TABIX       TYPE I.


CLEAR :PRV_MATNR,
       PRV_SERIAL,
       LV_REPAIR.
SORT  ITAB BY MATNR SERIAL.  "Sort table by material and serial
LOOP AT ITAB.                            
   LV_TABIX = SY-TABIX.
****If previous material number and serial are equal to currents
****increase repair else set repair = 1
   IF   PRV_MATNR = ITAB-MATNR
   AND PRV_SERIAL = ITAB-SERIAL.
    LV_REPAIR = LV_REPAIR + 1.
  ELSE.
    LV_REPAIR = 1.
  ENDIF.
  ITAB-REPAIR = LV_REPAIR.
  MODIFY ITAB INDEX LV_TABIX TRANSPORTING REPAIR. "modify table
 PRV_MATNR = ITAB-MATNR.   "set previous material
 PRV_SERIAL = ITAB-SERIAL.   "Set previous serial
ENDLOOP.

6 REPLIES 6
Read only

Former Member
0 Likes
738

Hi Kittu,

Sort your T_final containing these records by Part number descending.

Read table T_final with key Material no = Current record-Material no

Serial no = Current record-serial no.

if sy-subrc eq 0.

T_final-No of repairs = T_final-No of repairs + 1.

else.

T_final-No of repairs = 1.

endif.

Please acknowledge if this answers your question.

~Nanda

Read only

Former Member
0 Likes
738

Hi Kittu,

take one more internal table by taking Material no and Serial no

LOOP AT itab1.

itab2-material no = itab1-material no.

itab2-serial no = itab1-serial no.

APPEND itab2.

CLEAR itab2.

ENDLOOP.

IF NOT itab2[] IS INITIAL.

SORT itab2 BY material no serial no.

DELETE ADJACENT DUPLICATES FROM itab2 COMPARING material no serial no.

ENDIF.

LOOP AT itab2.

CLEAR v_num.

LOOP AT itab1 WHERE matrial NO = ITAB2-MATERIAL-NO AND

serial no = itab2-serial no.

v_num = v_num + 1.

itab1-no of repairs = v_num.

MODIFY itab1 INDEX sy-tabix.

ENDLOOP.

ENDLOOP.

endloop.

Regards,

Kumar Bandanadham

Edited by: Velangini Showry Maria Kumar Bandanadham on Jun 11, 2009 9:47 AM

Read only

Former Member
0 Likes
739

Try something like this

DATA :BEGIN OF ITAB OCCURS 10,
           PARTNO(6)  TYPE C,
           MATNR      TYPE MATNR,
           SERIAL     TYPE GERNR,
           REPAIR     TYPE I,
        END OF ITAB.
DATA : PRV_MATNR TYPE MATNR,
           PRV_SERIAL TYPE GERNR,
           LV_REPAIR          TYPE I,
           LV_TABIX       TYPE I.


CLEAR :PRV_MATNR,
       PRV_SERIAL,
       LV_REPAIR.
SORT  ITAB BY MATNR SERIAL.  "Sort table by material and serial
LOOP AT ITAB.                            
   LV_TABIX = SY-TABIX.
****If previous material number and serial are equal to currents
****increase repair else set repair = 1
   IF   PRV_MATNR = ITAB-MATNR
   AND PRV_SERIAL = ITAB-SERIAL.
    LV_REPAIR = LV_REPAIR + 1.
  ELSE.
    LV_REPAIR = 1.
  ENDIF.
  ITAB-REPAIR = LV_REPAIR.
  MODIFY ITAB INDEX LV_TABIX TRANSPORTING REPAIR. "modify table
 PRV_MATNR = ITAB-MATNR.   "set previous material
 PRV_SERIAL = ITAB-SERIAL.   "Set previous serial
ENDLOOP.

Read only

Former Member
0 Likes
738

Hi,

Try using CALL FUNCTION 'CTVB_COMPARE_TABLES'.

Regards

Srini

Read only

0 Likes
738

Hi,

try this..Instead of using loop within loop you can go for this....

LOOP AT intab INTO gs_details.

lv_count = lv_count + 1.

AT END OF matnr.

gs_total-serial = gs_details-serial.

gs_total-cov_total = lv_count.

APPEND gs_total TO gt_total.

CLEAR : gs_total,

lv_count,

gs_details.

ENDAT.

ENDLOOP.

Read only

kesavadas_thekkillath
Active Contributor
0 Likes
738

DATA:BEGIN OF itab OCCURS 0,
      matnr TYPE matnr,
      sernr TYPE qmel-serialnr,
      repairs TYPE i,
     END OF itab.


itab-matnr =   'XYZ'   . itab-sernr =   'ABC'. APPEND itab.
itab-matnr =   'XYZ'   . itab-sernr =   'DCE'. APPEND itab.
itab-matnr =   'PQR'   . itab-sernr =   'ABC'. APPEND itab.
itab-matnr =   'XYZ'   . itab-sernr =   'ABC'. APPEND itab.


SORT itab BY matnr sernr ASCENDING.

DATA:cnt TYPE i.

LOOP AT itab.
  AT NEW sernr.
    cnt = 1.
  ENDAT.
  itab-repairs = cnt.
  MODIFY itab TRANSPORTING repairs.
  cnt = cnt + 1.
ENDLOOP.