ABAP函数模块LOOP无匹配结果时ELSE分支未触发问题求助
解决ABAP LOOP无匹配记录时ELSE逻辑不触发的问题
你的核心问题是LOOP与ELSE的语法结构错误:ABAP中LOOP AT ... ELSE ... ENDLOOP是完整的控制结构,ELSE必须直接跟随循环体,不能被多余的IF/ENDIF打断。你的代码错误地将ELSE嵌套在无对应IF的ENDIF之后,导致循环无匹配时无法触发错误提示逻辑。
修正方案
- 移除循环体末尾多余的
ENDIF(该语句无对应IF,属于语法冗余) - 确保
ELSE直接属于LOOP结构,与ENDLOOP正确配对
修正后的完整代码
LOOP AT it_p0015 INTO ls_p0015 WHERE subty = iv_sty AND betrg = iv_amount AND endda = iv_end_date AND begda = iv_start_date. CALL FUNCTION 'ENQUEUE_EPPRELE' EXPORTING pernr = iv_employeepernr "is_request-employeepernr infty = '0015' subty = iv_sty EXCEPTIONS foreign_lock = 1 system_failure = 2 OTHERS = 3. IF sy-subrc <> 0. RETURN. ENDIF. CALL FUNCTION 'HR_INFOTYPE_OPERATION' " Delete IT0015 EXPORTING infty = ls_p0015-infty number = ls_p0015-pernr subtype = ls_p0015-subty validityend = iv_end_date validitybegin = iv_start_date record = ls_p0015 operation = 'DEL' IMPORTING return = ls_return. IF ls_return IS NOT INITIAL. APPEND ls_return TO et_message. ELSE. ls_return-type = 'S'. ls_return-message = 'Infotype 0015 advance payment deduction deleted.'(010). APPEND ls_return TO et_message. ENDIF. CALL FUNCTION 'DEQUEUE_EPPRELE' EXPORTING pernr = iv_employeepernr infty = '0015' subty = iv_sty. ELSE. ls_return-type = 'E'. ls_return-message = 'No records found in infotype 0015.'(036). APPEND ls_return TO et_message. ENDLOOP. ENDFUNCTION
关键说明
- ABAP的
LOOP AT ... ELSE逻辑:当循环未找到任何匹配记录时,自动执行ELSE块;只要循环执行过一次,就不会进入ELSE分支 - 修正后,当
it_p0015中无符合WHERE条件的记录时,会触发错误提示并写入et_message
内容的提问来源于stack exchange,提问作者allscode
相关产品推荐
相关产品推荐

