Цикл at и отношение sy-subrc

У меня проблема во время выполнения цикла.

У меня петля:

loop at lt assigning <ls> where <condition> (im using loop instead of reaf table coz i need to use GE and LE logical statements)
     if sy-subrc = 0.
      result = <ls>-FIELD.
     else.
      result = ''.
     endif.
endloop.

Так что проблема в том, что проверка sy-subrc пропускается. Когда цикл выполняется и не находит запись (sy-subrc = 4), он не назначает '' в поле результата и вместо этого сохраняет начальный оператор.

В чем проблема?


person Kvazzar    schedule 06.12.2015    source источник
comment
Хорошо, думаю, я решил проблему))   -  person Kvazzar    schedule 06.12.2015
comment
Базовая информатика, подожди. НЕТ, совсем нет, базовое логическое мышление. Но хорошо, что Вы решили это сами. Это поможет запомнить извлеченный урок.   -  person icbytes    schedule 07.12.2015


Ответы (1)


Код возврата устанавливается после цикла (то же самое для select и других структур цикла). Итак, вам нужно что-то вроде:

 loop at lt assigning <ls> where <condition>"(im using loop instead of reaf table coz i need to use GE and LE logical statements)
 endloop.
 if sy-subrc = 0.
  result = <ls>-FIELD.
 else.
  result = ''.
 endif.

В этом случае вы должны использовать read-оператор (вы упоминаете проблему с GE / LE - это может стоить другого вопроса).

Теперь вы перебираете все записи.

В качестве альтернативы вы можете остановиться после первой записи:

result = ''. "Initialize for not-found-entry.
loop at lt assigning <ls> where <condition>.
  result = <ls>-FIELD. "Take the found entry
  exit. "Stop after first entry
endloop.

Без exit вы получите последнюю запись. Если порядок релевантный, вы также можете добавить релевантный вид.

person knut    schedule 06.12.2015