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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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