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.
Calendário de fábrica - Dias úteis - Intervalo de datas
Função que retorna os dias úteis e o total de dias úteis de acordo com o calendário de fábrica desejado.
REPORT ZSAPeiros.
DATA:
lt_rke_dat TYPE TABLE OF rke_dat, "Tab. com os dias úteis
ls_rke_dat TYPE rke_dat. "Tab. com os dias úteis
DATA:
lv_datab TYPE kona-datab, "Data De
lv_datbi TYPE kona-datbi, "Data até
lv_days TYPE sy-tabix. "Index / Days
lv_datab = sy-datum. "Data de (hoje)
lv_datbi = sy-datum + 30. "Data até (mais 30 dias)
CLEAR lt_rke_dat[].
CALL FUNCTION 'RKE_SELECT_FACTDAYS_FOR_PERIOD'
EXPORTING
i_datab = lv_datab
i_datbi = lv_datbi
i_factid = 'BR' "Factory id (calendário)
TABLES
eth_dats = lt_rke_dat
EXCEPTIONS
date_conversion_error = 1
OTHERS = 2.
IF sy-subrc IS INITIAL.
DESCRIBE TABLE lt_rke_dat LINES lv_days.
ENDIF.
WRITE: / sy-uline.
WRITE: / 'Dias úteis:'.
WRITE: / sy-uline.
LOOP AT lt_rke_dat INTO ls_rke_dat.
WRITE: / ls_rke_dat-periodat.
ENDLOOP.
WRITE: / sy-uline.
WRITE: / 'Total de dias úteis:'.
WRITE: / sy-uline.
WRITE: / lv_days.
Popup com campos, preenchimento obrigatório, etc
Pode parecer besteira, mas se um dia você quiser um programa para gravar algumas informações no meio de um processo qualquer, se você puder abrir um popup com os campos para preencher seria ótimo. Você pode dar uma viajada e gerar isto dinâmico para realizar um select posteriormente, ou buscar informações, etc. Faça bom proveito.
REPORT ZSAPeiros.
DATA:
t_fields TYPE TABLE OF sval, "Atributos tabela
w_fields TYPE sval. "Atributos tabela
w_fields-tabname = 'MARA'.
w_fields-fieldname = 'MATNR'.
w_fields-field_obl = abap_true.
APPEND w_fields TO t_fields.
CLEAR w_fields.
w_fields-tabname = 'MARA'.
w_fields-fieldname = 'MEINS'.
APPEND w_fields TO t_fields.
CLEAR w_fields.
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
popup_title = 'Informe os dados corretamente'
IMPORTING
returncode = lv_retcode
TABLES
fields = t_fields.
IF lv_retcode NE 'E'. "Cancelar
LOOP AT t_fields INTO w_fields.
WRITE:/ w_fields-value.
ENDLOOP.
ENDIF.
Data por extenso, feriado, dia da semana, etc
Vamos deixar seu sapscript ou algum resultado mais bunitinho? Utilize esta função para gerar uma data por extenso, feriado, dia da semana, entre outras opções.
REPORT ZSAPeiros.
DATA: dt_extenso TYPE TABLE OF casdayattr WITH HEADER LINE.
CALL FUNCTION 'DAY_ATTRIBUTES_GET'
EXPORTING
date_from = '20121225'
date_to = '20121225'
language = sy-langu
TABLES
day_attributes = dt_extenso.
WRITE: / dt_extenso-day_string,
/ dt_extenso-freeday,
/ dt_extenso-holiday.
Assinar:
Postagens (Atom)