Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

Help needed in cancellation logic

satvik_panchal
Participant
0 Kudos

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

4 REPLIES 4

Former Member
0 Kudos

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

Former Member
0 Kudos

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

0 Kudos

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

0 Kudos

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