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

Date validation

Former Member
0 Likes
1,293

Hi Guys!

I have a select-option Date field. I Have to give default values to both High and Low. The Date-high will have current date and Date-low should be one month back from current date. Any idea on hw to do the Validation for this....Do i need a fn module for this in my At-selection screen event?

Thanks & Regards,

San

1 ACCEPTED SOLUTION
Read only

ferry_lianto
Active Contributor
0 Likes
1,242

Hi,

You can do something like this.


data: v_date1 like sy-datum,
      v_date2 like sy-datum.

SELECT-OPTIONS: s_date for sy-datum.

 
INITIALIZATION.
s_date-sign   = 'I'.
s_date-option = 'BT'.
s_date-low    = sy-datum - 30.
s_date-high   = sy-datum.
append s_date.


AT SELECTION SCREEN ON s_date.
IF NOT s_date[] IS INITIAL.
v_date1 = sy-datum - 30.
v_date2 = sy-datum.

IF s_date-low ne v_date1.
 message e000 with 'Start date should be a month ago'.
ENDIF.
 
IF s_date-high ne v_date2.
 message e000 WITH 'End date should be today's date'.
ENDIF.

ENDIF.

Regards,

Ferry Lianto

11 REPLIES 11
Read only

Former Member
0 Likes
1,242

Hi San,

Try this:

data : v_date like sy-datum.

data : v_date1 like sydatum.

intialization.

move sydatum to v_date.

v_date1 = v_date-30.

move v_date to s_date-low.

move v_date1 to s_date-high..

start-of-selection,

-


-


Hope this helps you. Reply for queries

Regards,

kumar,

Read only

Former Member
0 Likes
1,242

Hi San,

You do not need to find any function module for this validations you can do manually also.


**in the event AT SELECTION-SCREEN
**get the month from the Date-High and Date-low.
**then

W_DIFF = MONTH_HIGH - MONTH-LOW.
IF NOT W_DIFF = '1'.
**display an appropriate error message
ENDIF.

Regards,

Kunjal

Read only

ferry_lianto
Active Contributor
0 Likes
1,243

Hi,

You can do something like this.


data: v_date1 like sy-datum,
      v_date2 like sy-datum.

SELECT-OPTIONS: s_date for sy-datum.

 
INITIALIZATION.
s_date-sign   = 'I'.
s_date-option = 'BT'.
s_date-low    = sy-datum - 30.
s_date-high   = sy-datum.
append s_date.


AT SELECTION SCREEN ON s_date.
IF NOT s_date[] IS INITIAL.
v_date1 = sy-datum - 30.
v_date2 = sy-datum.

IF s_date-low ne v_date1.
 message e000 with 'Start date should be a month ago'.
ENDIF.
 
IF s_date-high ne v_date2.
 message e000 WITH 'End date should be today's date'.
ENDIF.

ENDIF.

Regards,

Ferry Lianto

Read only

Former Member
0 Likes
1,242

write your code to make the deafult values for select option in the "LOAD-OF-PROGRAM" event block.

Read only

Former Member
0 Likes
1,242

Hi,

Please check this.

REPORT ZKALTEST1 .

data: date like sy-datum.

data: date1 like sy-datum.

INITIALIZATION.

date = sy-datum.

date1 = sy-datum - 30.

select-options s_date for date.

s_date-low = date1.

s_date-high = date.

append s_date.

top-of-page.

write: 'hello'.

start-of-selection.

*write:/ 'how r u'.

Regds,

kaleem.

Reward help ful answer,

Thanks.

Read only

Former Member
0 Likes
1,242

Hi,

Do the defaults in initialisation event.

initialisation.

s_date-high = sy-datum.

s_date-low = sy-datum-30.

append s_date.

hope this helps you,

keerthi

Read only

Former Member
0 Likes
1,242

Exec the code .

Write the code in Initialization event.

tables : vbak.
select-options : s_date for vbak-erdat.

data : bkdate like sy-datum.
initialization.
s_date-high = sy-datum.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
  EXPORTING
    date            = sy-datum
    days            = 00
    months          = 01
    SIGNUM          = '-'
    years           = 00
 IMPORTING
   CALC_DATE       = bkdate.
   s_Date-low  = bkdate.


append s_Date.

I didnt get why a Validation is required here .

Low and high dates are in place , anything im missing.

Regards,

Vijay

Read only

Former Member
0 Likes
1,242

Hi ,

When you say default values then you have do this INITIAILIZATIONevent

for date high values you can use sy-datum .

foir low values you can have a function module RP_CALC_DATE_IN_INTERVAL

to fill the low value.

Please reward if useful.

Read only

Former Member
0 Likes
1,242

Hi San

If u use the below code i think no validation is required

data:

w_date like sy-datum.

select-options:

s_date for w_date.

initialization.

s_date-high = sy-datum.

CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'

EXPORTING

DATE = s_date-high

DAYS = 0

MONTHS = 1

SIGNUM = '-'

YEARS = 0

IMPORTING

CALC_DATE = w_date .

s_date-low = w_date.

append s_date.

Reward all helpful answers

Read only

Former Member
0 Likes
1,242

You can use the following code for checking whether a date is valid or not:

DATA:

LW_D(2) TYPE N,

LW_M(2) TYPE N,

LW_Y(4) TYPE N,

LW_REM TYPE N,

LW_VALID TYPE N VALUE 1,

LW_DATE(8) TYPE C,

LW_FLAG TYPE I.

IF P_OR_DAT CO '0123456789'.

LW_DATE = P_OR_DAT.

LW_D = LW_DATE+6(2).

LW_M = LW_DATE+4(2).

LW_Y = LW_DATE+0(4).

IF LW_Y GT '0000' AND LW_Y LE '9999'.

IF LW_M GT '01' AND LW_M LE '12'.

  • Check for leap year

  • Set lw_flag if leap year

LW_REM = LW_Y MOD 100.

IF LW_REM = 0.

LW_REM = LW_Y MOD 400.

IF LW_REM = 0.

LW_FLAG = 1.

ENDIF.

ELSE.

LW_REM = LW_Y MOD 4.

IF LW_REM = 0.

LW_FLAG = 1.

ENDIF.

ENDIF.

  • Check for valid date

IF LW_M EQ 04 OR

LW_M EQ 06 OR

LW_M EQ 09 OR

LW_M EQ 11.

IF LW_D GT 30 OR

LW_D LT 1.

LW_VALID = 0.

ENDIF.

ELSEIF LW_M EQ 2.

IF LW_FLAG EQ 1.

IF LW_D LT 1 OR

LW_D GT 29.

LW_VALID = 0.

ENDIF.

ELSE.

IF LW_D LT 1 OR

LW_D GT 28.

LW_VALID = 0.

ENDIF.

ENDIF.

ELSE.

IF LW_D LT 1 OR

LW_D GT 31.

LW_VALID = 0.

ENDIF.

ENDIF.

ELSE.

LW_VALID = 0.

ENDIF.

ELSE.

LW_VALID = 0.

ENDIF.

IF LW_VALID = 0.

MESSAGE 'Invalid Date' TYPE 'E'.

ENDIF.

FS_SBOOK-ORDER_DATE = P_OR_DAT.

ELSE.

MESSAGE 'Date can not be characters' TYPE 'E'.

ENDIF.

Read only

Former Member
0 Likes
1,242

Thanks guys!

I had forgotton to give append S_date. Thats why it was not working!

I have given points for helpful answers!

Thanx.