Текущее время: Пт, ноя 17 2017, 21:09

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Получить дату из номера рабочего дня
СообщениеДобавлено: Пт, май 12 2017, 14:56 
Старший специалист
Старший специалист

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


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получить дату из номера рабочего дня
СообщениеДобавлено: Пт, май 12 2017, 16:04 
Специалист
Специалист

Зарегистрирован:
Пн, мар 12 2012, 10:38
Сообщения: 113
Не знаю есть ли этот ФМ во всех версиях.
BKK_ADD_WORKINGDAY

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

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Получить дату из номера рабочего дня
СообщениеДобавлено: Пт, май 12 2017, 16:19 
Старший специалист
Старший специалист

Зарегистрирован:
Вт, апр 25 2006, 16:14
Сообщения: 280
Нет такого.
Пришлось поплясать с бубном. Вроде работает вот так:
Код:
   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 а не календарной.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получить дату из номера рабочего дня
СообщениеДобавлено: Пт, май 12 2017, 17:49 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, окт 13 2011, 23:45
Сообщения: 438
А если FACTORY_CALENDAR_ID взять такой, у которого все дни рабочие? ну или создать на 20-30 лет вперед?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Получить дату из номера рабочего дня
СообщениеДобавлено: Чт, май 18 2017, 11:28 
Специалист
Специалист

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


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

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


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

Сейчас этот форум просматривают: BingBot и гости: 12


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

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