Распечатать сезонное упражнение с системной датой (sydatum) - PullRequest
0 голосов
/ 30 января 2012

Мне нужно написать программу, которая берет системную дату (sy-datum) и отображает сезон года на следующие 8 лет.

НАПИСАТЬ: current текущий сезон ’, сезон где вы добавляете три месяца к вашей дате и печатаете сезон & Дата. Остановим цикл, когда закончится конец 2020 года. Примечание: нужно использовать ABAP

Ответы [ 3 ]

1 голос
/ 30 января 2012

Я, конечно, предполагаю, что в вашей системе есть функциональный модуль ISP_MONTHS_TO_DATE. Если это не тот случай, вы должны искать * month * в SE37, есть тонна функциональных модулей для добавления месяцев к датам (если вы пытаетесь это сделатьэто сам, у вас будут ошибки).

REPORT zdemo.

DATA : l_date TYPE sy-datum.
DATA : l_season TYPE string.

l_date = sy-datum.

PERFORM get_season USING l_date CHANGING l_season.

WRITE: 'The current season is', l_season. NEW-LINE.

DO.

  CALL FUNCTION 'ISP_ADDING_MONTHS_TO_DATE'
    EXPORTING
      months     = 3
      start_date = l_date
    IMPORTING
      end_date   = l_date.

  IF l_date(4) GT 2020.
    EXIT.
  ENDIF.

  PERFORM get_season USING l_date CHANGING l_season.

  WRITE: 'The season on', l_date , 'is' , l_season. NEW-LINE.

ENDDO.

*&---------------------------------------------------------------------*
*&      Form  get_seasons
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->DATE       text
*      -->SEASON     text
*----------------------------------------------------------------------*
FORM get_season USING p_date TYPE sydatum CHANGING p_season TYPE string.

  IF p_date+4 LT '0321'.
    l_season = 'Winter'.
  ELSEIF p_date+4 LT '0621'.
    l_season = 'Spring'.
  ELSEIF p_date+4 LT '0921'.
    l_season = 'Summer'.
  ELSEIF p_date+4 LT '1221'.
    l_season = 'Fall'.
  ELSE.
    l_season = 'Winter'.
  ENDIF.

ENDFORM.                    "get_season
0 голосов
/ 02 января 2014

Я думаю, CL_RECA_DATE - это тот, кто ищет деньги.См. Этот пример.

DATA: l_date   TYPE sydatum,
      l_season TYPE string.

l_date = sy-datum.

WHILE l_date(4) <= 2020.
  WRITE /: 'The current season is'.

  CASE l_date+4(2).
    WHEN 1 or 2 or 12.  l_season = 'Spring'(001).
    WHEN 3 or 4 or 5.   l_season = 'Summer'(002).
    WHEN 6 or 7 or 8.   l_season = 'Fall'(003).
    WHEN 9 or 10 or 11. l_season = 'Winter'(004).
  ENDCASE.

  WRITE: l_season, l_date.

  l_date = cl_reca_date=>add_months_to_date( id_date   = l_date
                                             id_months = 3 ).
ENDWHILE.

Получить сезон можно с помощью оператора CASE if.В приведенном выше примере предполагается, что декабрь-февраль - зима, вы можете изменить это, если у вас другие требования.Для астрономического определения времен года вы можете разобрать l_date+4 с IF...ELSEIF.

0 голосов
/ 09 апреля 2012

В конструкторе функций имеется множество функциональных модулей для добавления месяцев к дате и возврата новой даты. Используйте их для определения даты, а затем используйте другую функцию для вычисления текущего месяца. Сравните их для определения сезонаи, следовательно, проблема решена.

...