SAPфорум.RU
https://sapboard.ru/forum/

Разница в днях в методе GET_DAYS_BETWEEN_TWO_DATES класса CL_RECA_DATE
https://sapboard.ru/forum/viewtopic.php?f=13&t=95976
Страница 1 из 1

Автор:  Склеротик [ Вт, янв 23 2018, 12:16 ]
Заголовок сообщения:  Разница в днях в методе GET_DAYS_BETWEEN_TWO_DATES класса CL_RECA_DATE

Сразу же отмечу что данный класс CL_RECA_DATE есть в ERP системах.
Если запустить тест метода GET_DAYS_BETWEEN_TWO_DATES данного класса с данными дата с 01.01.2014 по любая дата результатом будет 0.
Если взять хотя бы 31.12.2014 по любую дату результат будет уже правильный. Текст метода можно легко преобразовать в текст програмки и проверить результат. У меня один и тот же результат неверный = 0 получался в любой версии системы и любой платформе ОС.
Кто у себя проверит и получит правильный результат отпишите пожалуйста. Отмечу что зона времени RUS03.

Автор:  Timon&Pumba [ Вт, янв 23 2018, 13:24 ]
Заголовок сообщения:  Re: Разница в днях в методе GET_DAYS_BETWEEN_TWO_DATES класса CL_RECA_DATE

У нас все нормально кроме диапазона 01.01.2014 - 02.01.2014

Автор:  Склеротик [ Вт, янв 23 2018, 13:38 ]
Заголовок сообщения:  Re: Разница в днях в методе GET_DAYS_BETWEEN_TWO_DATES класса CL_RECA_DATE

Вот я про число 01.01.2014 и говорю.
Что получается при 01.01.2014 и например 01.02.2014? или 31.12.2013 и 01.01.2014?

Автор:  Timon&Pumba [ Вт, янв 23 2018, 14:03 ]
Заголовок сообщения:  Re: Разница в днях в методе GET_DAYS_BETWEEN_TWO_DATES класса CL_RECA_DATE

Склеротик написал:
Вот я про число 01.01.2014 и говорю.
Что получается при 01.01.2014 и например 01.02.2014? или 31.12.2013 и 01.01.2014?

02.01.2014 - 01.01.2014 = -1
01.01.2014 - 31.12.2013 = 1

Автор:  DED_MOROZ [ Вт, янв 23 2018, 14:08 ]
Заголовок сообщения:  Re: Разница в днях в методе GET_DAYS_BETWEEN_TWO_DATES класса CL_RECA_DATE

У меня все верно, в том числе и для ваших случаев:
01.01.2014 - 01.02.2014 = 31 день
31.12.2013 - 01.01.2014 = 1 день

P.S. Система S4

На всякий случай код метода:

METHOD get_days_between_two_dates.

DATA:
ld_tstmp_from TYPE tzntstmpl,
ld_tstmp_to TYPE tzntstmpl,
ld_seconds TYPE tzntstmpl.

* INIT RESULTS
rd_days = 0.

* BODY

* use timestamps for simple calculation
CONVERT DATE id_datefrom
INTO TIME STAMP ld_tstmp_from TIME ZONE sy-zonlo.

CONVERT DATE id_dateto
INTO TIME STAMP ld_tstmp_to TIME ZONE sy-zonlo.

* from and to are interchanged
IF ld_tstmp_from > ld_tstmp_to.
rd_days = -1.
RETURN.
ENDIF.

TRY.
ld_seconds = cl_abap_tstmp=>subtract(
tstmp1 = ld_tstmp_to
tstmp2 = ld_tstmp_from ).
CATCH cx_parameter_invalid_range cx_parameter_invalid_type .
ld_seconds = 0.
RETURN.
ENDTRY.

* convert seconds to days
rd_days = ld_seconds / ( 60 * 60 * 24 ).

Автор:  Удав [ Вт, янв 23 2018, 14:14 ]
Заголовок сообщения:  Re: Разница в днях в методе GET_DAYS_BETWEEN_TWO_DATES класса CL_RECA_DATE

use timestamps for simple calculation
CONVERT DATE id_datefrom
INTO TIME STAMP ld_tstmp_from TIME ZONE sy-zonlo.

CONVERT для даты '01.01.2014' и зоны RUS03
В NW 702 0019, 740 0011, 740 0013 выдает 0.

В NW 740 0012 выдает 20131231200000.
:roll:

Автор:  Timon&Pumba [ Вт, янв 23 2018, 14:30 ]
Заголовок сообщения:  Re: Разница в днях в методе GET_DAYS_BETWEEN_TWO_DATES класса CL_RECA_DATE

Склеротик написал:
Сразу же отмечу что данный класс CL_RECA_DATE есть в ERP системах.
Если запустить тест метода GET_DAYS_BETWEEN_TWO_DATES данного класса с данными дата с 01.01.2014 по любая дата результатом будет 0.
Если взять хотя бы 31.12.2014 по любую дату результат будет уже правильный. Текст метода можно легко преобразовать в текст програмки и проверить результат. У меня один и тот же результат неверный = 0 получался в любой версии системы и любой платформе ОС.
Кто у себя проверит и получит правильный результат отпишите пожалуйста. Отмечу что зона времени RUS03.

Это последствия перехода на зимнее время. (спасибо Медведеву)
У нас админ что-то химичил с настройками, но полностью проблему решить не удалось. Пришлось пожертвовать первым января 2014 года, дальше все нормально.

Автор:  Kuranov.Dmitry [ Вт, янв 23 2018, 14:33 ]
Заголовок сообщения:  Re: Разница в днях в методе GET_DAYS_BETWEEN_TWO_DATES класса CL_RECA_DATE

Удав написал(а):
use timestamps for simple calculation
CONVERT DATE id_datefrom
INTO TIME STAMP ld_tstmp_from TIME ZONE sy-zonlo.

CONVERT для даты '01.01.2014' и зоны RUS03
В NW 702 0019, 740 0011, 740 0013 выдает 0.

В NW 740 0012 выдает 20131231200000.
:roll:

проверил у нас в 4.7.
20131231210000

Автор:  Склеротик [ Вт, янв 23 2018, 14:59 ]
Заголовок сообщения:  Re: Разница в днях в методе GET_DAYS_BETWEEN_TWO_DATES класса CL_RECA_DATE

Всем большое спасибо за участие. Я тоже подозревал что это происки премьера в 2014 году.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/