Increment an integer
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 .
Related videos on Youtube
Ben
Updated on July 09, 2022Comments
-
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 almost 14 years...but if there is a more elegant way, I would be interested ;)
-
Ben almost 14 yearsThank you for the explaination. I'm sure I don't make this mistake again ;)
-
Marius over 10 yearsJust beware of loops within loops. Oh, and if you are looping with a
DO..TIMES x
, then the loop counter will beSY-INDEX
. Yes, ABAP is a terribly inconsistent language. -
Eric over 9 yearsSY-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.