魔鬼在細(xì)節(jié)中:你不一定知道的SAP程序變式和選擇變量

文 | SAP油瓶哥

前言

說(shuō)起SAP中的變式(Variant),SAP從業(yè)者肯定不會(huì)陌生,對(duì)于選擇屏幕復(fù)雜的程序界面,我們可以使用變式來(lái)簡(jiǎn)化界面(比如隱藏不相關(guān)字段),對(duì)于經(jīng)常使用的并且每次都需要輸入相同篩選條件的程序(比如每月都要執(zhí)行的報(bào)表),可以設(shè)定和調(diào)用變式來(lái)簡(jiǎn)化操作,此外當(dāng)我們需要需要設(shè)定后臺(tái)JOB時(shí),我們也需要為后臺(tái)程序指定相應(yīng)的變式。

本文嘗試為變式相關(guān)概念做些總結(jié),并再簡(jiǎn)單說(shuō)下變式中的選擇變量(Selection variables)的用法。

維護(hù)變式

當(dāng)我們新定義一個(gè)變式時(shí),我們需要:

進(jìn)入程序界面,在選擇屏幕輸入選擇條件

點(diǎn)擊保存按鈕進(jìn)入變式屬性界面

填上變式名字和描述

保存

或者我們也可以通過(guò)SE38,填上程序名,選擇子對(duì)象變式,點(diǎn)擊顯示或修改按鈕進(jìn)入變式維護(hù)界面。

當(dāng)我們需要從前臺(tái)調(diào)用時(shí)變式時(shí),只要點(diǎn)擊變式按鈕雙擊想調(diào)用的變式即可。

需要注意的是當(dāng)一個(gè)程序的變式數(shù)大于10個(gè)時(shí),點(diǎn)擊變式按鈕會(huì)彈出額外的選擇界面:

這些常規(guī)操作,大家應(yīng)該都非常熟悉,這里我們來(lái)看下變式屬性的其他選項(xiàng),看看他們都有什么作用。

變式屬性

使用屏幕分配 (Use screen assignment)

如果一個(gè)程序包含多個(gè)選擇屏幕(例如:COOIS),當(dāng)我們只想編輯某一個(gè)選擇屏幕的變式屬性時(shí),可以先在右側(cè)勾選選擇屏幕號(hào),然后再點(diǎn)擊使用屏幕分配按鈕,這時(shí)下方的窗格就會(huì)只顯示對(duì)應(yīng)的選擇屏幕字段,當(dāng)然SAP中大多數(shù)程序還是只有一個(gè)選擇屏幕界面,所以這個(gè)按鈕用到的情況并不多。

僅用于后臺(tái)處理 (Only for Background Processing)

如果勾上了此項(xiàng),那么變式就不能在前臺(tái)被調(diào)用了,只能用于后臺(tái)JOB。

保護(hù)變式 (Protect Variant)

勾選后,該變式其他用戶無(wú)法修改。

僅在目錄中顯示 (Only Display in Catalog)

勾選后,點(diǎn)擊變式按鈕不會(huì)看見(jiàn)此變式,變式也不會(huì)出現(xiàn)在SE38的變式子界面的搜索幫助中,只能在變式目錄中找到此變式。

變式目錄可以在SE38的變式子界面,通過(guò)如下菜單位置找到:

僅出現(xiàn)在變式目錄中的變式依然可以被用于定義后臺(tái)JOB:

系統(tǒng)變式 (System Variant)

該選項(xiàng)無(wú)法手工勾選,當(dāng)定義新的系統(tǒng)變式或查看系統(tǒng)變式時(shí)會(huì)自動(dòng)勾上。

關(guān)于系統(tǒng)變式可以分享的幾點(diǎn)如下:

A. 系統(tǒng)變式命名以SAP&或CUS&開頭,SAP&表示SAP原生定義的系統(tǒng)變式,CUS&表示客戶自定義的系統(tǒng)變式

