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

Получить дату из номера рабочего дня
https://sapboard.ru/forum/viewtopic.php?f=13&t=94850
Страница 1 из 1

Автор:  tdebug [ Пт, май 12 2017, 13:56 ]
Заголовок сообщения:  Получить дату из номера рабочего дня

Существует ли стандартная функция (класс), котороя позволяет получать дату по номеру рабочего дня месяца? Например нужно получить 5й рабочий день месяца - в марте 2017го 5е число воскресенье и 5й рабочий день это 7е марта.
Из того что удалось найти, функция DATE_CONVERT_TO_FACTORYDATE, но она работает не так как нужно - возвращает следующий или предыдущий рабочий день, если выбранный день нерабочий. Иными словами, даже если дать ей на вход 05.03.2017, на выходе будет 06.03.2017, а нужно получить 07.03.2017 т.к. 7е это 5й рабочий день в данном случае.

Автор:  Saperx [ Пт, май 12 2017, 15:04 ]
Заголовок сообщения:  Re: Получить дату из номера рабочего дня

Не знаю есть ли этот ФМ во всех версиях.
BKK_ADD_WORKINGDAY

На вход подаем начальную дату, на сколько рабочих дней хотим ее сместить и календарь.
Получаем итоговую дату.
Параметры импорта Значение
I_DATE 01.03.2017
I_DAYS 4
I_CALENDAR1 RU
I_CALENDAR2

Параметры экспорта Значение
E_DATE 07.03.2017
E_RETURN 0

Автор:  tdebug [ Пт, май 12 2017, 15:19 ]
Заголовок сообщения:  Re: Получить дату из номера рабочего дня

Нет такого.
Пришлось поплясать с бубном. Вроде работает вот так:
Code:
   CALL FUNCTION 'DATE_CONVERT_TO_FACTORYDATE'
             EXPORTING
*               CORRECT_OPTION                     = '+'
               DATE                               = CONV D( |{ LV_YEAR }{ LV_PERIOD }{ LV_FIRST }| )
               FACTORY_CALENDAR_ID                = 'XX'
            IMPORTING
*              DATE                               = LV_PERIOD_TO
              FACTORYDATE                        = lv_factorydate
*              WORKINGDAY_INDICATOR               =
            EXCEPTIONS
              CALENDAR_BUFFER_NOT_LOADABLE       = 1
              CORRECT_OPTION_INVALID             = 2
              DATE_AFTER_RANGE                   = 3
              DATE_BEFORE_RANGE                  = 4
              DATE_INVALID                       = 5
              FACTORY_CALENDAR_NOT_FOUND         = 6
              OTHERS                             = 7
                     .
           ADD 4 TO LV_FACTORYDATE.

        CALL FUNCTION 'FACTORYDATE_CONVERT_TO_DATE'
          EXPORTING
            FACTORYDATE                        = LV_FACTORYDATE
            FACTORY_CALENDAR_ID                = 'XX'
         IMPORTING
           DATE                               =  lv_period_to
         EXCEPTIONS
           CALENDAR_BUFFER_NOT_LOADABLE       = 1
           FACTORYDATE_AFTER_RANGE            = 2
           FACTORYDATE_BEFORE_RANGE           = 3
           FACTORYDATE_INVALID                = 4
           FACTORY_CALENDAR_ID_MISSING        = 5
           FACTORY_CALENDAR_NOT_FOUND         = 6
           OTHERS                             = 7
                  .


Т.е. инкрементировать на уровне FACTORYDATE а не календарной.

Автор:  gomer4ik [ Пт, май 12 2017, 16:49 ]
Заголовок сообщения:  Re: Получить дату из номера рабочего дня

А если FACTORY_CALENDAR_ID взять такой, у которого все дни рабочие? ну или создать на 20-30 лет вперед?

Автор:  Saperx [ Чт, май 18 2017, 10:28 ]
Заголовок сообщения:  Re: Получить дату из номера рабочего дня

В принципе это можно сэмулировать. ФМ day_attributes_get.
Передаем календари произв. и праздников, и диапазон дат. Нам вернется табличка с характеристиками для каждой даты. Удаляем все дни у которых стоит метка выходной день и селектим по индексу. Получаем сдвиг на n рабочих дней по календарю.

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