Novic написал(а):
Определена как
data: begin of tab occurs 0,
field_1
...
...
data end of tab.
sy-subrc возращает 4.

Ну тогда всё правильно - используй как тепе подсказали вариант с where
Code:
MODIFY itab [FROM wa] TRANSPORTING f1 ... fn WHERE cond.
или
Code:
MODIFY itab [FROM wa] [INDEX idx] [TRANSPORTING f1 ... fn].
Просто у тебя используется стандартная таблица, у которой ключём является строка целиком и поэтому, возможно, оператор modify не может найти ту строку, которую требуется модифицировать.
Это в том случае, если ты не обрабатываеш таблицу в цикле LOOP.