B. 無(wú)法為本地程序定義系統(tǒng)變式,否則系統(tǒng)會(huì)給出DB248報(bào)錯(cuò)

C. 系統(tǒng)變式不會(huì)被覆蓋并且只能由創(chuàng)建者或最后修改者修改

D. 系統(tǒng)變式保存時(shí)會(huì)觸發(fā)自動(dòng)傳輸(Workbench類型,傳輸對(duì)象是 LIMU VARI)

E. 當(dāng)傳輸程序時(shí),對(duì)應(yīng)的系統(tǒng)變式會(huì)一起被傳輸

F. 系統(tǒng)變式不區(qū)分Client (not client-specific),系統(tǒng)變式只能從Client 000中調(diào)用T類型選擇變量(靜態(tài)變量),這個(gè)下面會(huì)談到。

屏幕字段類型 (Type)

屏幕字段一共有兩種類型,P和S , P表示參數(shù)(PARAMETERS),S表示選擇選項(xiàng)(SELECTION-OPTIONS),從前臺(tái)界面上來(lái)看就會(huì)一下子明白。(這里需要說(shuō)明的是,并不是屏幕上看到單個(gè)空格的就一定是P類型,用SELECTION-OPTIONS定義的選擇屏幕也是可以實(shí)現(xiàn)單個(gè)空格效果的)。

不同類型的屏幕字段也只能調(diào)用相應(yīng)類型的選擇變量,這個(gè)下面會(huì)談到。

保護(hù)字段 (Protect field)

勾選后,當(dāng)程序調(diào)用此變式執(zhí)行時(shí),字段在前臺(tái)選擇屏幕上可見(jiàn),但不接受用戶輸入,只能在維護(hù)變式時(shí)錄入。

隱藏字段 (Hide field / Hide field 'TO')

勾選后,當(dāng)程序調(diào)用此變式執(zhí)行時(shí),字段在前臺(tái)選擇屏幕上將不可見(jiàn),但在維護(hù)變式時(shí)錄入的值依然有效。

保存無(wú)值的字段 (Save field without values)

使用后,系統(tǒng)在保存變式時(shí)會(huì)不考慮錄入的字段值。

如果該字段與MEMORY ID無(wú)關(guān),那么對(duì)該字段系統(tǒng)將以空值保存在變式中。

如果該字段與MEMORY ID有關(guān),那么系統(tǒng)在調(diào)用變式時(shí)該字段值會(huì)受到SAP memory中的值和用戶變量的影響,具體三者間的關(guān)系,后面會(huì)談到。關(guān)于MEMORY ID下面也會(huì)聊到。

GPA關(guān)閉 (Switch GPA off)

這里的GPA指的是SPA/GPA, 即SELECT/GET Parameter ID,也就是用戶參數(shù)文件中的SET/GET 參數(shù)標(biāo)識(shí)(可以用SU3或SU01維護(hù)),Parameter ID(pid)存在表TPARA中。

要討論這個(gè)選項(xiàng),我們需要先說(shuō)下SAP memory。我們?cè)谌粘2僮髦锌隙ㄗ⒁膺^(guò)這種現(xiàn)象,就是有時(shí)我們進(jìn)入到一些程序時(shí)(注意:不是用變式啟動(dòng)),會(huì)發(fā)現(xiàn)有些字段的值已經(jīng)自動(dòng)填寫上了,這里其實(shí)用到了SAP memory機(jī)制。在這種機(jī)制下,當(dāng)一個(gè)屏幕被調(diào)用時(shí),那些用MEMORY ID語(yǔ)法定義的屏幕字段會(huì)去SAP memory中搜尋當(dāng)前值,并自動(dòng)填充到屏幕上。SAP memory是與用戶ID綁定的,這種機(jī)制提高了用戶的操作體驗(yàn)。

下面我們先看一個(gè)例子,理解下這個(gè)自動(dòng)填充的邏輯:

登錄SAP, 我們?cè)赟U3中維護(hù)PID WRK = 8000

