Текущее время: Пт, апр 20 2018, 07:23

Часовой пояс: 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
Сообщения: 121
Не знаю есть ли этот ФМ во всех версиях.
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
Нет такого.
Пришлось поплясать с бубном. Вроде работает вот так:
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 а не календарной.


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

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


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

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


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

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


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

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


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

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