REPORT ZSAPeiros.
PARAMETERS:
p_hora(3) TYPE c. "Hora a adicionar
DATA:
lv_hh(5) TYPE n, "Horas
lv_mm(5) TYPE n, "Minutos
lv_ss(5) TYPE n, "Segundos
lv_msg(20) TYPE c, "Mensagem
lv_ss_tot(10) TYPE c, "Total de segundos
lv_dd_tot(10) TYPE c, "Total de dias
lv_hrprv TYPE sy-uzeit, "Hora prevista
lv_dtprv TYPE sy-datum. "Data prevista
INITIALIZATION.
%_p_hora_%_app_%-text = 'Horas a somar:'.
END-OF-SELECTION.
lv_hh = sy-uzeit+0(2) + p_hora.
lv_mm = sy-uzeit+2(2).
lv_ss = sy-uzeit+4(2).
lv_ss_tot = ( lv_hh * 3600 ) + ( lv_mm * 60 ) + lv_ss.
* 86400 é o total de segundos de 1 dia
IF lv_ss_tot > 86400.
lv_dd_tot = TRUNC( lv_ss_tot / 86400 ).
lv_dtprv = sy-datum + lv_dd_tot.
ELSE.
lv_dtprv = sy-datum.
ENDIF.
lv_hrprv = sy-uzeit.
* Utilizar a soma da hora real, ou seja, subtraindo a cada 24hs
IF lv_hh >= 24.
DO.
IF lv_hh >= 24.
lv_hh = lv_hh - 24.
ELSE.
EXIT.
ENDIF.
ENDDO.
ENDIF.
lv_hrprv(2) = lv_hh.
* Data
lv_msg = 'Data atual:'.
WRITE: / lv_msg, sy-datum.
CLEAR lv_msg.
CONCATENATE 'Data +' p_hora 'Horas:' INTO lv_msg SEPARATED BY space.
WRITE: / lv_msg, lv_dtprv.
* Hora
lv_msg = 'Hora atual:'.
WRITE: / lv_msg, sy-uzeit.
CLEAR lv_msg.
CONCATENATE 'Hora +' p_hora 'Horas:' INTO lv_msg SEPARATED BY space.
WRITE: / lv_msg, lv_hrprv.
Conteúdo
Somar horas na data
Não é muito comum querer somar horas em uma data, mas as vezes acontece. Sim, existem funções que fazem parte deste procedimento, mas o ideal é entender e não utilizar funções.