進(jìn)入MB51, 會(huì)發(fā)現(xiàn)工廠字段是自動(dòng)填寫上8000的

我們手工改為6000 (注意:要按下回車才會(huì)進(jìn)入SAP memory),退出MB51

再次進(jìn)入MB51,會(huì)發(fā)現(xiàn)工廠字段默認(rèn)帶出了6000 (其實(shí)進(jìn)入MB52也會(huì)發(fā)現(xiàn)工廠字段自動(dòng)會(huì)帶出6000)

我們手工改為空,退出MB51

再次進(jìn)入MB51,會(huì)發(fā)現(xiàn)工廠字段默認(rèn)為空

登出SAP,再次登錄SAP,進(jìn)入MB51,會(huì)發(fā)現(xiàn)工廠字段自動(dòng)帶出了8000

退出MB51,進(jìn)入SU3修改WRK = 6010

再次進(jìn)入MB51,會(huì)發(fā)現(xiàn)工廠字段默認(rèn)帶出了6010

這里我們就可以明白這個(gè)SAP memory的工作原理了,當(dāng)我們以無(wú)變式方式進(jìn)入一個(gè)程序屏幕時(shí),假如A字段用到了MEMORY ID語(yǔ)句關(guān)聯(lián)了PID,并且沒(méi)有在語(yǔ)法中給出默認(rèn)值,那么當(dāng)SAP memory中有值時(shí)系統(tǒng)會(huì)優(yōu)先調(diào)用(注意:包括其他屏幕操作寫入的值、空值和新保存在用戶參數(shù)文件中的值),當(dāng)SAP memory中還沒(méi)有值時(shí)(比如剛登錄系統(tǒng),未進(jìn)行其他操作),系統(tǒng)會(huì)去檢查用戶參數(shù)文件中有無(wú)維護(hù)PID,如果有,就調(diào)用PID值(包括空值),如果沒(méi)有,那么就以初始值顯示(即空值)。

回到GPA關(guān)閉這個(gè)選項(xiàng)上來(lái),首先這個(gè)選項(xiàng)只對(duì)使用了MEMORY ID定義的屏幕字段有效,對(duì)其他屏幕字段來(lái)說(shuō)這個(gè)選項(xiàng)是不可編輯的。如果我們勾選了GPA關(guān)閉,那么當(dāng)我們調(diào)用變式時(shí),就不會(huì)觸發(fā)SAP memory機(jī)制。

更詳細(xì)的舉例可以參加后面的組合測(cè)試部分。

要求的字段 (Required field)

使用后,當(dāng)程序調(diào)用此變式執(zhí)行時(shí),該字段在選擇屏幕上變?yōu)楸剌旐?xiàng)。

選擇變量 (Selection variable)

選擇變量可以幫助我們更靈活去管理變式,目前SAP支持的選擇變量一共有4種:

靜態(tài)變量,即表TVARVC中的值 (類型T)

動(dòng)態(tài)日期計(jì)算 (類型D、X)

動(dòng)態(tài)時(shí)間計(jì)算 (類型Z、Y)

用戶變量 (類型B)

下面我們依次來(lái)看下這幾種變量的用法。

T類型選擇變量:表TVARVC中的值

我們可以直接將表TVARVC中定義的值用在變式中,這樣當(dāng)選擇條件發(fā)生小的變更時(shí),就不用每次都去變更已有的變式,只要更新表TVARVC中的靜態(tài)變量即可。

T類型選擇變量也可以配合保護(hù)字段一起使用。

假如我們每月需要為所有的工廠執(zhí)行一系列的報(bào)表或程序,我們?yōu)檫@些程序創(chuàng)建了變式,并設(shè)定了后臺(tái)JOB,隨著業(yè)務(wù)的增長(zhǎng),每當(dāng)有新的工廠被創(chuàng)建后,我們需要為這一系列程序去修改變式。如果我們?cè)诒鞹VARVC中定義了一個(gè)ZPLANT的變量(類型:選擇選項(xiàng)),并將這個(gè)變量應(yīng)用在所有的變式中,這樣當(dāng)業(yè)務(wù)環(huán)境發(fā)生變化時(shí),我們就僅需要去修改ZPLANT這個(gè)變量值,這將大大簡(jiǎn)化我們的工作量。

