10-10-2007 3:27 PM
Hi,
please correct me where i went wrong...
RANGES: r_daterange FOR vbak-audat.
RANGES:GRG_DATERANGE FOR VBAK-AUDAT.
PERFORM CHECK_SELECT_OPTIONS USING DATE_FROM
DATE_TO
CHANGING R_DATERANGE[].
if sales order number is the selection criteria
if not salesorder_no is initial.
clear :wa_vbak, wa_vbfa, wa_costlist_in.
refresh:t_vbak, costlist_in.
select avbeln aauart bposnr bnetpr
into table t_vbak
from vbak as a
inner join vbap as b
on avbeln = bvbeln
where a~vbeln = salesorder_no
and a~audat in r_daterange
and a~kunnr = partner_number
and b~abgru NE ' ' .
----
***INCLUDE /VWNA/LINSD_BAPI_INV_GET_INF01 .
----
&----
*& Form CHECK_SELECT_OPTIONS
&----
text
----
-->P_DATE_FROM text
-->P_DATE_TO text
<--P_R_DATERANGE[] text
----
FORM CHECK_SELECT_OPTIONS USING P_DATE_FROM LIKE VBAK-AUDAT
P_DATE_TO LIKE VBAK-AUDAT
CHANGING PRG_DATERANGE LIKE GRG_DATERANGE[].
DATA: WA_DATERANGE LIKE GRG_DATERANGE.
CLEAR WA_DATERANGE.
REFRESH PRG_DATERANGE.
WA_DATERANGE-SIGN = 'I'.
iF ( P_DATE_FROM IS INITIAL ) AND ( P_DATE_TO IS INITIAL ).
ELSEIF P_DATE_FROM IS INITIAL.
WA_DATERANGE-OPTION = 'LE'.
MOVE P_DATE_TO TO WA_DATERANGE-LOW.
ELSEIF P_DATE_TO IS INITIAL.
WA_DATERANGE-OPTION = 'GE'.
MOVE P_DATE_FROM TO WA_DATERANGE-LOW.
ELSE.
WA_DATERANGE-OPTION = 'BT'.
MOVE P_DATE_FROM TO WA_DATERANGE-LOW.
MOVE P_DATE_TO TO WA_DATERANGE-HIGH.
ENDIF.
APPEND WA_DATERANGE TO PRG_DATERANGE.
clear wa_daterange.
When i execute the code its creating a short dump and the message is :
The current ABAP/4 program attempted to execute an ABAP/4 Open SQL
statement in which the WHERE condition contains an IN itab operator.
The IN itab operator is used with internal tables which
have the following structure:
SIGN(1) OPTION(2) LOW LIKE db_field HIGH LIKE db_field
The OPTION column should contain only one of the following values:
"EQ LE GE CP BT NE LT GT NP NB"
The value " " is not allowed here. Please help me in resolving the error..
Thanks,
Challa
10-10-2007 3:37 PM
Hi
This will happen when P_DATE_FROM IS INITIAL AND P_DATE_TO IS INITIAL.
You are populating the range table with just sign as 'I' and option is not populated.
change your code to:
WA_DATERANGE-SIGN = 'I'.
iF ( P_DATE_FROM IS INITIAL ) AND ( P_DATE_TO IS INITIAL ).
ELSEIF P_DATE_FROM IS INITIAL.
WA_DATERANGE-OPTION = 'LE'.
MOVE P_DATE_TO TO WA_DATERANGE-LOW.
APPEND WA_DATERANGE TO PRG_DATERANGE.
ELSEIF P_DATE_TO IS INITIAL.
WA_DATERANGE-OPTION = 'GE'.
MOVE P_DATE_FROM TO WA_DATERANGE-LOW.
APPEND WA_DATERANGE TO PRG_DATERANGE.
ELSE.
WA_DATERANGE-OPTION = 'BT'.
MOVE P_DATE_FROM TO WA_DATERANGE-LOW.
MOVE P_DATE_TO TO WA_DATERANGE-HIGH.
APPEND WA_DATERANGE TO PRG_DATERANGE.
ENDIF.
*APPEND WA_DATERANGE TO PRG_DATERANGE.
clear wa_daterange.
Regards
Navneet
10-10-2007 3:37 PM
Give this a try:
FORM check_select_options USING p_date_from LIKE vbak-audat
p_date_to LIKE vbak-audat
CHANGING prg_daterange LIKE grg_daterange[].
DATA: wa_daterange LIKE grg_daterange.
CLEAR wa_daterange.
REFRESH prg_daterange.
wa_daterange-sign = 'I'.
IF ( p_date_from IS INITIAL ) AND ( p_date_to IS INITIAL ).
EXIT. "<====
ELSEIF p_date_from IS INITIAL.
wa_daterange-option = 'LE'.
MOVE p_date_to TO wa_daterange-low.
ELSEIF p_date_to IS INITIAL.
wa_daterange-option = 'GE'.
MOVE p_date_from TO wa_daterange-low.
ELSE.
wa_daterange-option = 'BT'.
MOVE p_date_from TO wa_daterange-low.
MOVE p_date_to TO wa_daterange-high.
ENDIF.
APPEND wa_daterange TO prg_daterange.
CLEAR wa_daterange.
Rob