quinta-feira, 21 de maio de 2015

Função - SD_CALC_DURATION_FROM_DATETIME

*  Boa tarde galera, quem é vivo sempre aparece, hoje vou mostrar
* uma função muito boa que te retorna o intervalo entre duas datas
* em horas, minutos e se for esperto até os segundo, usei essa função
* pra criar uma regra de criticidade das datas onde a empresa deveria
* dar retorno ao cliente deles.
*  Vamos lá então porque a função é simples, e de brinde executei a
* rotina de conversão, pra vocês compararem os valores coloquei um
* break-point no meio do processo.
*  Bons estudos e espero ter ajudado.
*--------------------------------------------------------------------*

REPORT zfunction_calc_Interval_date_hour.

*  Tela de seleão com parametros e um CheckBox caso queira usar a rotina
* de conversão.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS :
  p_date2 TYPE sy-datum" Data
  p_time2 TYPE sy-uzeit" Hora
SELECTION-SCREEN END OF BLOCK   b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.
PARAMETERS :
  cb_conv AS CHECKBOX.   " Rotina de Conversão.
SELECTION-SCREEN END OF BLOCK   b2.

DATA :
  l_tdiff    TYPE tvro-fahztd,
  l_duration(10),
  l_hour_bpm TYPE i
  .

* Essa é a função.... Simples e rápida.
CALL FUNCTION 'SD_CALC_DURATION_FROM_DATETIME'
  EXPORTING
    i_date1          sy-datum
    i_time1          sy-uzeit
    i_date2          p_date2
    i_time2          p_time2
  IMPORTING
    e_tdiff          l_tdiff
  EXCEPTIONS
    invalid_datetime 1
    OTHERS           2.

BREAK-POINT.

IF cb_conv IS NOT INITIAL.
*  Rotina de conversão da variavel l_tdiff ( Dominio TSTRDURAN )
  CALL FUNCTION 'CONVERSION_EXIT_TSTRN_OUTPUT'
    EXPORTING
      input  l_tdiff
    IMPORTING
      output l_duration.

ELSE.
*  A minha rotina eu retiro os Minutos tambem, mas se repararem a 
* função retorna os segundos também, caso queira.
  UNPACK l_tdiff TO l_duration.
* Excluding ( MMSS )
  DO TIMES.
    SHIFT l_duration RIGHT.
  ENDDO.
  PACK l_duration TO l_duration.

ENDIF.

WRITE l_duration.

2 comentários:

  1. Bom dia, como eu faria para mostrar os segundos ?

    ResponderExcluir
  2. Fala Diego, belezinha ? Acredito que somente tirando o comando SHIFT que fiz no programa do post, assim você vai ter os segundos e assim conseguir trabalhar com essa informação. Espero ter ajudado. vlw.

    ResponderExcluir