Программисты ABAP часто сталкиваются с задачей сделать какие-то действия с датами. Требуются такие действия как прибавить/вычесть определённое количество дней/часов, найти разницу между датами, найти последний или первый день месяца и другие мелкие задачки.
Задача всегда очевидна, но иногда на неё тратится больше времени, чем хотелось бы из-за траты времени на поиск нужного ФМ, который сделает это действие корректно, учитывая календарь и другие нюансы. И даже если ты использовал ранее этот ФМ, то забыв его название ты будешь рыскать по системе вспоминая где же я его использовал или гуглить и вспоминать в какой же из ссылок был он самый. Знакомая ситуация?
Поэтому решил собрать воедино функциональные модули ABAP для работы с датами, чтобы больше не возникало вопросов: а где же найти эту информацию? Здесь!
ВАЖНО! Всех ФМ я конечно не знаю и никто не знает, поэтому к сбору этой базы я привлекаю всё наше ABAP сообщество! Оно уже внушительное: YouTube: 1320, VK: 873, YouCoder.ru: 205 Telegram: 97, Дзен: 59, Rutube: 2 :). Подписывайтесь, если не знали о каком-то из каналов!
Пишите ФМ-ы, которые Вы используете в комментарии под этой статьёй и я буду оперативно обновлять её добавляя Ваши ФМ и пополняя нашу общую базу!
Разница между датами в ABAP SAP.
С помощью ФМ DAYS_BETWEEN_TWO_DATES мы можем быстро получить результат в виде разницы между датами в днях. Применений для этого ФМ масса: посчитать количество дней до конца срока оплаты, найти дни до окончания договора и т.д.
CALL FUNCTION 'DAYS_BETWEEN_TWO_DATES'
EXPORTING
i_datum_bis = sy-datum
i_datum_von = iv_date
IMPORTING
e_tage = rv_days
EXCEPTIONS
OTHERS = 2.
Параметры:
- i_datum_bis - из которой вычитаем. (i_datum_bis = 13.04.2022)
- i_datum_von - которую вычитаем. (i_datum_bis = 08.04.2022)
- e_tage - разница дней. (e_tage = 5).
Добавить/Отнять дни/часы к/от даты в ABAP SAP.
Вычесть дни из даты в ABAP или добавить их очень полезный функционал, который можно реализовать с помощью ФМ TZTF_ADD_DAY. Вызов этого ФМ позволит к примеру получать данные за последние n дней, где n вводит пользователь или найти дату окончания резерва, которая например 14 дней после заказа и многое другое.
CALL FUNCTION 'TZTF_ADD_DAY'
EXPORTING
if_date = sy-datum
if_time = CONV t( 0 )
if_value = - CONV i( <nval> )
IMPORTING
ef_date = lv_date.
Параметры:
- if_date - дата из которой вычитаем (if_date = 16.04.2022)
- if_time - время, которое вычитаем ( if_time = 0)
- if_value - дни, которые вычитаем (if_value = 17 )
- ef_date - дата результат ( ef_date = 03.05.2022 )
Добавить/Отнять месяц к/от даты в ABAP SAP.
Операции с месяцами не столь частые, но так же полезные. Например, рассчитать дату окончания договора, который истекает через пол года. Для того чтобы отнять нужное кол-во месяцев, мы просто передаём в параметр months отрицательное число.
CALL FUNCTION 'MONTH_PLUS_DETERMINE'
EXPORTING
months = '-1'
olddate = lv_datum
IMPORTING
newdate = lv_datum.
Параметры:
- months - число месяцев. (months = 6)
- olddate - начальная дата, до действия (olddate = 18.04.2022)
- newdate - результат, после действия(newdate = 18.10.2022)
Последний/Первый день месяца в ABAP SAP.
Задача с получением первого и последнего месяца в ABAP возникает не редко. Например, вывести на экран заказы за текущий месяц, вне зависимости от того какое сегодня число. Или посчитать оборот за этот месяц и так далее.
Задача с первым днём месяца решается без применения каких либо ФМ или методов следующим образом:
lv_begda = |{ lv_date(6) }01|.
То есть у исходной даты просто меняем число на первое и готово.
Для получения последнего дня текущего месяца в ABAP программе можно применить ФМ RP_LAST_DAY_OF_MONTHS.
CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS'
EXPORTING
day_in = lv_datum
IMPORTING
last_day_of_month = lv_datum
EXCEPTIONS
OTHERS = 0.
Параметры:
- day_in - исходная дата. (day_in = 18.04.2022)
- last_day_of_month - последний день месяца (last_day_of_month = 30.04.2022)
А какие ФМ для работы с датами и временем используешь ты?
Пиши свои варианты в комментариях и вместе создадим большую и полезную базу знаний!
Дополнительно: Некоторых ФМ может не быть в Вашей системе, поэтому ФМы с одинаковыми функциями тоже подойдут!