ABAP-запрос относительно добавления месяцев к дате - PullRequest
3 голосов
/ 03 декабря 2011

Мне было дано следующее назначение:

У меня будет окно ввода на экране выбора, в котором пользователь вводит дату, и другое поле ввода, в котором он вводит количество месяцев.

У меня естьДля этого нужно добавить указанное количество месяцев к дате и получить новую дату.

Пример: если введенная дата равна 2/3/2011, а заданное количество месяцев равно 5, то я должен получить 7/3/2011.

Я знаю, что системная переменная даты 'SY-DATUM' имеет дату сервера приложений.И чтобы манипулировать датами, я могу сказать, что SY-DATUM + 2 .i могу добавить только дни, как мне добавить месяцы.

Пожалуйста, начните с меня. Спасибо.

Ответы [ 3 ]

9 голосов
/ 03 декабря 2011

Простой способ добавить число месяцев к дате - использовать функциональный модуль MONTH_PLUS_DETERMINE.

Использовать что-то вроде:

data: mydate type sy-datum.
mydate = sy-datum.

call function 'MONTH_PLUS_DETERMINE'
 exporting
  MONTHS  = 5
  OLDDATE = mydate
 importing
  NEWDATE = mydate.

(MONTHS может бытьотрицательный, если вы хотите вычесть.)

Существует множество других вспомогательных функций для вычисления даты и времени. Полезные функциональные модули ABAP в SDN Wiki - хорошее место для поиска подобных вещей.

0 голосов
/ 07 февраля 2014

Просто передайте месяцы и дату ниже FM, чтобы получить новую дату.

DATA : LV_NEWDATE TYPE SY-DATUM.
CALL FUNCTION 'BKK_ADD_MONTH_TO_DATE'
                EXPORTING
                  MONTHS  = LV_MONTH " pass months to add
                  OLDDATE = LV_DATE "pass date here
                IMPORTING
                  NEWDATE = LV_NEWDATE. "get new date
0 голосов
/ 01 ноября 2013

@ Мат дал правильный ответ.Если вы хотите сделать это без функционального модуля (какой бы ни была ваша причина) и следуя вашему примеру в своем вопросе, вы можете подойти к своей проблеме следующим образом:

data: lv_month type i;
lv_month = sy-datum+4(2).
sy-datum+4(2) = lv_month + 5.
// Check if months are > 12, if so, subtract 12 and increase sy-datum+0(4). Remember to loop if the input can be greater than 12 months.

Как уже упоминалось @Mat, незаново изобрести колесо.Приведенный выше подход не очень приятен, и функциональные модули быстрее доставят вас к месту назначения.

...