‎2009 Jan 09 3:39 PM
Hi all
This is regarding Contract1 , which has a Building assigned to it ( BU ) , further i assign this BU to another Contract say Contract2.
Now my requirement is to Extract the data for all those contracts which have a BU which is further assigned to a contract2.
What i do is : i have to retrieve the data from the table VIBDBU ( BU table ) , with Objnr as the key. Here BU is having a naming convention as IB.
Please review my code and let me know , what am i missing .....
SELECT * FROM vibdbu INTO wa_vibdbu
WHERE objnr EQ loc_recn-objnr.
IF wa_vibdbu-objnr(2) EQ 'IB' .
SELECT * FROM vibdbu INTO wa_vibdbu
WHERE objnr EQ wa_vibdbu-objnr .
SELECT * FROM vibdbu INTO wa_vibdbu
WHERE bukrs EQ wa_vibdbu-bukrs AND
swenr EQ wa_vibdbu-swenr AND
sgenr EQ wa_vibdbu-sgenr .
SELECT SINGLE bukrs recnnr INTO CORRESPONDING FIELDS OF wa_subleases
FROM vicncn
WHERE objnr EQ wa_s_vibdbu-objnr .
IF sy-subrc EQ 0 .
COLLECT wa_subleases INTO subleases .
ENDIF .
ENDSELECT .
ENDSELECT .
ENDSELECT .
ENDIF .
Thanks
Shweta
‎2009 Jan 09 3:48 PM
Hi Shweta,
SELECT * FROM vibdbu INTO wa_vibdbu
WHERE objnr EQ loc_recn-objnr.
IF wa_vibdbu-objnr(2) EQ 'IB' .
SELECT * FROM vibdbu INTO wa_vibdbu "This again gets the same line as above select
WHERE objnr EQ wa_vibdbu-objnr . " since you are getting for the same objnr..if it loops then too unnecessarily
SELECT * FROM vibdbu INTO wa_vibdbu "This again would loop with the same set of data
WHERE bukrs EQ wa_vibdbu-bukrs AND "probably u want data in wa_s_vibdbu-objnr here..Check
swenr EQ wa_vibdbu-swenr AND
sgenr EQ wa_vibdbu-sgenr .
SELECT SINGLE bukrs recnnr INTO CORRESPONDING FIELDS OF wa_subleases
FROM vicncn
WHERE objnr EQ wa_s_vibdbu-objnr .
IF sy-subrc EQ 0 .
COLLECT wa_subleases INTO subleases .
ENDIF .
ENDSELECT .
ENDSELECT .
ENDSELECT .
Revert if i got u wrong.
Edited by: Ankesh on Jan 9, 2009 9:19 PM
‎2009 Jan 09 3:58 PM
All your code can be in 2 statements. You are selecting same data again and again.
Look at the following code
" Try to eliminate select * and use select single as you are selecting single line
SELECT * FROM vibdbu INTO wa_vibdbu
WHERE objnr EQ loc_recn-objnr.
IF wa_vibdbu-objnr(2) EQ 'IB' .
SELECT SINGLE bukrs recnnr INTO CORRESPONDING FIELDS OF wa_subleases
FROM vicncn
WHERE objnr EQ wa_s_vibdbu-objnr . " Where is this coming from WA_S_VIBDBU-OBJNR. If you mean, WA_VIBDBU-OBJNR , use it.
IF sy-subrc EQ 0 .
COLLECT wa_subleases INTO subleases .
ENDIF .
end select.
ENDSELECT .
No need of end select for select single statement
‎2009 Feb 16 2:12 PM