Increment an integer

31,073

Solution 1

You mean like:

ADD 1 to lv_id.

By the way, when you loop over an internal table, SY-TABIX has the loop counter.

Solution 2

You already answered the question yourself, but to make things a bit clearer:

variable + 1 

is an arithmetic expression - add 1 to the value of the variable.

variable+1

is an offset operation on a character variable. For example, if variable contains ABC, variable+1 is BC.

This can be especially confusing when dealing with NUMCs. For example, with variable = '4711', variable + 1 is evaluated to 4712, whereas variable+1 is '711' (a character sequence).

The error you saw occurred because it's not possible to perform the index operation on a non-character-like variable.

Solution 3

Uh, I got it. It's the f****** spaces...

lv_id = lv_id + 1

works...

Solution 4

Simple

DATA : gv_inc type I .

place this statement in loop

gv_inc = gv_inc + 1 .

Share:
31,073

Related videos on Youtube

Ben
Author by

Ben

Updated on July 09, 2022

Comments

  • Ben
    Ben almost 2 years

    Sometimes ABAP drives me crazy with really simple tasks such as incrementing an integer within a loop...

    Here's my try:

    METHOD test.
    
      DATA lv_id TYPE integer.
    
      lv_id = 1.
    
      LOOP AT x ASSIGNING <y>.
        lv_id = lv_id+1.
      ENDLOOP.
    
    ENDMETHOD.
    

    This results in the error message Field type "I" does not permit subfield access.

  • Ben
    Ben almost 14 years
    ...but if there is a more elegant way, I would be interested ;)
  • Ben
    Ben almost 14 years
    Thank you for the explaination. I'm sure I don't make this mistake again ;)
  • Marius
    Marius over 10 years
    Just beware of loops within loops. Oh, and if you are looping with a DO..TIMES x, then the loop counter will be SY-INDEX. Yes, ABAP is a terribly inconsistent language.
  • Eric
    Eric over 9 years
    SY-TABIX does not contain the loop counter, it contains the table index. These are often different values. For instance, if I write LOOP AT messages INTO msg WHERE type = 'E', the first time the loop actually runs might be on the fourth row, and the value of sy-tabix will be 4.

Related