iT邦幫忙

0

SAP ABAP - IF .... ENDIF問題

各位好

小弟在SAP中寫了一段程式,其中讀取資料的部份如下:

SELECT aufnr plnbez gamng gltrp rsnum FROM afko INTO TABLE it_afko WHERE aufnr = p_aufnr.

IF it_afko IS NOT INITIAL.
SELECT rsnum matnr erfmg erfme FROM resb INTO TABLE it_resb FOR ALL ENTRIES IN it_afko WHERE rsnum = it_afko-rsnum.
ENDIF.

進入debug模式測試時發現程式執行到"IF it_afko IS NOT INITIAL."後就跳過SELECT直接到ENDIF.。

是否有網大知道為什麼會這樣?請知道的朋友教教我如何修改。
謝謝!!

2 個回答

0
ice bear
iT邦新手 4 級 ‧ 2021-03-18 10:52:10
最佳解答

if not it_afko[] is initial.

0

樓上應該是正確的解答, ABAP的ITable宣告方式有加WITH HEADER LINE跟沒加兩種, 若是有加ITable隱含有work area 及table data, 原宣告的itable名稱指的是work area(一筆資料), 而table data(多筆)會以array的型式存在所以要在itable的名稱後面加[], 之後都建議不要用WITH HEADER LINE的方式(個別宣告名稱不同), 但舊有的Library接收的參數還有很多是以有HEADER LINE的方式傳輸
例:
TYPES:BEGIN OF EMP,
              NAME LIKE USER-UNAME,
              TELNUM  LIKE USER-TELENUMBER,
              ADDR  LIKE USER-ADDRNUMBER,
END OF EMP.
DATA: EMPTAB TYPE STANDARD TABLE  OF EMP INITIAL SIZE 10 WITH HEADER LINE.

DATA: BEGIN OF EMP OCCURS 0,
         NAME LIKE USER-UNAME,
        TELNUM LIKE USER-TELENUMBER,
END OF EMP.
DATA ITAB LIKE TABLE OF EMP.
以上都是有HEADER LINE

下面是work area跟table data分開宣告(這時候itable就不用加[])
TYPES: Begin Of TP_NAME,
            Col1 Like Tab1-Col1,
            Col2 Like Tab2-Col2,
End Of TP_NAME.
TYPES tp_tab_name TYPE Standard Table Of TP_NAME With UNIQUE KEY uid.
(這種方式彈性多很多, itable有3種型態, Standard/Sort/Hash)
DATA it_name TYPE tp_tab_name.
(it_name是ITable的名稱)
DATA wa_name LIKE LINE OF it_name.
(wa_name是work area的名稱)

rogermou iT邦新手 4 級 ‧ 2021-03-18 12:14:16 檢舉

Dear Justin
感恩。
Roger

我要發表回答

立即登入回答