2012 Oct 22 6:36 AM
Hello experts,
I have one requirement in which if the business area and the g/l amount is the same, then those values should not be displayed inthe final table.
My coding is given below:
IF it_bsis1 is NOT INITIAL.
SELECT bukrs hkont budat blart bschl shkzg gsber pswbt bewar FROM bsis
INTO CORRESPONDING FIELDS OF TABLE it_bsis_s1
FOR ALL ENTRIES IN it_bsis1
WHERE shkzg = 'S'
AND bewar IN ('120', '170')
AND bschl = 70
AND blart = 'AA'
AND budat in s_date
AND gsber in s_werks
AND bukrs = it_bsis1-bukrs
AND hkont = it_bsis1-hkont.
ENDIF.
IF it_bsis1 is NOT INITIAL.
SELECT bukrs hkont budat blart bschl shkzg gsber pswbt bewar FROM bsis
INTO CORRESPONDING FIELDS OF TABLE it_bsis_s11
FOR ALL ENTRIES IN it_bsis1
WHERE shkzg = 'S'
AND bewar IN ('120', '170')
AND bschl = 70
AND blart = 'AA'
AND budat in s_date
AND gsber in s_werks
AND bukrs = it_bsis1-bukrs
AND hkont = it_bsis1-hkont.
ENDIF.
LOOP AT it_bsis_s1 INTO wa_bsis_s1.
LOOP AT it_bsis_s11 INTO wa_bsis_s11.
DELETE it_bsis_s11 WHERE gsber = wa_bsis_s1-gsber.
ENDLOOP.
ENDLOOP.
After this coding i m not able to cancel out all the values of the above condition. Please guide me where I m wrong in the cancellation logic.
Thanks and regards,
Satvik
2012 Oct 22 7:14 AM
Hi Satvik,
please try the below code
IF it_bsis1 IS NOT INITIAL.
SELECT bukrs hkont budat blart bschl shkzg gsber pswbt bewar FROM bsis
INTO TABLE it_bsis_s1
FOR ALL ENTRIES IN it_bsis1
WHERE budat IN s_date
AND bukrs = it_bsis1-bukrs
AND hkont = it_bsis1-hkont.
IF it_bsis_s1 IS NOT INITIAL.
DELETE it_bsis_s1 WHERE shkzg NE 'S'.
DELETE it_bsis_s1 WHERE bewar NOT IN ('120', '170').
DELETE it_bsis_s1 WHERE bschl NE '70'.
DELETE it_bsis_s1 WHERE blart NE 'AA'.
DELETE it_bsis_s1 WHERE gsber NOT IN s_werks.
ENDIF.
SELECT bukrs hkont budat blart bschl shkzg gsber pswbt bewar FROM bsis
INTO TABLE it_bsis_s11
FOR ALL ENTRIES IN it_bsis1
WHERE budat IN s_date
AND bukrs = it_bsis1-bukrs
AND hkont = it_bsis1-hkont.
IF it_bsis_s11 IS NOT INITIAL.
DELETE it_bsis_s11 WHERE shkzg NE 'S'.
DELETE it_bsis_s11 WHERE bewar NOT IN ('120', '170').
DELETE it_bsis_s11 WHERE bschl NE '70'.
DELETE it_bsis_s11 WHERE blart NE 'AA'.
DELETE it_bsis_s11 WHERE gsber NOT IN s_werks.
ENDIF.
SORT it_bsis_s1 BY gsber.
SORT it_bsis_s11 BY gsber.
LOOP AT it_bsis_s1 INTO wa_bsis_s1.
READ TABLE it_bsis_s11 INTO wa_bsis_s11 WITH KEY gsber = wa_bsis_s1-gsber BINARY SEARCH.
IF sy-subrc = 0.
DELETE it_bsis_s11 WHERE gsber = wa_bsis_s1-gsber.
ENDIF.
ENDLOOP.
ENDLOOP.
ENDIF.
Regards,
Karthik
2012 Oct 22 7:48 AM
Hello Satvik,
I haven't seen any difference between the first and second select statement.
if your requirement is to delete the enries which are having same values for HKONT(G/L Account ) and GSBER(Business area)
then try the below code.
IF it_bsis1 is NOT INITIAL.
SELECT bukrs hkont budat blart bschl shkzg gsber pswbt bewar FROM bsis
INTO CORRESPONDING FIELDS OF TABLE it_bsis_s1
FOR ALL ENTRIES IN it_bsis1
WHERE shkzg = 'S'
AND bewar IN ('120', '170')
AND bschl = 70
AND blart = 'AA'
AND budat in s_date
AND gsber in s_werks
AND bukrs = it_bsis1-bukrs
AND hkont = it_bsis1-hkont.
if sy-subrc = 0.
loop at it_bsis1 into wa_bsis1.
lv_tabix = sy-tabix.
if wa_bsis1-hknot = wa_bsis-gsber.
delete it_bsis1 index lv_tabix.
endif.
endloop.
endif.
endif.
Regards,
Prathap
2012 Oct 22 8:01 AM
Hello Prathap,
My requirement is to delete the entries for same corresponding values of PSWBT(G/L Amount ) and GSBER(Business area)
e.g.
GSBER HKONT
1000 20000
1000 20000
The above values should cancel out and not be displayed in final table.
Thanks and Regards,
Satvik
2012 Oct 22 8:12 AM
Hi satvik,
Please refer the bwlow code it will work
SORT it_bsis_s1 BY gsber pwsbt.
SORT it_bsis_s11 BY gsber pwsbt.
LOOP AT it_bsis_s1 INTO wa_bsis_s1.
READ TABLE it_bsis_s11 INTO wa_bsis_s11 WITH KEY gsber = wa_bsis_s1-gsber
pwsbt = wa_bsis_s1-pwsbt
BINARY SEARCH.
IF sy-subrc = 0.
DELETE it_bsis_s11 WHERE gsber = wa_bsis_s1-gsber AND pwsbt = wa_bsis_s1-pwsbt.
ENDIF.
ENDLOOP.
Regards,
Karthik