事由
最近踩坑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才能正确运行,我也是感到惊奇。