記ABAP時間函數FORMAT_DATE_4_OUTPUT

事由

最近踩坑ABAP開發,小試了一波HELLO WORLD後,小白開發從函數系統函數調用開始,ABAP編輯器有個好處就是能點擊函數名直接進入函數說明,還附上示例,這個比eclipse還是要有一定的便利。當然對於大神來說這些並不算什麼。但是對於入門者還是有一定必要的,畢竟SAP是個比較龐大的東西,不論是系統函數還是自定義函數這將對後面的開發者也是有一定幫助。

FORMAT_DATE_4_OUTPUT是一個簡單的日期格式轉換的函數,能滿足基本日期的格式轉換,然後看了一下函數說明

FUNCTION FORMAT_DATE_4_OUTPUT.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"       IMPORTING
*"             VALUE(DATIN) LIKE  NLEI-IBGDT
*"             VALUE(FORMAT) LIKE  RN1DATUM-FORMAT
*"       EXPORTING
*"             VALUE(DATEX) LIKE  RN1DATUM-DATEX
*"----------------------------------------------------------------------

DATA: I       TYPE I,
      FMT(10) TYPE C.

  FMT = FORMAT. CLEAR DATEX.
  IF FMT CS 'YYYY'.
     WRITE DATIN(4)   TO DATEX+SY-FDPOS(4).
  ELSEIF FMT CS 'YY'.
     WRITE DATIN+2(2) TO DATEX+SY-FDPOS(2).
  ENDIF.
  IF FMT CS 'MM'.
     WRITE DATIN+4(2) TO DATEX+SY-FDPOS(2).
  ENDIF.
  IF FMT CS 'DD'.
     WRITE DATIN+6(2) TO DATEX+SY-FDPOS(2).
  ENDIF.
* Trennzeichen in Datex einbauen
  I = 0.
  WHILE NOT FMT IS INITIAL.
    IF FMT(1) NA 'YMD'.
      WRITE FMT(1) TO DATEX+I(1).
    ENDIF.
    SHIFT FMT LEFT.
    I = I + 1.
  ENDWHILE.

ENDFUNCTION.

這其實不難明白,但是有個奇怪的地方,當你對參數類型定義錯誤也是可以通過編譯的。
錯誤示例1:

REPORT MY2006013.
DATA:L_DATUM TYPE C.
      .
CALL FUNCTION 'FORMAT_DATE_4_OUTPUT'
exporting
  DATIN = SY-DATUM
  FORMAT = 'YYYY-MM-DD'
 importing
  DATEX = L_DATUM.
WRITE: 'Today', SY-DATUM, /.
WRITE: 'Previous year', L_DATUM, /.

以上是能通過編譯,但是調試卻提示參數類型錯誤,錯誤原因一直讓我糾結,定義爲C類型,並沒有指定長度,或許是個錯誤之一,然而加上長度以後,還是錯誤,十分讓我抓狂,最後上正確運行代碼

REPORT MY2006013.
DATA:L_DATUM TYPE C LENGTH 10.
      .
CALL FUNCTION 'FORMAT_DATE_4_OUTPUT'
exporting
  DATIN = SY-DATUM
  FORMAT = 'YYYY-MM-DD'
 importing
  DATEX = L_DATUM.
WRITE: 'Today', SY-DATUM, /.
WRITE: 'Previous year', L_DATUM, /.

長度爲10才能正確運行,我也是感到驚奇。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章