Текущее время: Вс, июл 27 2025, 17:21

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Как округлить до 10 минут переменную тира timestampl ?
СообщениеДобавлено: Ср, ноя 07 2007, 15:37 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, май 24 2006, 09:33
Сообщения: 154
Откуда: Москва
предположим
есть дата:
20071112235600
хочу получить
20071112240000
при округлении в меньшую сторону справлюс сам :)

интересует самый простой способ реализации.
заранее благодарен.

_________________
Best regards
Dolbnev Alexandr


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как округлить до 10 минут переменную тира timestampl ?
СообщениеДобавлено: Ср, ноя 07 2007, 16:08 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
Lexx_nv написал(а):
предположим
есть дата:
20071112235600
хочу получить
20071112240000
при округлении в меньшую сторону справлюс сам :)

интересует самый простой способ реализации.
заранее благодарен.

Code:
DATA: gv_timestamp TYPE timestamp,
      gv_char15 TYPE char15.

WRITE gv_timestamp TO gv_char15 NO-GROUPING ROUND 4.
gv_timestamp = gv_char15 * 10000.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 07 2007, 16:13 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, май 24 2006, 09:33
Сообщения: 154
Откуда: Москва
Что то интересное
сейчас проверю

_________________
Best regards
Dolbnev Alexandr


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 07 2007, 16:16 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, май 24 2006, 09:33
Сообщения: 154
Откуда: Москва
сработало
блеск.
спасибо

_________________
Best regards
Dolbnev Alexandr


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 07 2007, 16:18 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Вот так вот, наверное, правильнее:
Code:
data: t type timestampl
    , i type i
    .
t = '20071112235600'.

t = ( t + 500 ) div 1000 * 1000 .
i = t mod 10000.
if i = 6000. t = t + 4000. endif.

write / t no-GROUPING.


Последний раз редактировалось sibrin Ср, ноя 07 2007, 22:01, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 07 2007, 16:48 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, май 24 2006, 09:33
Сообщения: 154
Откуда: Москва
эт все хорошо
а округление в большую сторон ?
2359
чтобы
0000 след дня показало ?

_________________
Best regards
Dolbnev Alexandr


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср, ноя 07 2007, 17:13 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Lexx_nv написал(а):
эт все хорошо
а округление в большую сторон ?
2359
чтобы
0000 след дня показало ?

:) Ну, ещё пару условий добавить:
Code:
data: t type timestampl.
t = '20071230235900'.
write t no-GROUPING DECIMALS 0.

data: i type i
    , j type i
    , d type d
    , c(15)
    .

t = ( t + 500 ) div 1000 * 1000 .
i = t mod 10000.
if i = 6000. t = t + 4000. endif.
i = t mod 1000000.
if i = 240000.
  i = t div 1000000.
  write i to c LEFT-JUSTIFIED NO-GROUPING.
  d = c.
  d = d + 1.
  c = d.
  j = c.
  t = t  + ( j - i ) * 1000000 .
endif.

write / t no-GROUPING DECIMALS 0.


Другой вариант: пересчитать дату в минуты с 1 января 1970 года, округлить, а потом обратно в дату, например, при помощи ф.м. DURATION_DETERMINE и END_TIME_DETERMINE, START_TIME_DETERMINE.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, ноя 08 2007, 09:23 
Директор
Директор

Зарегистрирован:
Чт, июн 21 2007, 09:01
Сообщения: 904
Откуда: УЖ 15/2
Пол: Мужской
sibrin написал:
Другой вариант: пересчитать дату в минуты с 1 января 1970 года, округлить, а потом обратно в дату, например, при помощи ф.м. DURATION_DETERMINE и END_TIME_DETERMINE, START_TIME_DETERMINE.

В аддоне IS-H ("Здравоохранение") есть что-то похожее:
ФМ ISHMED_ROUND_TIME
Code:
FUNCTION ISHMED_ROUND_TIME.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*"  IMPORTING
*"     VALUE(I_ROUND_MINUTE) TYPE  I DEFAULT 30
*"  CHANGING
*"     VALUE(C_DATE) TYPE  SY-DATUM DEFAULT SY-DATUM
*"     VALUE(C_TIME) TYPE  SY-UZEIT DEFAULT SY-UZEIT
*"----------------------------------------------------------------------
  data: l_hour type i,
        l_min  type i,
        l_sec  type i,
*       L_SUM muss Typ 'F' sein, sonst wird falsch gerechnet!!!
        l_sum  type f,
        l_time type sy-uzeit.


* Fichte, Nr 2845: Neue Rundungsmethode
  IF c_date < '19000101'.
    c_date = sy-datum.
    c_time = sy-uzeit.
  ENDIF.
  l_hour = c_time(2).
  l_min  = c_time+2(2).
  l_sec  = c_time+4(2).
* Achtung: 00:00:00 soll 00:00:00 bleiben. Erst 00:00:01
* wird z.B zu 00:30:00
  l_sum  = l_hour * 3600 + l_min * 60 + l_sec - 1.
  IF l_sum < 0.
    l_sum = 24 * 60 * 60 - 1.
  ENDIF.
  l_sum = ( TRUNC( l_sum / ( i_round_minute * 60 ) ) + 1 )
            * ( i_round_minute * 60 ).
  IF l_sum >= 86400.            " 60 Sec * 60 Min * 24 Hour
    l_sum = l_sum - 86400.
  ENDIF.
  l_hour = trunc( l_sum / 3600 ).
  l_min  = trunc( ( l_sum - l_hour * 3600 ) / 60 ).
  WRITE l_hour TO l_time(2)   USING EDIT MASK 'RR__'.
  WRITE l_min  TO l_time+2(2) USING EDIT MASK 'RR__'.
  WRITE '00' TO l_time+4(2).
  TRANSLATE l_time USING ' 0'.
  IF l_time < c_time.
    c_date = c_date + 1.
  ENDIF.
  c_time = l_time.
ENDFUNCTION.


Code:
                                                                   
  Параметры импорта               Значение                                     
                                                                               
  I_ROUND_MINUTE                  10                                           
                                                                               
                                                                               
  Изменяемые параметры            Значение                                     
                                                                               
  C_DATE                          31.12.2007                                   
                   Результат:     01.01.2008                                   
  C_TIME                          23:59:35                                     
                   Результат:     00:00:00                                     

Может кому-то будет интересен исходник.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB