Функции работы с датами

Автор Uukrul, Червень 18, 2007, 06:49:46 ПП

Попередня тема - Наступна тема

0 Користувачі і 2 Гостей дивляться цю тему.

Uukrul

FIMA_DAYS_AND_MONTHS_AND_YEARS - Рассчитывает количество дней, месяцев и лет между двумя датами. Пару параметров данной функции я несколько не понял, зачем... точнее когда их можно применить. Высокосный год вроде как знает. Дату возвращает на день меньше не включая последний день периода, т.е. между 01 и 10 числом месяца будет возвращено 9 дней. Интересный флажок  I_FLG_SEPARATE. Если в нем пустое значение, то  для даты например 01.01.2014 по 10.01.2014 будет возвращено 9 дней, 1 месяц и 1 год, если же задать любое значение например "-" или "Х" то будет взращено 9 дней, 0 месяцев и 0 лет. Смысловой нагрузки I_KEY_DAY_FROM и I_KEY_DAY_TO не понял немного. А так вполне рабочая функция.


DATA: l_days LIKE vtbbewe-atage,
      l_months LIKE vtbbewe-atage,
      l_years LIKE vtbbewe-atage.

CALL FUNCTION 'FIMA_DAYS_AND_MONTHS_AND_YEARS'
  EXPORTING
    i_date_from    = '20140101'
*   I_KEY_DAY_FROM =
    i_date_to      = '20150531'
*   I_KEY_DAY_TO   =
*   I_FLG_SEPARATE = ' '
  IMPORTING
    e_days         = l_days
    e_months       = l_months
    e_years        = l_years.
.
WRITE: / l_days, l_months, l_years.

mvs87

Спасибо всем кто накидал функции. Пригодились.

Понадобились дата время в коротком текстовом виде 15.01.14 08:00 - 15.01.14 08:00
Набросал свою функцию:


FUNCTION ZZ_MVS_DATE_TIME_TO_SHORT.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  IMPORTING
*"     REFERENCE(DATE_FROM) TYPE  SYDATUM
*"     REFERENCE(TIME_FROM) TYPE  SYUZEIT
*"     REFERENCE(DATE_TO) TYPE  SYDATUM OPTIONAL
*"     REFERENCE(TIME_TO) TYPE  SYUZEIT OPTIONAL
*"  EXPORTING
*"     REFERENCE(SHORT_DATE_TIME) TYPE  CHAR31
*"----------------------------------------------------------------------

DATA: L_TDAT6(8), I_TIME4(5), PART1(14), PART2(14).

CHECK DATE_FROM NE SPACE.

CLEAR: SHORT_DATE_TIME, L_TDAT6, I_TIME4.


CALL FUNCTION 'DATUMSAUFBEREITUNG'
  EXPORTING FLAGM = 'X' FLAGW = 'X' IDATE = DATE_FROM
  IMPORTING TDAT6 = L_TDAT6 .

  CONCATENATE TIME_FROM(2) ':' TIME_FROM+2(2)
         INTO I_TIME4.

  CONCATENATE L_TDAT6 I_TIME4
         INTO SHORT_DATE_TIME
SEPARATED BY SPACE.

CLEAR: L_TDAT6, I_TIME4.

IF DATE_TO ne 0.
  CALL FUNCTION 'DATUMSAUFBEREITUNG'
    EXPORTING FLAGM = 'X' FLAGW = 'X' IDATE = DATE_TO
    IMPORTING TDAT6 = L_TDAT6 .

  CONCATENATE TIME_FROM(2) ':' TIME_FROM+2(2)
         INTO I_TIME4.

  CONCATENATE SHORT_DATE_TIME '-' L_TDAT6 I_TIME4
         INTO SHORT_DATE_TIME
SEPARATED BY SPACE.
ENDIF.

ENDFUNCTION.
Высшая степень уважения к клиенту - это разработать программу не так как он хочет, так как следует!

Uukrul

FIRST_AND_LAST_DAY_IN_YEAR_GET - Для года и варианта финансового года возвращает начальную и конечную дату периода. В наших реалиях конечно, где вариант обычно К4 значения эта функция не имеет, но если делается что-то универсальное, то конечно на вариант года обращать внимание стоит.


Uukrul

J_3RF_DATE - Возвращает строку даты в текстовом виде с правильным склонением месяца.


DATA f_date  TYPE bkpf-bldat.
DATA f_day   TYPE char2.
DATA f_month TYPE char10.
DATA f_year  TYPE char4.

CALL FUNCTION 'J_3RF_DATE'
  EXPORTING
    f_date  = sy-datum
  IMPORTING
    f_day   = f_day
    f_month = f_month
    f_year  = f_year.

Uukrul

Цитата: ysichov від Червень 28, 2015, 02:29:16 ПП
В функции BCA_US_DATES_CALC_DATE  нашел только типы 1-3. Выкрутился типом 3 для квартала и года с шагом 3 и 12 соответственно.- Небольшой
Ну как бы ранее уже было тут же: http://sapforum.biz/index.php?topic=14.msg13255#msg13255

Uukrul

SLIM_GET_QUARTERLY_PERIODS - Позволяет получить начало и конец периода для каждого квартала в виде диапазона RANGES, иногда полезно для быстрого получения начала и конца квартала.


    DATA: lr_periods       TYPE slim_s_date_range.

    CALL FUNCTION 'SLIM_GET_QUARTERLY_PERIODS'
      EXPORTING
        slim_meas_date = sy-datum
      TABLES
        periods        = lr_periods.

Из интересного эффекта,  данный модуль почему-то возвращает кварталы предыдущего года от переданной даты. Ну так вот его написали.

Uukrul

ISH_QUARTER_GET - Возвращает дату начала и конца квартала для даты которая передана в функцию.


SMF spam blocked by CleanTalk