鄭重聲明:本公眾號(hào)所發(fā)文章全部為原創(chuàng),,其他地方所看到同樣文章如無(wú)授權(quán),,均為盜用!以下為本篇正文(文章是多年以來(lái)積累所寫(xiě),,以前主要發(fā)布于知乎,,后續(xù)陸續(xù)發(fā)布到此公眾號(hào)):
今天(此處的今天已是好多年前的某天)來(lái)和大家聊一聊SAP中確認(rèn)和替代的問(wèn)題。
首先呢,,我們要了解,,確認(rèn)和替代本質(zhì)其實(shí)是把需要通過(guò)寫(xiě)程序完成的一些業(yè)務(wù)邏輯通過(guò)設(shè)置或者說(shuō)配置完成,這是SAP的一大特點(diǎn),。
也就是盡量不通過(guò)程序代碼實(shí)現(xiàn)業(yè)務(wù)邏輯,,而是通過(guò)配置方式實(shí)現(xiàn),從廣義上說(shuō),,確認(rèn)和替代也是配置的一種形式,。
還有一點(diǎn)呢,就是SAP中不僅僅是財(cái)務(wù)模塊可以進(jìn)行確認(rèn)和替代,,其他模塊也可以使用,,比如PS模塊,不過(guò)總的來(lái)說(shuō),,在財(cái)務(wù)模塊用應(yīng)用比較廣泛,。
那么確認(rèn)和替代的區(qū)別是什么呢?所謂確認(rèn)就是檢查業(yè)務(wù)邏輯是否為真,,或者說(shuō)我們需要設(shè)置一個(gè)業(yè)務(wù)邏輯,,讓系統(tǒng)按照這個(gè)邏輯進(jìn)行檢查,如果不滿足,,則系統(tǒng)給出警告消息或者錯(cuò)誤消息,,警告消息則提醒用戶確認(rèn)這個(gè)輸入是否準(zhǔn)確,錯(cuò)誤消息則表示這個(gè)輸入不允許,。
比如我們經(jīng)??梢允褂么_認(rèn)檢查某些憑證字段是否必輸。當(dāng)然,,有的朋友會(huì)說(shuō),,通過(guò)字段狀態(tài)組也可以實(shí)現(xiàn)檢查某些憑證字段是否必輸呀。是的,,不過(guò)如果在不同公司下,,字段狀態(tài)組統(tǒng)一設(shè)置,,對(duì)同一個(gè)字段,有的公司是必輸,,有的公司則是可選,,那么就可以在字段狀態(tài)組層面設(shè)置為可選,然后通過(guò)確認(rèn)對(duì)某個(gè)公司使用確認(rèn)的方式設(shè)置為必輸,。
所謂替代,,就是根據(jù)一定的業(yè)務(wù)邏輯替代原來(lái)過(guò)賬的數(shù)據(jù),比如我們經(jīng)常替代一些文本到憑證摘要中,,因?yàn)镾AP中很多業(yè)務(wù)自動(dòng)產(chǎn)生的憑證是沒(méi)有摘要的,。
貼圖比較麻煩(還是“懶”作怪:)),我們還是以問(wèn)答的方式寫(xiě)完這個(gè)帖子吧,,以下的問(wèn)答都是項(xiàng)目中可能經(jīng)常遇到的一些問(wèn)題,,供大家參考。
答:GGB0可查詢所有可進(jìn)行確認(rèn)的業(yè)務(wù)模塊,,GGB1可查詢所有可進(jìn)行替代的業(yè)務(wù)模塊。
2. 如果要在確認(rèn)中使用“非”條件邏輯如何寫(xiě)語(yǔ)句,?答:如果要使用“非”條件邏輯,需要在語(yǔ)句前寫(xiě)“NOT”,,比如檢查條件哦按為憑證類型不等于“SA”,,那么需要寫(xiě)“NOT BKPF-BLART = 'SA’”。
3. 如果要在確認(rèn)中使用“集”如何操作,?答:首先GS01創(chuàng)建集,,然后在確認(rèn)步驟中使用IN后面跟集的名稱來(lái)使用集,比如檢查條件為多個(gè)會(huì)計(jì)科目,,則GS01創(chuàng)建會(huì)計(jì)科目的集,,假設(shè)集的名字為ZKJKM,然后在確認(rèn)步驟中寫(xiě)語(yǔ)句“BSEG-HKONT IN ZKJKM”,。
4. 如果要在確認(rèn)中使用前幾位字符的判斷語(yǔ)句,,如何編寫(xiě)?答:格式為:字段加冒號(hào)加第幾位數(shù)字開(kāi)始加冒號(hào)加第幾位數(shù)字結(jié)束,,比如要檢查會(huì)計(jì)科目的前四位,,則語(yǔ)句為“BSEG-HKONT :1-4:”。注意:使用時(shí)注意科目是否有前置零,,因?yàn)镾AP默認(rèn)科目長(zhǎng)度為10位,,如果只用了8位,那么檢查前四位就要考慮前置零,,應(yīng)寫(xiě)為“BSEG-HKONT :1-6 = '00XXXX’或BSEG-HKONT :3-6 = 'XXXX’(XXXX表示科目的前四位),。
5. 確認(rèn)中的判斷條件為“真”還是“假”,?答:判斷條件一定為“真”,即需要檢查的結(jié)果是什么,,就寫(xiě)什么結(jié)果,,比如需要檢查憑證類型為SA,則憑證摘要不為空,,則檢查條件為“BKPF-BLART = 'SA’”,判斷條件為“BKPF-BKTXT<> '’”,。
答:在創(chuàng)建確認(rèn)時(shí)會(huì)默認(rèn)一個(gè)消息類,,這個(gè)消息類會(huì)被后續(xù)的步驟一起使用,,如果要修改消息類,需要選擇最上層的確認(rèn)比如“財(cái)務(wù)會(huì)計(jì)-行項(xiàng)目”,,然后選擇菜單“環(huán)境-修改消息”,,或者執(zhí)行程序“RGUGBR28”修改消息類。
7. 確認(rèn)和替代的程序是哪個(gè),?答:GCX2可查看標(biāo)準(zhǔn)的確認(rèn)和替代的程序,,標(biāo)準(zhǔn)確認(rèn)程序?yàn)镽GGBR000,標(biāo)準(zhǔn)替代的程序?yàn)镽GGBS000,,如果要使用出口進(jìn)行確認(rèn)和替代,,一般拷貝標(biāo)準(zhǔn)程序?yàn)閆開(kāi)頭程序,然后在GCX2中分配相應(yīng)的應(yīng)用區(qū)域,,因?yàn)槿绻枰獦?biāo)準(zhǔn)程序,,需要向SAP申請(qǐng)Access Key。
8. 替代和確認(rèn)相關(guān)的表有哪些,?答:主要是GB開(kāi)頭的表,,重要的比如GB01,這個(gè)表的字段決定了某個(gè)憑證字段是否可進(jìn)行替代,,比如會(huì)計(jì)科目(BSEG-HKONT)默認(rèn)是不允許替代的,,需要把Exclude的標(biāo)識(shí)去掉,才可以進(jìn)行替代,。另外,,GB90是用來(lái)存儲(chǔ)規(guī)則的表。
9. 確認(rèn)和替代中的Rule(規(guī)則)的作用是什么,?答:規(guī)則的作用就是反復(fù)被使用的一些業(yè)務(wù)邏輯,,可使用在多個(gè)確認(rèn)或替代步驟中,可反復(fù)被調(diào)用,。類似于一個(gè)公用的函數(shù),。
10. 有的時(shí)候確認(rèn)或替代不起作用怎么辦?答:可能的原因有,確認(rèn)中的字段內(nèi)容不符合長(zhǎng)度要求,,比如科目,,有的時(shí)候需要填充前置0,要么是GB01中的字段不允許替代,。如果確認(rèn)和替代步驟沒(méi)有問(wèn)題,,則考慮執(zhí)行程序“RGUGBR00”和“RGUGBR01”重新生成確認(rèn)和替代程序。
11. CO產(chǎn)生的FICO統(tǒng)馭憑證校驗(yàn)起作用嗎,?答:目前測(cè)試來(lái)看,,不起作用,只有從其他模塊過(guò)賬產(chǎn)生FI憑證或者直接錄入FI憑證,,校驗(yàn)才會(huì)起作用,,反過(guò)來(lái)從CO進(jìn)行操作產(chǎn)生FI憑證,校驗(yàn)不起作用,。在集成憑證的替代時(shí),可使用全局變量來(lái)實(shí)現(xiàn)如果無(wú)法根據(jù)已有的憑證信息進(jìn)行替代的情況,,比如在銷售開(kāi)票和會(huì)計(jì)憑證的集成替代中,,可以在銷售開(kāi)票的增強(qiáng)出口RV60AFZZ中寫(xiě)一段邏輯,把銷售發(fā)票中的某個(gè)字段先保存在全局變量中,,(代碼示例: EXPORT LV_PLTYP TO MEMORY ID 'LV_KUNNR'.),,然后在會(huì)計(jì)憑證的替代中再使用此全局變量,然后進(jìn)行替代,。相當(dāng)于用全局變量作為一個(gè)數(shù)據(jù)的中轉(zhuǎn)載體,。
最后,在S4版本中,,大家需要注意,因?yàn)閭鹘y(tǒng)的確認(rèn),、替代是針對(duì)BKPF/BSEG表的,,而S4中,會(huì)計(jì)憑證的基礎(chǔ)表已變?yōu)锳CDOCA,,目前有些憑證是不更新BSEG,,直接更新BKPF/ACDOCA的,比如折舊憑證,、外幣評(píng)估憑證,,我們對(duì)這些憑證使用確認(rèn)、替代就不會(huì)起作用,。需要通過(guò)其他的BADI增強(qiáng)實(shí)現(xiàn),。