關(guān)于T類型的選擇變量,其他需要說(shuō)明的有:

A. T類型選擇變量存儲(chǔ)在表TVARV和TVARVC中,TVARV不區(qū)分Client,TVARVC區(qū)分Client

B. 自Release 610開始, TVARV 被TVARVC所替代,可以用程序RSTVARVCLIENTDEPENDENT來(lái)將 TVARV的值拷貝至TVARVC

C. 事務(wù)碼STVARV可以用來(lái)維護(hù)當(dāng)前Client的表TVARVC中的值,事務(wù)碼STVARVC可以在任一Client維護(hù)Client 000的表TVARVC的值。也可以在變式屬性定義界面通過(guò)菜單>環(huán)境>定義選擇變量進(jìn)行維護(hù)。

D. Client 000中的表TVARVC中的值是給系統(tǒng)變式用的。

E. P類型的屏幕字段可以調(diào)用表TVARVC中的參數(shù)值,S類型的屏幕字段可以調(diào)用表TVARVC中的選擇選項(xiàng)值

F. 因?yàn)閯?dòng)態(tài)期間計(jì)算不能涵蓋所有場(chǎng)景,我們可以根據(jù)需要在表TVARVC創(chuàng)建變量,并開發(fā)一個(gè)程序進(jìn)行定期更新。

比如事務(wù)碼IDCNACCTBLN中的年份和期間這兩個(gè)字段不能使用動(dòng)態(tài)計(jì)算,我們可以在表TVARVC創(chuàng)建變量ZCURRENT_YEAR(本年)和ZLAST_PERIOD(上月),通過(guò)一個(gè)自開發(fā)程序每月去更新ZCURRENT_PERIOD,每年去更新ZCURRENT_YEAR。

注意:T類型的選擇變量會(huì)影響到所有調(diào)用它的變式

D、X類型選擇變量:動(dòng)態(tài)日期計(jì)算

只有數(shù)據(jù)類型為DATS的屏幕字段才能使用動(dòng)態(tài)日期計(jì)算。D類型動(dòng)態(tài)日期計(jì)算使用的是本地日期,X類型使用的是系統(tǒng)日期。

SAP支持的動(dòng)態(tài)日期計(jì)算選擇如下:

Z、Y類型選擇變量:動(dòng)態(tài)時(shí)間計(jì)算

只有數(shù)據(jù)類型為TIMS的的屏幕字段才能使用動(dòng)態(tài)時(shí)間計(jì)算。Z類型動(dòng)態(tài)日期計(jì)算使用的是本地時(shí)間,Y類型使用的是系統(tǒng)時(shí)間。

SAP支持的動(dòng)態(tài)時(shí)間計(jì)算選擇如下:

B類型選擇變量:用戶變量 (User-specific Selection Variables)

最后來(lái)看下用戶變量,用戶變量是與用戶ID綁定的選擇變量,如果我們要在變式中使用用戶變量,需要滿足3個(gè)條件:

No.1 該屏幕字段用到了MEMORY ID語(yǔ)法關(guān)聯(lián)到了PID;

No.2 表TUVID 中有相應(yīng)的PID值;

No.3 已經(jīng)維護(hù)了相應(yīng)的用戶變量值 (用戶變量存儲(chǔ)在表TVARUVN中)。

當(dāng)以上條件達(dá)到時(shí),我們?cè)诰S護(hù)變式時(shí)就可以選擇類型B作為選擇變量,并且系統(tǒng)會(huì)自動(dòng)帶出變量名稱。

維護(hù)用戶變量

維護(hù)用戶變量的方法有兩種:

一. 通過(guò)菜單

