‎2007 Jan 31 4:15 PM
I am working on a serial number validation code.2,3 digits of the number are year, 4,5 digits are month. I have to modify the code such that it only accept current and past year,month.
Also I noticed if I give 13 for the month it still acception. Please help in fixing this code.
DATA: I_EQUI LIKE EQUI.
DATA: I_SERNR LIKE EQUI-SERNR.
DATA: I_LENGTH TYPE I.
I_SERNR = SERNR.
SHIFT I_SERNR LEFT DELETING LEADING '0'.
I_LENGTH = STRLEN( I_SERNR ).
IF
I_LENGTH GT 9 OR I_LENGTH LT 9.
MESSAGE E398(00) WITH 'INVALID LENGTH'.
EXIT.
ENDIF.
DATA: SERNR LIKE EQUI-SERNR.
DATA: MATNR TYPE MATNR.
IF SY-TCODE = 'MB31'.
SELECT SINGLE * FROM EQUI INTO I_EQUI
WHERE EQTYP = 'S'
AND MATNR = MATNR
AND SERNR = SERNR.
IF SY-SUBRC EQ 0.
MESSAGE E398(00) WITH 'SERIAL NUMBER ALREADY EXISTS'.
ELSE.
IF I_SERNR0(1) = '2' OR I_SERNR0(1) = '3' OR I_SERNR+0(1) = '6'.
IF I_SERNR1(2) = SY-DATUM2(2).
IF I_SERNR3(2) LE SY-DATUM4(2).
IF I_SERNR5(4) GT '0000' AND I_SERNR5(4) LT '9999'.
ELSE.
MESSAGE E398(00) WITH 'PLEASE ENTER RANGE WITHIN 0000 AND 9999'.
ENDIF.
ELSE.
MESSAGE E398(00) WITH 'PLEASE ENTER A DATE IN THE PAST'.
ENDIF.
ELSE.
IF I_SERNR1(2) LT SY-DATUM2(2).
IF I_SERNR5(4) GT '0000' AND I_SERNR5(4) LT '9999'.
ELSE.
MESSAGE E398(00) WITH 'PLEASE ENTER RANGE WITHIN 0000 AND 9999'.
ENDIF.
ELSE.
MESSAGE E398(00) WITH 'PLEASE ENTER A DATE IN THE PAST'.
ENDIF.
ENDIF.
ELSE.
MESSAGE E398(00) WITH 'INVALID MANUFACTURING SITE'.
ENDIF.
ENDIF.
ELSE.
SELECT SINGLE * FROM EQUI INTO I_EQUI
WHERE EQTYP = 'S'
AND MATNR = MATNR
AND SERNR = SERNR.
IF SY-SUBRC NE 0.
MESSAGE E398(00) WITH 'PLEASE ENTER A VALID SERIAL NUMBER'.
ENDIF.
ENDIF.
‎2007 Jan 31 4:38 PM
Just a thought..
Why dont you declare SERNR as SY-DATUM and extract month and year from it.
Thanks,
Santosh
‎2007 Jan 31 5:01 PM
Actually the SERNR entered has 9 digits... apart from year and month it has 4 more digits
so i can't declare it as SY-DATUM.