Application Development and Automation 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: 
Read only

Loop at Screen problem

Former Member
0 Likes
1,246

Hi,

I am facing a few hicups in my code, I needed to make certain FIelds as updateable and some as non updateable but the problem is that this is not happening. Can you tell me where i am going wrong. I have written this code in my PBO at the end. The Code should enable FIELD KAWRT for the 1st Line and disable the rest, while for the others it should enable Field KWERT. what is the problem in my code.

LOOP AT itab.

IF sy-tabix = 1.

LOOP AT SCREEN.

IF screen-name = 'ITAB-KSCHL' OR

screen-name = 'ITAB-KBETR' OR

screen-name = 'ITAB-KWERT'.

screen-input = '0'.

screen-output = '0'.

MODIFY SCREEN.

ELSEIF screen-name = 'ITAB-KAWRT'.

screen-input = '1'.

screen-output = '1'.

MODIFY SCREEN.

ENDIF.

ENDLOOP.

ENDIF.

READ TABLE i_kschl WITH KEY kschl = itab-kschl.

IF sy-subrc = 0.

LOOP AT SCREEN.

IF screen-name = 'ITAB-KSCHL' OR

screen-name = 'ITAB-KAWRT' OR

screen-name = 'ITAB-KBETR'.

screen-input = '0'.

screen-output = '0'.

MODIFY SCREEN.

ELSEIF screen-name = 'ITAB-KWERT'.

screen-input = '1'.

screen-output = '1'.

MODIFY SCREEN.

ENDIF.

ENDLOOP.

ENDIF.

ENDLOOP.

8 REPLIES 8
Read only

Former Member
0 Likes
943

Hi..

Instead of sy-tabix...change to sy-index and check...


LOOP AT itab.
"IF sy-tabix = 1. Change here...
if sy-index = 1.
LOOP AT SCREEN.
IF screen-name = 'ITAB-KSCHL' OR
screen-name = 'ITAB-KBETR' OR
screen-name = 'ITAB-KWERT'.
screen-input = '0'.
screen-output = '0'.
MODIFY SCREEN.
ELSEIF screen-name = 'ITAB-KAWRT'.
screen-input = '1'.
screen-output = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.

Read only

Former Member
0 Likes
943

LOOP AT itab.

IF sy-tabix = 1.

LOOP AT SCREEN.

IF screen-name = 'ITAB-KSCHL' OR

screen-name = 'ITAB-KBETR' OR

screen-name = 'ITAB-KWERT'. -


> remove this condition here

screen-input = '0'.

screen-output = '0'.

MODIFY SCREEN.

endif. --> otherwise close your first endif here. and start agagin if statemnet

IF screen-name = 'ITAB-KAWRT'.

screen-input = '1'.

screen-output = '1'.

MODIFY SCREEN.

ENDIF.

ENDLOOP.

ENDIF.

Read only

Former Member
0 Likes
943

Hi,

Make the changes as below in bold letters.

LOOP AT itab.

IF sy-tabix = 1.

LOOP AT SCREEN.

IF screen-name = 'ITAB-KSCHL' OR

screen-name = 'ITAB-KBETR' OR

screen-name = 'ITAB-KWERT'.

screen-input = '0'.

screen-output = '1'.

MODIFY SCREEN.

ELSEIF screen-name = 'ITAB-KAWRT'.

screen-input = '1'.

screen-output = '0'.

MODIFY SCREEN.

ENDIF.

ENDLOOP.

ENDIF.

SORT ITAB BY KSCHL.

READ TABLE i_kschl WITH KEY kschl = itab-kschl BINARY SEARCH.

IF sy-subrc = 0.

LOOP AT SCREEN.

IF screen-name = 'ITAB-KSCHL' OR

screen-name = 'ITAB-KAWRT' OR

screen-name = 'ITAB-KBETR'.

screen-input = '0'.

screen-output = '1'.

MODIFY SCREEN.

ELSEIF screen-name = 'ITAB-KWERT'.

screen-input = '1'.

screen-output = '0'.

MODIFY SCREEN.

ENDIF.

ENDLOOP.

ENDIF.

ENDLOOP.

Read only

Former Member
0 Likes
943

well..i think there are lot of hiccups in the code..

You are giving the internal table field name in SCREEN-NAME..which is incorrect.. you have to give the name of the parameter or select option given in the selection screen....

Read only

Former Member
0 Likes
943

Are you using table control ?

regards,

Advait

Read only

Former Member
0 Likes
943

HI,

Well I am using a Table Control, the problem is that for all the records the FIELD KWERT is getting enabled, which should not happen for the 1st line that has base value FIELD KAWRT should be enabled and FIELD KWERT should be disabled.

KSSCHL KAWRT KBETR KWERT

1 BASE ENABLED DISABLED DISABLED

2 ED DISABLED DISABLED ENABLED

3 INSU DISABLED DISABLED ENABLED

.

.

The problem is that even for the 1st LINE KAWRT is getting disabled. i.e. the second logic is overiding the 1st logic although in the debug mode it shows properly and doing the proper assignment.

Read only

0 Likes
943

Hi,

Its happening so because as in your code:


LOOP AT itab.
IF sy-tabix = 1.
LOOP AT SCREEN.                             "This is executed for the First Time That's *FINE*
IF screen-name = 'ITAB-KSCHL' OR
screen-name = 'ITAB-KBETR' OR
screen-name = 'ITAB-KWERT'.
screen-input = '0'.
screen-output = '0'.
MODIFY SCREEN.
ELSEIF screen-name = 'ITAB-KAWRT'.
screen-input = '1'.
screen-output = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.

READ TABLE i_kschl WITH KEY kschl = itab-kschl.    
*THIS PART OF CODE IS EXECUTED ALWAYS WHICH YOU DON'T  WANT SO THIS  SHUD BE IN ELSE PART OF _*IF SY-TABIX = 1**_                                              
IF sy-subrc = 0.
LOOP AT SCREEN.
IF screen-name = 'ITAB-KSCHL' OR
screen-name = 'ITAB-KAWRT' OR
screen-name = 'ITAB-KBETR'.
screen-input = '0'.
screen-output = '0'.
MODIFY SCREEN.
ELSEIF screen-name = 'ITAB-KWERT'.
screen-input = '1'.
screen-output = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.

DO LIKE:


LOOP AT itab.
IF sy-tabix = 1.
LOOP AT SCREEN.                      
............................
............................
ENDLOOP.
ELSE.
READ TABLE i_kschl WITH KEY kschl = itab-kschl.    
............................
............................
ENDIF.

Read only

Former Member
0 Likes
943

hi neha,

well anyways the table i_kschl does not contain the 1st record i.e. the BASE Price. so it doesnt execute that code for the 1st record. anyways I did try out your sugestion but still it didnt help. it is giving default as the last record that it gets in the loop to all records.

regards

yao chhang