发生系统错误53_SAP那些事-推理剧-36-奇怪的付款清账(F-53)报错“TABLE_INVALID_INDEX”...
問題描述:
在使用F-53進行供應商付款清賬操作時,模擬憑證(包括保存憑證)時出現如下的ABAP Down錯誤:
問題分析:
從報錯內容看,我們首先看到報錯的程序為SAPMF05A,這個程序財務顧問都熟悉,是財務模塊的主程序,大部分的財務過賬(如F-02)操作都是調用的這個程序。
另外,就是報錯的原因是因為index小于等于0了,這對于數據庫來說是不允許的,因為index只能大于0。
關于SAPMF05A這個程序,我們可以使用SE80查看開發對象,截圖如下:
在這里我們也能看到這個程序會被哪些使用代碼用到,如下圖:
反過來,我們也可以通過SE93或者執行事務代碼時來查看對應的程序,比如SE93查看F-02所對應的程序:
下圖則是通過執行事務代碼F-02,對任意一個字段按F1按鈕,再點擊“技術信息”按鈕,從而查看事務代碼所使用的程序。
接下來,我們通過ST22再進行分析,轉到具體的程序代碼,如下圖操作:
這里看到了具體的程序行和程序名。
在這里相應的位置打斷點,并繼續操作F-53進行debug時,發現是因為內表kontab的索引index變為0導致的錯誤,而index的值來源于變量i,而變量i則是由ld_tabix-1得到的,ld_tabix來源于系統的索引值sy-tabix。
我們再找sy-tabix為何變為1,這個時候的思路是找一個沒有報錯的系統對比進行debug,比較在不同的系統里內表kontab的數據是否有不一致的地方。
第一個圖是沒有發生錯誤的系統內表kontab的值,第二個圖則是有錯誤的系統內表kontab的值,再debug發現,對于無錯誤的系統,在對內表kontab執行loop循環時,因為kontab-shkzg(借貸方)為H,就直接結束了第一次循環,第二次循環時,sy-tabix(系統索引)已經變為了2,再減1變為了1,就不會出現索引為0的情況了。
那接下來就是看kontab的數據來源于哪里了,為什么到了這里字段kontab-shkzg為空了。
通過在主程序中搜索。
我們發現內表kontab是由postab賦值的,如下圖:
通過上圖發現,有一個增強(S4H900878是增強產生的請求號)把字段shkzg的賦值代碼給注釋掉了。這樣終于找到了最終的原因。
然后通過SE01查看請求號S4H900878,發現是在今年2月5號做的一個增強。
總結:最近發現年紀大了,反而更想鉆研技術了,說到底,程序還是一堆堆代碼組成的,如果我們想用系統解決業務問題,對代碼以及底層程序邏輯的理解是不可或缺的,不過這個時候查找程序的速度快了很多,這個過程和剛開始接觸系統的時候去看程序有所不同,此時看系統代碼會結合業務,更多的去研究系統的設計思路。畢竟不是專業的開發人員,這個過程寫出來大家看到沒多少時間,實際花費了2個多小時才搞定。標準程序還是盡量少寫增強吧,一個是影響面太廣,一旦出問題,就是比較大的問題,另外是出現問題也不好排查,基本就是靠debug(或者有比較完備的文檔)去發現,然后去調整。
總結
以上是生活随笔為你收集整理的发生系统错误53_SAP那些事-推理剧-36-奇怪的付款清账(F-53)报错“TABLE_INVALID_INDEX”...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VMware Workstation 1
- 下一篇: xp系统计算机无法连接远程桌面连接,完美