quarta-feira, 29 de setembro de 2010

Rotina ABAP de cálculo do intervalo de data e hora

Pesquisando na internet não encontrei uma rotina abap que fizesse o cálculo entre 2 datas e 2 horas e me desse isso em minutos. Acabei fazendo esse código que ao realizar alguns testes está me atendendo.

DATA: LC_DATA_INI like sy-datum.
DATA: LC_DATA_FIM like sy-datum.
DATA: LC_HORA_INI like sy-UZEIT.
DATA: LC_HORA_FIM like SY-UZEIT.
DATA: LC_DATADIFF like sy-datum.
DATA: LC_HORADIFF like SY-UZEIT.
DATA: LC_MINUTOS TYPE I.


lc_data_ini = SOURCE_FIELDS-INFO_DATA_INI.
lc_data_fim = SOURCE_FIELDS-INFO_DATA_FIM.


CONCATENATE SOURCE_FIELDS-INFO_HORA_INI(2)
            SOURCE_FIELDS-INFO_HORA_INI+3(2) '00'
            INTO lc_hora_ini.


CONCATENATE SOURCE_FIELDS-INFO_HORA_FIM(2)
            SOURCE_FIELDS-INFO_HORA_FIM+3(2) '00'
            INTO lc_hora_fim.

IF lc_data_fim <> ''.


     LC_DATADIFF = lc_data_fim - lc_data_ini.
     LC_HORADIFF = lc_hora_fim - lc_hora_ini.

     IF LC_DATADIFF < 1.
       IF lc_hora_fim <= lc_hora_ini.
          RESULT = 1440 - ( ( LC_HORA_INI - LC_HORA_FIM ) / 60 ).
       ELSE.
          RESULT = ( LC_HORA_FIM - LC_HORA_INI ) / 60.
       ENDIF.
     ELSE.
       LC_minutos = ( LC_DATADIFF * 24 ) * 60.

       IF lc_hora_fim <= lc_hora_ini.
          RESULT = LC_minutos - ( ( LC_HORA_INI - LC_HORA_FIM ) / 60 ).
       ELSE.
          RESULT = LC_minutos - ( LC_HORADIFF / 60 ).
       ENDIF.
     ENDIF.
ELSE.
   RESULT = 0.
ENDIF.

Nenhum comentário: