讓我老火的CONVERSION_EXIT_INVDT_INPUT

    最近發生了一件令我相當老火(貌似重慶人很喜歡用這個詞)的事情:同

 

一個報表因為不同的帳號執行,最後結果不一樣(這裡不涉及權限相關的內

 

容),更怪異的是唯獨只有一個帳號不一樣,其他都沒問題。從這一情況來

 

分析,代碼是沒有問題,應該是用戶設置問題(SU01,你懂的),但具體是

 

哪個參數就不得而知了。

 

    後來用兩個用戶來Debug代碼,經過一番周折,發現這麼一段FM的調用:

 

CONVERSION_EXIT_INVDT_INPUT ,代碼如下:

 

FUNCTION conversion_exit_invdt_input.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"       IMPORTING
*"             VALUE(INPUT)
*"       EXPORTING
*"             VALUE(OUTPUT)
*"----------------------------------------------------------------------

  
IF input <> space.
    
CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
         
EXPORTING
              date_external            = 
input
         
IMPORTING
              date_internal            = datum
         
EXCEPTIONS
              date_external_is_invalid = 
1.

    
IF sy-subrc <> 0.
      
MESSAGE e102.
    
ENDIF.
    
MOVE datum TO chdat.
    houtput = 
'99999999' - chdat.  "Zwischenspeichern in houtput, damit
    
output  = houtput.             "die führenden Nullen nicht verloren
                                       
"gehen.
  
ELSE.
    
output = space.        " damit bei 'Springen->Anderer Eintrag' auch
  
ENDIF.                               " die Eingabe SPACE erlaubt ist
ENDFUNCTION.               " (CONVERT_DATE_INPUT wird nicht durchlaufen)

 

  從該FM可以發現,它是將輸入的日期轉化為與用戶設置保持一致的日期,

 

然後再做字符運算。看到這裡,我才感覺到自己悲催了。所以這裡提醒下,

 

以後要是再用到類似的代碼,一定要注意用戶的參數設置。從整體來講,特

 

別是對一個比較成熟的系統來說,一套標準化的作業流程更是難能可貴。

 

 

 

  

 

    

 

   

 

请使用浏览器的分享功能分享到微信等