A. 在選擇屏幕中,通過(guò)菜單>轉(zhuǎn)到>用戶變量進(jìn)入維護(hù)界面

B. 單擊要維護(hù)的PID

C. 眼鏡按鈕會(huì)顯示當(dāng)前的用戶參數(shù)值,筆按鈕會(huì)進(jìn)入修改界面,如果點(diǎn)擊獲取,會(huì)讀取當(dāng)前的用戶參數(shù)值并填到屏幕字段上

D. 點(diǎn)擊筆后,選擇變量,填上參數(shù)值保存即可。(注意:需要點(diǎn)擊刪除才會(huì)保存成功,如果選擇保存空,就會(huì)以空值保存

E. 點(diǎn)擊筆后,如果點(diǎn)擊選擇屏幕,系統(tǒng)會(huì)讀取當(dāng)前屏幕上的值做出輸入?yún)⒄?/p>

F. 如果要?jiǎng)h除用戶變量值,需要進(jìn)入修改界面然后將參數(shù)值改為空,最后選擇刪除即可

二. 調(diào)用功能

用戶變量也可以通過(guò)SE37調(diào)用功能來(lái)修改,相關(guān)的功能如下:

VARI_USER_VARS_GET: 讀取現(xiàn)有變量值

VARI_USER_VARS_SET: 修改現(xiàn)有變量值

VARI_USER_VARS_COPY:復(fù)制變量值

VARI_USER_VARS_DELETE:刪除變量值

VARI_USER_VARS_RENAME:重命名變量值

VARI_USER_VARS_DIALOG:出現(xiàn)對(duì)話框輸入變量值

組合測(cè)試

我們可以看到用戶變量和SAP memory都關(guān)聯(lián)到了PID,那么它們間的關(guān)系又是怎樣的呢?我自己花了點(diǎn)時(shí)間測(cè)試了下保存無(wú)值字段,GPA關(guān)閉及用戶變量這幾個(gè)易混淆的選項(xiàng),在此也把測(cè)試的結(jié)果分享給大家,希望大家看過(guò)后可以了然于胸。

測(cè)試對(duì)象:

測(cè)試場(chǎng)景:

測(cè)試結(jié)果:

從上面可以看出,如果不考慮保存無(wú)值字段的影響,系統(tǒng)取值時(shí)優(yōu)先級(jí)最高的是用戶變量,然后是創(chuàng)建變式時(shí)手工錄入的字段值,最后是GPA(SAP memory)

文件鏈接:

https://pan.baidu.com/s/1pF8wXEEIQa3psJnFsrq1AA

密碼: u9cu

后記

本篇緣起年前的一次用戶培訓(xùn)上,在講到如何設(shè)置變式中的動(dòng)態(tài)計(jì)算變量時(shí),用戶提到為什么事務(wù)碼IDCNACCTBLN中的年度和期間不能設(shè)置動(dòng)態(tài)計(jì)算,一開始只是想弄清這個(gè),沒(méi)曾想寫的過(guò)程中覺(jué)得,要不看看所有的變式屬性都有什么用,哎,系統(tǒng)變式是啥,以前沒(méi)注意過(guò)啊,GPA是什么東東?反正不會(huì)是大學(xué)成績(jī)績(jī)點(diǎn),保存無(wú)值字段該怎么理解,怎么還有個(gè)B類型的選擇變量。。

我覺(jué)得我某種程度是有強(qiáng)迫癥的。

以上。

參考資料

1746893 - Dynamic date and time calculation in variant

1994216 - How to maintain variant variables in table TVARVC

557314 - As of Release 610: TVARV replaced with TVARVC

770084 - Maintaining TVARVC in transaction STVARV

372724 - Maintenance of report variants

Dynamic date selection in Variants

Dynamic Dates in Screen Variants

Create SAP Dynamic Variant using Date Calculation

SAP Documentation: Variant Maintenance

SAP Documentation: SPA/GPA Parameters as Default Values

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容