‎2007 Nov 13 7:44 AM
Hi
How to validate the select-option values entered in the selection screen.
I know how to validate for Parameter value in selection screen.
But in select option i need to validate all the values in the Range.
Sunil.
‎2007 Nov 13 7:47 AM
Hi Sunil,
It is not the standard way to validate all the values in select-options.
Even SAP standard programs also not check all values.
You can just check if any one value is present that is enough.
Regards,
Atish
‎2007 Nov 13 7:48 AM
SELECT-OPTIONS : S_VKORG FOR TVKO-VKORG MEMORY ID VKO.
INITIALIZATION.
PERFORM F1000_RESTRICT_VKORG. " Restricting Sales organisation
Form F1000_RESTRICT_VKORG.
Define the object to be passed to the RESTRICTION parameter
DATA lw_restrict TYPE SSCR_RESTRICT.
Auxiliary objects for filling RESTRICT
DATA lw_opt_list TYPE sscr_opt_list.
DATA lw_ass TYPE sscr_ass.
Assign selection screen objects to option list and sign
NOINTERVLS: BT and NB not allowed
CLEAR lw_opt_list.
MOVE 'NOINTERVLS' TO lw_opt_list-name.
MOVE 'X' TO: lw_opt_list-options-cp,
lw_opt_list-options-eq,
lw_opt_list-options-ge,
lw_opt_list-options-gt,
lw_opt_list-options-le,
lw_opt_list-options-lt,
lw_opt_list-options-ne,
lw_opt_list-options-np.
APPEND lw_opt_list TO lw_restrict-opt_list_tab.
KIND = 'S':
CLEAR lw_ass.
MOVE: 'S' TO lw_ass-kind,
'S_VKORG' TO lw_ass-name,
'I' TO lw_ass-sg_main,
'*' TO lw_ass-sg_addy,
'NOINTERVLS' TO lw_ass-op_main.
APPEND lw_ass TO lw_restrict-ass_tab.
CALL FUNCTION 'SELECT_OPTIONS_RESTRICT'
EXPORTING
restriction = lw_restrict
EXCEPTIONS
too_late = 1
repeated = 2
selopt_without_options = 3
selopt_without_signs = 4
invalid_sign = 5
empty_option_list = 6
invalid_kind = 7
repeated_kind_a = 8
OTHERS = 9.
IF sy-subrc <> 0. "Restriction error encountered for Select
"Option
MESSAGE I001 WITH 'ERROR IN SELECT OPTION'."ERROR IN SELECT OPTION
ENDIF.
endform. " F1000_RESTRICT_VKORG
Whatsoever, if the problem is due to the restriction imposed by the underlying DB system, the solution is to use some simpler "SELECT" statements which will not be problematic when parsed by RDBMS and sent to the DB system. For the problem with "RANGES", SAP recommends to use "FOR ALL ENTRIES in <itab>" addition.
If you have joins and the result is a dump, then this means that your DB system cannot handle your OpenSQL interpretation and I think the way is to change the SQL.
‎2007 Nov 13 7:48 AM
Simple.. same as parameters.
first do it for low value and then for hign value.
Reward if it helps,
Satish
‎2007 Nov 13 7:48 AM
Hi,
u can do like this
at selection-screen.
select matnr from mara into v_mara up to 1 rows
where matnr in s_matnr.
endselect.
if sy-subrc ne 0.
throw error message.
endif..
Rewrad if helpful.
Regards,
Nagaraj
‎2007 Nov 13 7:49 AM
system automatically creates one internal table with ur select option, if it is range then
if option is eq then u have to check each value
if the option is bt then u have to check in between the values
‎2007 Nov 13 7:57 AM
hi
NO NEED TO VALIDATE ALL THE VALUES
I AM SENDING A PROGRAM WHERE I HAD WRITEN CODE FOR SELECTION SCREEN VALIDATIONS
SEE IT YOU CAN UNDERSTAND VERY EASILY
&----
*& Report ZNNR_REPORT
*&
&----
*&
*&
&----
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*****************
<b>***************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>
START-OF-SELECTION.
*set pf-status '100'.
IF R1 EQ 'X'.
SELECT MATNR
WERKS
PSTAT
EKGRP
FROM MARC
INTO TABLE IT_PLANT
WHERE WERKS = P_WERKS.
LOOP AT IT_PLANT.
WRITE : SY-VLINE , 2 IT_PLANT-MATNR COLOR COL_KEY,
21 SY-VLINE , 22 IT_PLANT-WERKS COLOR COL_KEY,
27 SY-VLINE ,28 IT_PLANT-PSTAT COLOR COL_NORMAL,
43 SY-VLINE ,44 IT_PLANT-EKGRP COLOR COL_NORMAL.
ENDLOOP.
ENDIF.
IF R2 EQ 'X'.
SELECT EBELN EBELP MATNR WERKS LGORT
FROM EKPO
INTO TABLE IT_PONO
WHERE EBELN IN S_EBELN.
LOOP AT IT_PONO.
WRITE : SY-VLINE , 2 IT_PONO-EBELN COLOR COL_KEY,
12 SY-VLINE , 13 IT_PONO-EBELP COLOR COL_KEY,
18 SY-VLINE , 19 IT_PONO-MATNR COLOR COL_NORMAL,
37 SY-VLINE , 38 IT_PONO-WERKS COLOR COL_NORMAL,
44 SY-VLINE , 45 IT_PONO-LGORT COLOR COL_NORMAL, 49 SY-VLINE..
ENDLOOP.
ENDIF.
TOP-OF-PAGE.
IF R1 EQ 'X'.
*ULINE AT /1(48).
WRITE : SY-VLINE ,2 'MATERIAL NUMBER',
21 SY-VLINE , 22 'PLANT',
27 SY-VLINE , 28 'STATUS',
43 SY-VLINE , 44 'GRUP', 48 SY-VLINE.
ULINE AT /1(48).
ENDIF.
IF R2 EQ 'X'.
WRITE : SY-VLINE , 2 'PO NUMBER',
12 SY-VLINE, 13 'ITEM',
18 SY-VLINE,19 'MATERIAL NUMBER',
37 SY-VLINE, 38 'PLANT',
44 SY-VLINE, 45 'GRUP',
49 SY-VLINE.
ULINE AT /1(50).
ENDIF.
END-OF-PAGE.
ULINE AT /1(50).
WRITE :/10 'PAGE NUMBER', SY-PAGNO.
<b>Reward fi suefull</b>
‎2007 Nov 13 8:02 AM
Hi ..
Check this...
FORM validate_vbeln.
DATA : l_t_vbeln TYPE TABLE OF vbuk-vbeln WITH HEADER LINE ,
l_f_vbeln TYPE vbuk-vbeln .
RANGES ra_vbeln FOR vbuk-vbeln.
LOOP AT so_vbeln.
IF NOT so_vbeln-low IS INITIAL.
ra_vbeln-sign = 'I'.
ra_vbeln-option = 'EQ'.
ra_vbeln-low = so_vbeln-low.
APPEND ra_vbeln.
ENDIF.
IF NOT so_vbeln-high IS INITIAL.
ra_vbeln-sign = 'I'.
ra_vbeln-option = 'EQ'.
ra_vbeln-low = so_vbeln-high..
APPEND ra_vbeln.
ENDIF.
ENDLOOP .
IF NOT so_vbeln[] IS INITIAL.
SELECT vbeln INTO TABLE l_t_vbeln
FROM vbuk
WHERE vbeln IN ra_vbeln.
ENDIF.
LOOP AT so_vbeln.
IF so_vbeln-low <> space.
READ TABLE l_t_vbeln WITH KEY = so_vbeln-low.
IF sy-subrc <> 0.
SET CURSOR FIELD 'SO_vbeln-LOW'.
MESSAGE e001(vb) WITH so_vbeln-low.
ENDIF.
ENDIF.
IF so_vbeln-high <> space.
READ TABLE l_t_vbeln WITH KEY = so_vbeln-high.
IF sy-subrc <> 0.
SET CURSOR FIELD 'SO_vbeln-HIGH'.
MESSAGE e001(vb) WITH so_vbeln-high.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " validate_vbeln
Hope this Helps.
It validates all the data in select-option .
Praveen
‎2007 Nov 13 8:25 AM
Hi ,
To validate the select-options try with the following code.
at selectio-screen.
if s_option1-low is initial.
select option1 from dbtab into itab where option1 = s_ option1-low.
if sy-subrc ne 0.
message e007(msgclass).
endif.
endif.
if s_option1-high is initial.
select option1 from dbtab into itab where option1 = s_ option1-high.
if sy-subrc ne 0.
message e007(msgclass).
endif.
endif.
Replace option1 with the field name.
Bye.
‎2007 Nov 13 8:27 AM
Hi,
Please refer this code.
----
AT SELECTION SCREEN *
----
AT SELECTION-SCREEN.
*--This perform check the variant
PERFORM sub_check_variant.
To get Storage Location
PERFORM sub_fetch_strloc.
&----
*& Form sub_fetch_strloc
&----
fetch Storage Location
----
FORM sub_fetch_strloc .
Check Storage Location
SELECT lgort "Storage Location
FROM t001l "Storage Locations
INTO TABLE i_lgort BYPASSING BUFFER
WHERE lgort IN s_lgort.
Check SUBRC
IF sy-subrc = 0.
SORT i_lgort BY lgort.
DELETE ADJACENT DUPLICATES FROM i_lgort COMPARING lgort.
ENDIF.
ENDFORM. "sub_fetch_strloc
Regards,
Prashant