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