在对程序具体跟踪到没条数据的时候,发现有少量的意向订单没有配置号,而导致传进函数的配置号参数为空,这个时候函数就一致运行不出来而占用系统内存导致。
解决方案:在取订单的配置号(VBAP-CUOBJ)的时候,加上非空的判断即可。
代码摘录如下:
DATA: l_cuobj LIKE vbap-cuobj .
REFRESH: it_cdhdr , it_pos_conf , pos_conf .
change_rec-neutr_charac = 'X' .
change_rec-neutr_value = '' .
change_rec-no_display = 'X' .
SELECT SINGLE cuobj
INTO l_cuobj
FROM vbap
WHERE vbeln = vbeln AND
posnr = posnr .
IF sy-subrc = 0 AND l_cuobj IS NOT INITIAL.
FREE: it_cdhdr,it_pos_conf,pos_conf.
CALL FUNCTION 'CUAB_DISPLAY_CD_CONFIGURATION'
EXPORTING
i_instance = l_cuobj
i_change_rec = change_rec
IMPORTING
e_tab_cdhdr = it_cdhdr
e_tab_pos_conf = it_pos_conf
EXCEPTIONS
no_data = 1
internal_error = 2
OTHERS = 3.
LOOP AT it_pos_conf INTO wa_pos_conf .
pos_conf = wa_pos_conf .
READ TABLE it_cdhdr INTO wa_cdhdr
WITH KEY changenr = wa_pos_conf .
IF sy-subrc = 0 .
MOVE-CORRESPONDING wa_cdhdr TO pos_conf .
ENDIF .
APPEND pos_conf .
ENDLOOP .
ENDIF .
解决方案:在取订单的配置号(VBAP-CUOBJ)的时候,加上非空的判断即可。
代码摘录如下:
DATA: l_cuobj LIKE vbap-cuobj .
REFRESH: it_cdhdr , it_pos_conf , pos_conf .
change_rec-neutr_charac = 'X' .
change_rec-neutr_value = '' .
change_rec-no_display = 'X' .
SELECT SINGLE cuobj
INTO l_cuobj
FROM vbap
WHERE vbeln = vbeln AND
posnr = posnr .
IF sy-subrc = 0 AND l_cuobj IS NOT INITIAL.
FREE: it_cdhdr,it_pos_conf,pos_conf.
CALL FUNCTION 'CUAB_DISPLAY_CD_CONFIGURATION'
EXPORTING
i_instance = l_cuobj
i_change_rec = change_rec
IMPORTING
e_tab_cdhdr = it_cdhdr
e_tab_pos_conf = it_pos_conf
EXCEPTIONS
no_data = 1
internal_error = 2
OTHERS = 3.
LOOP AT it_pos_conf INTO wa_pos_conf .
pos_conf = wa_pos_conf .
READ TABLE it_cdhdr INTO wa_cdhdr
WITH KEY changenr = wa_pos_conf .
IF sy-subrc = 0 .
MOVE-CORRESPONDING wa_cdhdr TO pos_conf .
ENDIF .
APPEND pos_conf .
ENDLOOP .
ENDIF .