ABAP:如何等待小数秒数

转载自:http://www.cnblogs.com/eagle-dtq/p/6834154.html

WAIT UP TO x SECONDS. 和CALL FUNCTION 'ENQUE_SLEEP'都只能支持整数的秒数(如果是非整数,则四舍五入),如果要WAIT非整数的描述,可以如下写法:

 

DATA: t1 TYPE i,
      t2 TYPE i.

GET RUN TIME FIELD t1.
PERFORM zwait USING '0.1'.
GET RUN TIME FIELD t2.
WRITE t2.

FORM zwait USING VALUE(second).

  DATA: d1  TYPE d,
        d2  TYPE d,
        t1  TYPE t,
        t2  TYPE t,
        tsl TYPE timestampl,
        s1  TYPE p DECIMALS 6,
        s2  TYPE p DECIMALS 6,
        sec TYPE p DECIMALS 6.
  .

  GET TIME STAMP FIELD tsl.
  CONVERT TIME STAMP tsl TIME ZONE sy-zonlo INTO DATE d1 TIME t1.
  s1 = frac( tsl ).

  WHILE second > sec.
    GET TIME STAMP FIELD tsl.
    CONVERT TIME STAMP tsl TIME ZONE sy-zonlo INTO DATE d2 TIME t2.
    s2 = frac( tsl ).
    sec = ( ( d2 - d1 ) * 86400 ) + t2 - t1 + s2 - s1.
  ENDWHILE.

ENDFORM.

 

 

******************************************************************************************************************

******************************************************************************************************************

根据上述coding,整理成如下function:

最小等待秒数可以设置为'0.0000001'

 

FUNCTION zecc_set_wait_time.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(IV_TIME) TYPE  TIMESTAMPL DEFAULT 1
*"----------------------------------------------------------------------

  DATA: d1  TYPE d,
        d2  TYPE d,
        t1  TYPE t,
        t2  TYPE t,
        tsl TYPE timestampl,
        s1  TYPE p DECIMALS 6,
        s2  TYPE p DECIMALS 6,
        sec TYPE p DECIMALS 6.
  .

  GET TIME STAMP FIELD tsl.
  CONVERT TIME STAMP tsl TIME ZONE sy-zonlo INTO DATE d1 TIME t1.
  s1 = frac( tsl ).

  WHILE iv_time > sec.
    GET TIME STAMP FIELD tsl.
    CONVERT TIME STAMP tsl TIME ZONE sy-zonlo INTO DATE d2 TIME t2.
    s2 = frac( tsl ).
    "24h = 86400
    sec = ( ( d2 - d1 ) * 86400 ) + t2 - t1 + s2 - s1.
  ENDWHILE.


ENDFUNCTION.

原来的coding可以修改为:

 

 

DATA: t1 TYPE i,
      t2 TYPE i.

GET RUN TIME FIELD t1.
*PERFORM zwait USING '0.1'.
CALL FUNCTION 'ZECC_SET_WAIT_TIME'
  EXPORTING
    iv_time = '0.1'.

GET RUN TIME FIELD t2.
WRITE t2.

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(客制函数,+,FORM子程序)