Wednesday, October 11, 2006

Restar horas a una fecha???


Muchas veces, en los proyectos, nos van a pedir restar una cantidad de días, meses o años a una determinada fecha...Pero alguna vez les han pedido que resten horas a una fecha???

Bueno, si alguna vez se ven en ese problema, esta pequeña función puede ayudarles -;)


FUNCTION Z_CALCULATE_DATE_FROM_TIME.
*"-------------------------------------------------------
*"*"Interfase local
*" IMPORTING
*" REFERENCE(DATE) TYPE D
*" REFERENCE(TIME) TYPE T
*" REFERENCE(HOURS) TYPE T
*" REFERENCE(OPERATION) TYPE CHAR1
*" EXPORTING
*" REFERENCE(NEW_DATE) TYPE D
*" REFERENCE(NEW_TIME) TYPE T
*" EXCEPTIONS
*" FORBIDDEN_OPERATION
*"-------------------------------------------------------

DATA: DAYS TYPE I,
MONTHS LIKE T5A4A-DLYMO,
YEARS LIKE T5A4A-DLYYR.

IF OPERATION EQ 'S'.
NEW_TIME = TIME + HOURS.

IF TIME LE '240000' AND NEW_TIME LT TIME.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
DATE = DATE
DAYS = '01'
MONTHS = MONTHS
SIGNUM = '+'
YEARS = YEARS
IMPORTING
CALC_DATE = NEW_DATE.
ELSE.
NEW_DATE = DATE.
ENDIF.

ELSEIF OPERATION EQ 'R'.
NEW_TIME = TIME - HOURS.

IF TIME GE '000000' AND NEW_TIME GT TIME.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
EXPORTING
DATE = DATE
DAYS = '01'
MONTHS = MONTHS
SIGNUM = '-'
YEARS = YEARS
IMPORTING
CALC_DATE = NEW_DATE.
ELSE.
NEW_DATE = DATE.
ENDIF.

ELSE.
RAISE FORBIDDEN_OPERATION.
ENDIF.

ENDFUNCTION.


Saludos,

Blag.

No comments: