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

Select statement

Former Member
0 Likes
562

Hi,

I am working the user exit which validates the entered serial number.

  • CHECKING THE CALLING TRANSACTION AND USERS

IF SY-TCODE = 'MB1C'.

EXIT.

ENDIF.

  • TO CHECK WHETHER ENTERED SERIAL NUMBER CONTAINS ANY ALPHABETS

IF SERNR CA SY-ABCDE.

MESSAGE E398(00) WITH 'ALPHA CHARACTERS NOT PERMITTED'.

ENDIF.

DATA: I_EQUI LIKE EQUI,

L_SERNR LIKE EQUI-SERNR,

L_LENGTH TYPE I.

L_SERNR = SERNR.

  • DELETING THE LEADING ZEROES IN THE SERIAL NUMBER

SHIFT L_SERNR LEFT DELETING LEADING '0'.

  • CHECKING THE LENGTH OF ENTERED SERIAL NUMBER

L_LENGTH = STRLEN( L_SERNR ).

IF

L_LENGTH GT 9 OR L_LENGTH LT 9.

MESSAGE E398(00) WITH 'INVALID LENGTH'.

EXIT.

ENDIF.

  • TO CHECK THERE ARE NO DUPLICATE SERIAL EXISTS

IF SY-TCODE = 'MB31'.

<b>SELECT SINGLE * FROM EQUI INTO I_EQUI</b>

WHERE EQTYP = 'S'

AND MATNR = MATNR

AND SERNR = SERNR.

IF SY-SUBRC EQ 0.

MESSAGE E398(00) WITH 'SERIAL NUMBER ALREADY EXISTS'.

ELSE.

  • CHECKING THE FORMAT OF THE ENTERED SERIAL NUMBER COMPLIES WITH TELEFLEX STANDARDS

IF L_SERNR+0(1) = '6'.

DATA : L_MONTH(2),

: L_YEAR(2).

CLEAR: L_MONTH,

L_YEAR.

L_YEAR = SY-DATUM+2(2) - 1.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

INPUT = L_YEAR

IMPORTING

OUTPUT = L_YEAR.

IF L_SERNR1(2) = SY-DATUM2(2) OR L_SERNR+1(2) = L_YEAR.

IF L_SERNR1(2) = L_YEAR AND L_SERNR3(2) NE '12'.

MESSAGE E398(00) WITH 'INVALID YEAR/MONTH'.

ENDIF.

IF ( ( SY-DATUM4(2) = '01' ) AND ( L_SERNR1(2) = SY-DATUM+2(2) ) ).

L_MONTH = '12'.

ELSE.

L_MONTH = SY-DATUM+4(2) - 1.

ENDIF.

IF

SY-DATUM4(2) = '01' AND L_SERNR1(2) = L_YEAR.

L_MONTH = '12'.

ELSE.

L_MONTH = SY-DATUM+4(2) - 1.

ENDIF.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

INPUT = L_MONTH

IMPORTING

OUTPUT = L_MONTH.

IF L_SERNR3(2) = SY-DATUM4(2) OR L_SERNR+3(2) = L_MONTH.

IF L_SERNR5(4) GT '0000' AND L_SERNR5(4) LT '9999'.

ELSE.

MESSAGE E398(00) WITH 'PLEASE ENTER RANGE WITHIN 0000 AND 9999'.

ENDIF.

ELSE.

MESSAGE E398(00) WITH 'INVALID YEAR/MONTH'.

ENDIF.

ELSE.

MESSAGE E398(00) WITH 'INVALID YEAR/MONTH'.

ENDIF.

ELSE.

MESSAGE E398(00) WITH 'INVALID MANUFACTURING SITE'.

ENDIF.

ENDIF.

ELSE.

  • TO CHECK WHETHER USER ENTERS EXISTING SERIAL NUMBER.

<b> SELECT SINGLE * FROM EQUI INTO I_EQUI</b>

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.

Now I was asked to make changes to the <b>select statements</b> using <b>SELECT COUNT(*)</b>.

Can someone please help in modifying the code.Thank you.

5 REPLIES 5
Read only

Former Member
0 Likes
525

It will be less efficient. Why do yo need to change it?

Rob

Read only

0 Likes
525

Hi Rob,

Can you explain me in detail why is it less efficient. I was to change it on the performance issues...Waiting for your reply.

Read only

0 Likes
525

Aggregate functions are in general less efficient that doing the work yourself. It might be faster to SELECT ... UP TO 1 ROWS but not much faster.

Rob

Read only

Former Member
0 Likes
525

Try this:

SELECT COUNT(*) FROM EQUI

WHERE EQTYP = 'S'

AND MATNR = MATNR

AND SERNR = SERNR.

IF SY-SUBRC EQ 0.

MESSAGE E398(00) WITH 'SERIAL NUMBER ALREADY EXISTS'.

ELSE.

-


ENDIF.

Thanks,

Santosh

Read only

Former Member
0 Likes
525

Using Count(*) will be less efficient... i believe u wanna make it for code efficiency as u are selecting one row and u r just checking the sy-subrc value ... as far as i can understand u r not making use of ITAB i_equi anywhere in ur code... so u can use select single mandt from DBtable into variable_name

WHERE EQTYP = 'S'

AND MATNR = MATNR

AND SERNR = SERNR.

this will ensure if there is an entry with the above seleciton criteria in the table or not.

hope it will help u

bbye tac care

Ashwani