10-11-2007 1:18 PM
Hi frnds,
i m giving my selection screen validations code, but its not giving error statement.
can anyone correct me where i am wrong or what more shuld i write in the code to do the exact validations.
<code>
PERFORM VALID_CUST.
PERFORM VALID_SALES.
FORM VALID_CUST.
IF SO_CUST[] IS NOT INITIAL.
SELECT SINGLE KUNNR FROM KNA1 INTO V_KNA1 WHERE KUNNR IN SO_CUST.
IF SY-SUBRC EQ 0.
ELSE.
MESSAGE E000(ZRAJ) WITH 'PLZ ENTER VALID CUSTOMER DOCUMENT NUMBER'.
ENDIF.
ENDIF.
ENDFORM.
FORM VALID_SALES.
IF SO_SALES[] IS NOT INITIAL.
SELECT SINGLE VBELN FROM VBAK INTO V_VBAK WHERE VBELN IN SO_SALES.
IF SY-SUBRC EQ 0.
ELSE.
MESSAGE E001(ZRAJ) WITH 'PLZ ENTER VALID SALES DOCUMENT NUMBER'.
ENDIF.
ENDIF.
ENDFORM.
</code>
10-11-2007 1:21 PM
Hi
that validation code should be writen under<b> AT SELECTION SCREEN</b> event
refer my code
REPORT ZNNR_REPORT NO STANDARD PAGE HEADING MESSAGE-ID ZNNR LINE-SIZE 100 LINE-COUNT 65(4).
******DATA DECLARATIONS**********
DATA : BEGIN OF IT_PLANT OCCURS 0,
MATNR LIKE MARA-MATNR,
WERKS LIKE MARC-WERKS,
PSTAT LIKE MARC-PSTAT,
EKGRP LIKE MARC-EKGRP,
END OF IT_PLANT.
DATA : BEGIN OF IT_PONO OCCURS 0,
EBELN LIKE EKKO-EBELN,
EBELP LIKE EKPO-EBELP,
MATNR LIKE EKPO-MATNR,
WERKS LIKE EKPO-WERKS,
LGORT LIKE EKPO-LGORT,
END OF IT_PONO.
TABLES EKKO.
********END OF DATA DECLARATIONS*********
********SELECTION SCREEN DESIGN ***********
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETER : P_WERKS LIKE MARC-WERKS MODIF ID S1.
SELECT-OPTIONS : S_EBELN FOR EKKO-EBELN NO INTERVALS MODIF ID S2.
SELECTION-SCREEN END OF BLOCK B1.
SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT-004.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS : R1 RADIOBUTTON GROUP G1 DEFAULT 'X'.
SELECTION-SCREEN COMMENT 5(20) TEXT-002 FOR FIELD R1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS : R2 RADIOBUTTON GROUP G1.
SELECTION-SCREEN COMMENT 5(20) TEXT-003 FOR FIELD R2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B2.
******END OF SELECTION SCREEN DESIGN****************
*********INITIALIZATION OF SELECTION SCREEN ELEMENTS.*****
INITIALIZATION.
P_WERKS = '1000'.
S_EBELN-LOW = '4500016926'.
S_EBELN-OPTION = 'EQ'.
S_EBELN-SIGN = 'I'.
APPEND S_EBELN.
CLEAR S_EBELN.
************END OF INITIALIZATION***********************
***********SCREEN MODIFICATIONS*******************
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF R1 EQ 'X' AND SCREEN-GROUP1 EQ 'S2'.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
IF R2 EQ 'X' AND SCREEN-GROUP1 EQ 'S1'.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
********END OF SCREEN MODIFICATIONS*****************
***************SCREEN VALIDATIONS *****************
at selection-screen.
SELECT SINGLE *
FROM EKKO
INTO EKKO
WHERE EBELN IN S_EBELN.
IF SY-SUBRC <> 0.
SET CURSOR FIELD 'S_EBELN-LOW'.
MESSAGE E999 WITH TEXT-005.
ENDIF.
********end of screen validation*****************
<b>reward if usefull</b>
10-11-2007 1:22 PM
Hi,
Check the SY-SUBRC value.
Did you gave Your Meassge name in report addition?
Thanks.
10-11-2007 1:22 PM
if not SO_CUST[] IS NOT INITIAL.
SELECT SINGLE KUNNR FROM KNA1 INTO TABLE V_KNA1 WHERE KUNNR IN SO_CUST.
V_KNA1 must be a table because you have a select-options. So possible to have several KUNNR
best regards
10-11-2007 1:23 PM
Hi
Are u placing this code in the AT Selection-screen Event?
AT SELECTION-SCREE.
PERFORM VALID_CUST.
PERFORM VALID_SALES.
FORM VALID_CUST.
IF SO_CUST[] IS NOT INITIAL.
<b>SELECT SINGLE KUNNR FROM KNA1 INTO V_KNA1 WHERE KUNNR IN SO_CUST.
IF SY-SUBRC <> 0.
MESSAGE E000(ZRAJ) WITH 'PLZ ENTER VALID CUSTOMER DOCUMENT NUMBER'.
ENDIF.
</b>ENDIF.
ENDFORM.
FORM VALID_SALES.
IF SO_SALES[] IS NOT INITIAL.
<b>SELECT SINGLE VBELN FROM VBAK INTO V_VBAK WHERE VBELN IN SO_SALES.
IF SY-SUBRC <> 0.
MESSAGE E001(ZRAJ) WITH 'PLZ ENTER VALID SALES DOCUMENT NUMBER'.
ENDIF.</b>
ENDIF.
ENDFORM.
Then it works.
reward if Helpful.
10-11-2007 1:24 PM
hi satish,
even if one customer or sales is valid in select-option( ie, so_cust or so_sales) then sy-subrc will be zero and ur message will not display.
reward me if useful.............
with regards....
10-11-2007 1:24 PM
Hi,
try like this
AT SELECTION-SCREEN.
IF SO_CUST[] IS NOT INITIAL.
SELECT SINGLE KUNNR FROM KNA1 INTO V_KNA1 WHERE KUNNR IN SO_CUST.
IF SY-SUBRC NE 0.
MESSAGE E000(ZRAJ) WITH 'PLZ ENTER VALID CUSTOMER DOCUMENT NUMBER'.
ENDIF.
IF SO_SALES[] IS NOT INITIAL.
SELECT SINGLE VBELN FROM VBAK INTO V_VBAK WHERE VBELN IN SO_SALES.
IF SY-SUBRC NE 0.
MESSAGE E001(ZRAJ) WITH 'PLZ ENTER VALID SALES DOCUMENT NUMBER'.
ENDIF.
also u can try like this..
AT SELECTION-SCREEN.
IF SO_CUST[] IS NOT INITIAL.
SELECT KUNNR FROM KNA1 upto 1 rows INTO V_KNA1 WHERE KUNNR IN SO_CUST.
IF SY-SUBRC NE 0.
MESSAGE E000(ZRAJ) WITH 'PLZ ENTER VALID CUSTOMER DOCUMENT NUMBER'.
ENDIF.
endselect.
IF SO_SALES[] IS NOT INITIAL.
SELECT VBELN FROM VBAK upto 1 rows INTO V_VBAK WHERE VBELN IN SO_SALES.
IF SY-SUBRC NE 0.
MESSAGE E001(ZRAJ) WITH 'PLZ ENTER VALID SALES DOCUMENT NUMBER'.
ENDIF.
endselect.
Regards,
nagaraj
10-11-2007 1:25 PM
hi,
Code is looking correct .
use tese perform in at selection-screen event and then check.
Regards
Gagan
10-11-2007 1:25 PM
HI,
see this corrected code.
tables:kna1,vbak.
SELECT-OPTIONS:so_CUST FOR kna1-kunnr,
so_SALES for vbak-vbeln.
<b>data:V_VBELN like vbak-vbeln,
V_KUNNR like kna1-kunnr.</b>
<b>AT SELECTION-SCREEN.</b>
PERFORM VALID_CUST.
PERFORM VALID_SALES.
FORM VALID_CUST.
IF SO_CUST[] IS NOT INITIAL.
SELECT SINGLE KUNNR FROM KNA1 INTO <b>V_KUNNR</b> WHERE KUNNR IN SO_CUST.
IF SY-SUBRC EQ 0.
ELSE.
MESSAGE E000(ZRAJ) WITH 'PLZ ENTER VALID CUSTOMER DOCUMENT NUMBER'.
ENDIF.
ENDIF.
ENDFORM.
FORM VALID_SALES.
IF SO_SALES[] IS NOT INITIAL.
SELECT SINGLE VBELN FROM VBAK INTO <b>V_VBELN</b> WHERE VBELN IN SO_SALES.
IF SY-SUBRC EQ 0.
ELSE.
MESSAGE E001(ZRAJ) WITH 'PLZ ENTER VALID SALES DOCUMENT NUMBER'.
ENDIF.
ENDIF.
ENDFORM.
rgds,
bharat.
10-11-2007 1:41 PM
Frnds thanks for ur replies.
my problem is suppose when i m giving a valid sales order number in low and giving some invalid data in high then its taking it without throwing error, but i want to validate both low as well as high parameters.
frnds plz expalin.
regards,
satish
10-11-2007 2:42 PM
Hi Sathish,
Since it is a select option it may have a range of values, Please check this following code and try implementing the same logic with your code.
data : i_kunnr type standard table of kna1-kunnr,
i_vbeln type standard table of vbak-vbeln.
select-options : s_kunnr for kna1-kunnr.
select-options : s_vbeln for vbak-vbeln.
if not s_kunnr is initial.
select kunnr from kna1 into corresponding fields of table i_kunnr where kunnr in s_kunnr.
if sy-subrc NE 0.
message i000(xx) with 'Enter a valid Customer'.
endif.
if not s_vbeln is initial.
select vbeln from vbak into corresponding fields of table i_vbeln where vbeln in s_vbeln.
if sy-subrc NE 0.
message i000(xx) with 'Enter a valid sales document number'.
endif.
try this and reward points if it is useful!
Thanks,
Muthu