‎2008 Dec 08 3:08 PM
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.
‎2008 Dec 08 3:14 PM
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.
‎2008 Dec 08 3:15 PM
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.
‎2008 Dec 08 3:15 PM
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.
‎2008 Dec 08 3:16 PM
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....
‎2008 Dec 08 3:25 PM
‎2008 Dec 09 6:35 AM
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.
‎2008 Dec 09 7:03 AM
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.
‎2008 Dec 09 9:12 AM
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