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: 

BDC

Former Member
0 Kudos

Hi,

----


FORM fetch_condition_records .

REFRESH : t_final , t_vbak1 , t_konv .

SELECT vbeln

auart

vkorg

vtweg

spart

vkbur

knumv

FROM vbak

INTO TABLE t_vbak1

WHERE vbeln EQ w_vbeln.

r_kschl-sign = c_i.

r_kschl-option = c_eq.

r_kschl-low = 'ZGRT'.

APPEND r_kschl.

r_kschl-sign = c_i.

r_kschl-option = c_eq.

r_kschl-low = 'ZGLD'.

APPEND r_kschl.

r_kschl-sign = c_i.

r_kschl-option = c_eq.

r_kschl-low = 'ZGRR'.

APPEND r_kschl.

r_kschl-sign = c_i.

r_kschl-option = c_eq.

r_kschl-low = 'ZGT1'.

APPEND r_kschl.

r_kschl-sign = c_i.

r_kschl-option = c_eq.

r_kschl-low = 'ZGT2'.

APPEND r_kschl.

SELECT knumv

stunr

zaehk

kschl

kvarc

kbetr

krech

varcond

FROM konv

INTO TABLE t_konv

FOR ALL ENTRIES IN t_vbak1

WHERE knumv EQ t_vbak1-knumv AND

kschl IN r_kschl.

SORT t_konv .

LOOP AT t_vbak1 INTO wa_vbak1.

LOOP AT t_konv INTO wa_konv

WHERE knumv = wa_vbak1-knumv.

IF sy-subrc EQ 0 .

wa_final-vbeln = wa_vbak1-vbeln .

wa_final-auart = wa_vbak1-auart .

wa_final-vkorg = wa_vbak1-vkorg .

wa_final-vtweg = wa_vbak1-vtweg .

wa_final-spart = wa_vbak1-spart .

wa_final-vkbur = wa_vbak1-vkbur .

wa_final-stunr = wa_konv-stunr .

wa_final-zaehk = wa_konv-zaehk .

wa_final-kschl = wa_konv-kschl .

wa_final-kvarc = wa_konv-kvarc .

wa_final-kbetr = wa_konv-kbetr.

wa_final-krech = wa_final-krech.

wa_final-varcond = wa_konv-varcond.

IF wa_final-varcond IS NOT INITIAL.

APPEND wa_final TO t_final .

ENDIF.

CLEAR : wa_final , wa_konv,r_kschl.

ENDIF.

ENDLOOP.

ENDLOOP.

ENDFORM.

is there any other alternative to this code.

this code makes performance issue.

thanks in advance.

1 ACCEPTED SOLUTION

Former Member
0 Kudos

1. Avoid nested loops.

2. check t_vbak1 is not initial before using for all entries.

do as below

SELECT vbeln

auart

vkorg

vtweg

spart

vkbur

knumv

FROM vbak

INTO TABLE t_vbak1

WHERE vbeln EQ w_vbeln.

r_kschl-sign = c_i.

r_kschl-option = c_eq.

r_kschl-low = 'ZGRT'.

APPEND r_kschl.

r_kschl-sign = c_i.

r_kschl-option = c_eq.

r_kschl-low = 'ZGLD'.

APPEND r_kschl.

r_kschl-sign = c_i.

r_kschl-option = c_eq.

r_kschl-low = 'ZGRR'.

APPEND r_kschl.

r_kschl-sign = c_i.

r_kschl-option = c_eq.

r_kschl-low = 'ZGT1'.

APPEND r_kschl.

r_kschl-sign = c_i.

r_kschl-option = c_eq.

r_kschl-low = 'ZGT2'.

APPEND r_kschl.

<b>if t_vbak1[] is not intial.</b>

SELECT knumv

stunr

zaehk

kschl

kvarc

kbetr

krech

varcond

FROM konv

INTO TABLE t_konv

FOR ALL ENTRIES IN t_vbak1

WHERE knumv EQ t_vbak1-knumv AND

kschl IN r_kschl.

<b>endif.</b>

SORT t_konv .

LOOP AT t_vbak1 INTO wa_vbak1.

<b>read table t_konv into wa_knov with key knumv = wa_vbak1-knumv.

if sy-subrc = 0.

LOOP AT t_konv INTO wa_konv from sy-tabix.

