‎2006 Nov 30 9:56 PM
Hi All,,
I have an interntal like this:-->
data : begin of i_ytab,
matnr like mara-matnr,
pstat like mara-pstat,
mtart like mara-mtart,
matkl like mara-matkl,
bstme like mara-bstme.
data : end of o+ytab.
The internal table i_ytab have the following values
MATNR PSTAT MTART MATKL BSTME
1 P1 1A M23 M34
2 P2 2A M34
Using this i need to create dynamic select statement like the following
WHERE MATNR EQ '1' AND
PSTAT EQ 'P1' AND
MTART EQ '1A' AND
MATKL EQ 'M23' AND
BSTME EQ 'M34'.
and 2 record it should like this
WHERE MATNR EQ '2' AND
PSTAT EQ 'P2' AND
MTART EQ '2A' AND
MATKL EQ 'M34 ' AND
BSTME EQ ' '.
I like to know is there any function module to create dynamic select statments from
internal table values or from workarea values?
Thanks
aRs
‎2006 Nov 30 10:10 PM
Hi,
Try this..
DATA: T_WHERE(72) OCCURS 0 WITH HEADER LINE.
PERFORM WHERE_CLAUSE USING
MATNR
PSTAT
MTART
MATKL
BSTME.
SELECT * FROM MARA WHERE (T_WHERE)
INTO TABLE ITAB_MARA.
FORM WHERE_CLAUSE USING
RV_MATNR
RV_PSTAT
RV_MTART
RV_MATKL
RV_BSTME.
CLEAR: T_WHERE
1) MATERIAL
CONCATENATE ' MATNR = ' RV_MATNR INTO T_WHERE.
APPEND T_WHERE.
CLEAR T_WHERE.
2) PSTAT
CONCATENATE ' AND PSTAT = ' RV_PSTAT INTO T_WHERE.
APPEND T_WHERE.
CLEAR T_WHERE.
2) PSTAT
CONCATENATE ' AND PSTAT = ' RV_PSTAT INTO T_WHERE.
APPEND T_WHERE.
CLEAR T_WHERE.
3) MTART
CONCATENATE ' AND MTART = ' RV_MTART INTO T_WHERE.
APPEND T_WHERE.
CLEAR T_WHERE.
4) MATKL
CONCATENATE ' AND MATKL = ' RV_MAKTL INTO T_WHERE.
APPEND T_WHERE.
CLEAR T_WHERE.
5) BSTME
CONCATENATE ' AND BSTME = ' RV_BSTME INTO T_WHERE.
APPEND T_WHERE.
CLEAR T_WHERE.
ENDFORM.
Thanks,
Naren
‎2006 Nov 30 10:13 PM
Hi aRs,
try this..
loop at i_ytab.
select single * from dtab
WHERE MATNR EQ I_YTAB- MATNR
AND PSTAT EQ I_YTAB- PSTAT
AND MTART EQ I_YTAB- MTART
AND MATKL EQ I_YTAB- MATKL
AND BSTME EQ I_YTAB-BSTME.
endloop.also
check this dynamic selct program.
tables : pa0001, pa0002.
ranges : s_pernr for pa0001-pernr.
data : begin of i_pernr occurs 0,
pernr like pa0001-pernr,
end of i_pernr.
data : v_pernr like pa0001-pernr,
v_pernr1 like pa0001-pernr,
v_tab like DD02D-TABNAME.
data : v_field(72) type c.
data : i_source(72) occurs 0 with header line.
v_field = 'PERNR'.
v_pernr = '00000100'.
v_tab = 'PA0000'.
concatenate v_field '=' v_pernr into i_source
separated by space.
select pernr from PA0000
into corresponding fields of table i_pernr
WHERE (i_source) .
if sy-subrc <> 0.
write : / sy-subrc.
else.
delete adjacent duplicates from i_pernr comparing pernr.
loop at i_pernr.
write : / i_pernr-pernr.
endloop.
endif.Revert back for more help
Regards
Naresh
‎2006 Nov 30 10:23 PM
Hi,
Use the below code. It will cover all the conditions with <b>AND, OR etc</b> in the Select Query. Also the WHERE condition will be produced by SAP. So its reliable.
Populate I_SELOPT with your values as follows:
I_SELOPT-SHLPNAME = MARA
I_SELOPT-SHLPFIELD = MATNR
I_SELOPT-SIGN = I
I_SELOPT-OPTION = EQ
I_SELOPT-LOW = 12
APPEND I_SELOPT. CALL FUNCTION 'F4_CONV_SELOPT_TO_WHERECLAUSE'
IMPORTING
WHERE_CLAUSE = V_WHERECLAUSE
TABLES
SELOPT_TAB = I_SELOPT.
I_SELOPT will have all the conditions.
Here V_WHERECLAUSE will have the dynamic where clause.
SELECT * FROM Yourtable
INTO table itab WHERE (V_WHERECLAUSE).Let me know if you have any queries.
Raja T
Message was edited by:
Raja T
‎2006 Dec 01 2:40 AM
Raja,
Your suggestion worked very well.
Points awarded and thanks
aRs
‎2006 Dec 01 2:50 AM