Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Function module to fine closest date among given date

Former Member
0 Likes
1,064

Hi All,

Is there any function module to find closest date among given dates?

Thanks in advance

3 REPLIES 3
Read only

Former Member
585

closest means come with clear questions

Thanks and Regards,

Thirukumaran. R

Read only

Former Member
0 Likes
585

Hi

I think there is no FM module available which will satisy this requirement...

But You can develope one ZFM or You can write a code for it...

Logic will be

Check out below code...

PARAMETERS : P_DATE TYPE SY-DATUM DEFAULT '20090909'.
DATA : BEGIN OF WA_ITAB,
        DATE TYPE SY-DATUM,
       END OF WA_ITAB.
DATA : ITAB LIKE STANDARD TABLE OF WA_ITAB.
DATA : IND TYPE SY-TABIX,
        IND2 TYPE SY-TABIX,
        IND3 TYPE SY-TABIX,
        DATE1 TYPE SY-DATUM,
        DATE2 TYPE SY-DATUM,
        DIFF1 TYPE I,
        DIFF2 TYPE I,
        UTTER_CLOSE TYPE SY-DATUM.
CLEAR : WA_ITAB, ITAB[].
WA_ITAB-DATE = '20090824'.
APPEND WA_ITAB TO ITAB.
CLEAR : WA_ITAB.
WA_ITAB-DATE = '20090901'.
APPEND WA_ITAB TO ITAB.
CLEAR : WA_ITAB.
WA_ITAB-DATE = '20090912'.
APPEND WA_ITAB TO ITAB.
CLEAR : WA_ITAB.
WA_ITAB-DATE = '20090930'.
APPEND WA_ITAB TO ITAB.
CLEAR : WA_ITAB.
WA_ITAB-DATE = '20091011'.
APPEND WA_ITAB TO ITAB.
CLEAR : WA_ITAB.
WA_ITAB-DATE = P_DATE. " P_DATE ==> Your Key Date
APPEND WA_ITAB TO ITAB.
CLEAR : WA_ITAB.
SORT ITAB BY DATE.
DELETE ADJACENT DUPLICATES FROM ITAB COMPARING DATE.
READ TABLE ITAB INTO WA_ITAB WITH KEY DATE = P_DATE.
IF SY-SUBRC = 0.
  IND = SY-TABIX.
ENDIF.
IND2 = IND - 1.
IND3 = IND + 1.
READ TABLE ITAB INTO WA_ITAB INDEX IND2.
IF SY-SUBRC = 0.
  DATE1 = WA_ITAB-DATE.
ENDIF.
READ TABLE ITAB INTO WA_ITAB INDEX IND3.
IF SY-SUBRC = 0.
  DATE2 = WA_ITAB-DATE.
ENDIF.
CLEAR : DIFF1 , DIFF2.
DIFF1 = P_DATE - DATE1.
DIFF2 = P_DATE - DATE2.
IF DIFF1 = DIFF2.  
UTTER_CLOSE = DATE1. " or date2 either
ELSEIF DIFF1 > DIFF2.
  UTTER_CLOSE = DATE2.
ELSEIF DIFF1 < DIFF2.
  UTTER_CLOSE = DATE1.
ENDIF.
WRITE : / 'Key Date ' , P_DATE.
WRITE : / 'Lower Closest Date ' , DATE1.
WRITE : / 'Upper Closest Date ' , DATE2.
WRITE : / 'Utter Close Date based on key date ', P_DATE , ' is ' , UTTER_CLOSE.

Hope it will solve your problem..

Thanks & Regards

ilesh 24x7

ilesh Nandaniya

Edited by: ilesh 24x7 on Sep 19, 2009 3:54 PM

Read only

0 Likes
585

Hello Ilesh,

Thanks for the above code lines. It's working in my case.

Regards,

Kishore.