if wa_konv-knumv ne wa_vbak1-knumv.

exit.

endif.

endloop.

endif.</b>

IF sy-subrc EQ 0 .

wa_final-vbeln = wa_vbak1-vbeln .

wa_final-auart = wa_vbak1-auart .

wa_final-vkorg = wa_vbak1-vkorg .

wa_final-vtweg = wa_vbak1-vtweg .

wa_final-spart = wa_vbak1-spart .

wa_final-vkbur = wa_vbak1-vkbur .

wa_final-stunr = wa_konv-stunr .

wa_final-zaehk = wa_konv-zaehk .

wa_final-kschl = wa_konv-kschl .

wa_final-kvarc = wa_konv-kvarc .

wa_final-kbetr = wa_konv-kbetr.

wa_final-krech = wa_final-krech.

wa_final-varcond = wa_konv-varcond.

IF wa_final-varcond IS NOT INITIAL.

APPEND wa_final TO t_final .

ENDIF.

CLEAR : wa_final , wa_konv,r_kschl.

ENDIF.

ENDLOOP.

ENDLOOP.

ENDFORM.

<b>Reward Points for helpful answers</b>

Satish

2 REPLIES 2

Former Member
0 Kudos

Your SELECT is OK. The problem is with nested LOOPs. Please see:

<a href="/people/rob.burbank/blog/2006/02/07/performance-of-nested-loops">Performance of Nested Loops</a>

Rob

Former Member
0 Kudos

1. Avoid nested loops.

2. check t_vbak1 is not initial before using for all entries.

do as below

SELECT vbeln

auart

vkorg

vtweg

spart

vkbur

knumv

FROM vbak

INTO TABLE t_vbak1

WHERE vbeln EQ w_vbeln.

r_kschl-sign = c_i.

r_kschl-option = c_eq.

r_kschl-low = 'ZGRT'.

APPEND r_kschl.

r_kschl-sign = c_i.

r_kschl-option = c_eq.

r_kschl-low = 'ZGLD'.

APPEND r_kschl.

r_kschl-sign = c_i.

r_kschl-option = c_eq.

r_kschl-low = 'ZGRR'.

APPEND r_kschl.

r_kschl-sign = c_i.

r_kschl-option = c_eq.

r_kschl-low = 'ZGT1'.

APPEND r_kschl.

r_kschl-sign = c_i.

r_kschl-option = c_eq.

r_kschl-low = 'ZGT2'.

APPEND r_kschl.

<b>if t_vbak1[] is not intial.</b>

SELECT knumv

stunr

zaehk

kschl

kvarc

kbetr

krech

varcond

FROM konv

INTO TABLE t_konv

FOR ALL ENTRIES IN t_vbak1

WHERE knumv EQ t_vbak1-knumv AND

kschl IN r_kschl.

<b>endif.</b>

SORT t_konv .

LOOP AT t_vbak1 INTO wa_vbak1.

<b>read table t_konv into wa_knov with key knumv = wa_vbak1-knumv.

if sy-subrc = 0.

LOOP AT t_konv INTO wa_konv from sy-tabix.

if wa_konv-knumv ne wa_vbak1-knumv.

exit.

endif.

endloop.

endif.</b>

IF sy-subrc EQ 0 .

wa_final-vbeln = wa_vbak1-vbeln .

wa_final-auart = wa_vbak1-auart .

wa_final-vkorg = wa_vbak1-vkorg .

wa_final-vtweg = wa_vbak1-vtweg .

wa_final-spart = wa_vbak1-spart .

wa_final-vkbur = wa_vbak1-vkbur .

wa_final-stunr = wa_konv-stunr .

wa_final-zaehk = wa_konv-zaehk .

wa_final-kschl = wa_konv-kschl .

wa_final-kvarc = wa_konv-kvarc .

wa_final-kbetr = wa_konv-kbetr.

wa_final-krech = wa_final-krech.

wa_final-varcond = wa_konv-varcond.

IF wa_final-varcond IS NOT INITIAL.

APPEND wa_final TO t_final .

ENDIF.

CLEAR : wa_final , wa_konv,r_kschl.

ENDIF.

ENDLOOP.

ENDLOOP.

ENDFORM.

<b>Reward Points for helpful answers</b>

Satish