SAP Report 變數的值傳遞

leniz發表於2008-06-18

      Report有時涉及到key date的問題,即有些infoobject的attribute是時間依賴的(time-dependent),所以報表一般會有一個時間,而同時也要求輸Keydate的時間,如果沒有定義report的keydate,那麼系統會預設用當前的系統時間,這樣有些資料出來就是錯誤的。

report做了定義,使用者不明白原因,導致對此項設定的抱怨,於是採用enhancement 。
CMOD-Enhancements   :建立工程,對enhancement的實際應用
SMOD-SAP Enhancement Management :管理enhancement本身
因為有戰友已建立了一個處理report變數的工程,所以我是用CMOD進去的,輸入工程名,會有兩個比較顯眼的按鍵
“Enhancement Assign”和“Components”。第一個按鍵是定義工程將用到的Enhancement,Component顯示的是En的內部組成(不是很清楚)。

我要用到的是
RSR00001:BW: Enhancements for global variables in reporting

點選進入:Components,選擇EXIT_SAPLRRS0_001,雙擊進入Function,
Function內容為“INCLUDE ZXRSRU01”  . 進入include program“ZXRSRU01”

跳過前面幾行的引數定義,可以看到 CASE i_vnam. 這個就是對變數進行過濾的段落,翻到 此Case的末尾,新增一個when段落,注意其他人的東西不要去動,否則後果自負。

比如,我在report裡面定義report的時間變數為 zperiod,key date的變數為 zkeydate,那麼 when 後面的字元就是用keydate的變數名即“zkeydate”,

大體程式碼如下:

  WHEN 'ZKEYDATE'.
    DATA: g_date_1(10) TYPE c.
    IF i_step = 2.
      LOOP AT i_t_var_range INTO loc_var_range
        WHERE vnam = 'ZPERIOD' .
        CLEAR l_s_range.
        l_s_range-sign = 'I'.
        l_s_range-opt  = 'EQ'.
            CLEAR g_date_1.
        CONCATENATE
                 loc_var_range-low+0(4)
                 loc_var_range-low+5(2)
                 '01'
                 INTO g_date_1.

                  l_s_range-low  = g_date_1.

                  APPEND l_s_range TO e_t_range.
                  EXIT.
      ENDLOOP.
    ENDIF.

應該程式碼都很容易,即輸入的report的時間變數為年週期,我改為年週期日。

這裡要注意,key date的引數型別要為Customer Exit,否則沒得搞。當然用RSRT去debug還是很容易發現的。

記錄一下。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/554557/viewspace-351777/,如需轉載,請註明出處,否則將追究法律責任。

相關文章