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

Problem in Validation

Former Member
0 Likes
827

I am working on a following program which validates the entered serial number.

DATA : I_EQUI LIKE EQUI.

DATA : I_SERNR LIKE EQUI-SERNR.

I_SERNR = SERNR.

SHIFT I_SERNR LEFT DELETING LEADING '0'.

  • 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 ALREAD EXISTS'.

ELSE.

IF SERNR0(1) = '5' OR SERNR0(1) = ''7' OR SERNR+0(1) = '9'

IF SERNR1(2) LE SY-DATUM2(2).

IF SERNR3(2) LE SY-DATUM4(2).

IF SERNR5(4) GT '0000' AND 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.

MESSAGE E398(00) WITH 'PLEASE ENTER A DATE IN THE PAST'.

ENDIF.

ELSE.

MESSAGE E398(00) WITH 'INVALID AREA '.

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.

Even If I enter the correct first number (5,7,9) I am getting the invalid area... How can i overcome this problem..

7 REPLIES 7
Read only

Former Member
0 Likes
789

Hi,

Make sure there is no blank space as the first character..

Thanks,

Naren

Read only

0 Likes
789

I actual problem is at the runtime the variable sernr+0(1) is not having value 0.

The number entered is 9 characters long.Since sernr is 18 characters long, the number entered is preceeded by 9 zeroes...which makes valid number invalid...So, How could i overcome this issue...

I mean make sernr+0(1) take the first character entered..

Read only

0 Likes
789

I am sorry

The actual problem is at the runtime the variable sernr+0(1) is having value 0.

The number entered is 9 characters long.Since sernr is 18 characters long, the number entered is preceeded by 9 zeroes...which makes valid number invalid...So, How could i overcome this issue...

I mean make sernr+0(1) take the first character entered..

Read only

Former Member
0 Likes
789

Hi,

Move the SERNR value to a temporary variable and remove the leading zeroes..

example

-


DATA: SERNR_TMP LIKE SERNR.

SHIFT SERNR_TMP LEFT DELETING LEADING '0'.

**Now compare the SERNR_TMP variable

Thanks,

Naren

Read only

Former Member
0 Likes
789

Hi,

The solution is very simple

when you give '5' system will take as 00000000000005. Because it si 18 char field.

so use conversion exit CONVERSION_EXIT_ALPHA_OUTPUT.

I giving the sample code, it is working fine. let me know for issues u have in this regard

ata : sernr1 LIKE EQUI-SERNR.

parameters : SERNR LIKE EQUI-SERNR.

at selection-screen.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'

EXPORTING

input = sernr

IMPORTING

OUTPUT = sernr1.

IF SERNR10(1) = '5' OR SERNR10(1) = '7' OR SERNR1+0(1) = '9'.

else.

MESSAGE E398(00) WITH 'INVALID AREA '.

ENDIF.

Regards

Nagaraju

Nagaraju.pnr@rediffmail.com

Read only

0 Likes
789

Finally I was able to come up with this code.

BREAK SGUNTURI.

BREAK FROE.

DATA: I_EQUI LIKE EQUI.

DATA: I_SERNR LIKE EQUI-SERNR.

I_SERNR = SERNR.

SHIFT I_SERNR LEFT DELETING LEADING '0'.

  • 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.

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.

But there seems to be a mismatch of if and else... Could anyone fix the problem for me.

Read only

0 Likes
789

Plz someone fix my code..