‎2007 Jan 30 9:15 PM
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..
‎2007 Jan 30 9:25 PM
Hi,
Make sure there is no blank space as the first character..
Thanks,
Naren
‎2007 Jan 30 9:30 PM
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..
‎2007 Jan 30 9:31 PM
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..
‎2007 Jan 30 9:33 PM
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
‎2007 Jan 31 4:49 AM
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
‎2007 Jan 31 1:18 PM
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.
‎2007 Jan 31 1:29 PM