2011 Nov 07 3:37 AM
hi,
Can any body plz help me, how to capture user action when enter is pressed in the empty table control other than user defined options(edit,display etc...) and how to control cursor postion for thwe same.
<Priority normalized by moderator>
Edited by: Vinod Kumar on Nov 7, 2011 9:24 AM
2011 Nov 07 4:31 AM
What exactly is your requirement?
To get the Enter kEY press, Simply check for &IC1 and check if the cursor is in any field that starts with your table control name.
Suzie
2011 Nov 07 6:38 AM
thnx suzie,
my exact requirement is i have two subscreens(200,300) on main screen(100),
on 200 subscreen i have placed header table fields(FGINO , FGIDATE , ENTERDT, REFFGI , ERNAME , AENAM , LAEDA, LOEKZ)
on 300 screen i have placed a tablecontrol for item table fields(SNO ,FGINO, MATNR , WORDNO, MAKTG, QTY , LOEKZ )
FOR THESE TWO I HAVE COMMON OPTIONS AS (DISPLAY,CLEAR, MODIFY, DELETE, INSERT) ON THE SAMESCREEN 100.
ALL THESE OPTIONS R WORKING PROPERLY,BUT PROBLEM IS
INTIALLY IF I FILL TABLE CONTROL FIELDS WITHOUT ENTERING HEADER TABLE FIELDS ON SAME SCREEN AND IF I HIT ENTER MY CURSOR POSITION IS GOING TO THE FIRST FIELD WHICH IS PRESENT ON MY MAIN SCREEN,
I WANT KEEP MY CURSOR AT THE SAME POINT BEFORE HITTING ENTER AND I WANT TO DISPLAY SOME MESSAGE .
IN WHICI EVENT I HAVE TO WRITE THE CODE AND HOW CAN I CPATURE THE ACTION>
CAN U PLEASE GIVE ME SOME SAMPLE CODE PLZ...........
sorry for my english.
i am new the site and i dont know how to paste screen shot in thread.
Moderator message: please do not post in all upper case.
Edited by: Thomas Zloch on Nov 7, 2011 9:51 PM
2011 Nov 07 7:55 AM
Ok.. Try this...
In your Flow Logic page for 300.. You ll probably have fields wa-fl1, wa-fl2, wa-fl3 ( table control fields)etc..So for these fields in the flow logic, you r code should be:
Chain.
field wa-fld1.
field wa-fld2.
field wa-fld3.
module chk_fields on chain request.
end chain.
Now write your required code for message in the module chk_fields.
2011 Nov 07 9:40 AM
here problems are
data is not inserted into dbtable(itemtable:zprdfgitail) when pressed insert
http://i1237.photobucket.com/albums/ff464/MAHESHLAP/scr.jpg
when i hit ENTER data is populating in tc and after clearing if once again hit enter after selectin matnr nor
data is not gettin populated in tc
[http://i1237.photobucket.com/albums/ff464/MAHESHLAP/screen.jpg]
IF i enetered the wrong material my total screen is gettin disabled,My req is once again has to be available by showin some message. the screen is like this.... PLZ HELP ME
http://i1237.photobucket.com/albums/ff464/MAHESHLAP/scr1.jpg
PROCESS BEFORE OUTPUT.
MODULE FETCH_DATA.
module disp_mode.
LOOP AT T_ZPRDFGITAIL INTO W_ZPRDFGITAIL WITH CONTROL ZSUBTC .
MODULE DATA_POPULATE. ENDLOOP.
PROCESS AFTER INPUT.
LOOP at t_zprdfgitail.
field zprdfgitail-matnr.
module check_matnr.
MODULE tc_modify_matnr.
MODULE APPEND_DATA. ENDLOOP.
MODULE FETCH_DATA OUTPUT.
CASE SY-UCOMM.
WHEN 'DISPLAY'.
ZPRDFGITAIL-FGINO = ZPRDFGIHEAD-FGINO.
MOVE-CORRESPONDING ZPRDFGITAIL TO W_ZPRDFGITAIL.
APPEND W_ZPRDFGITAIL TO T_ZPRDFGITAIL.
SELECT SINGLE * FROM ZPRDFGIHEAD INTO
ZPRDFGIHEAD WHERE FGINO = ZPRDFGIHEAD-FGINO.
IF SY-SUBRC NE 0.
MESSAGE 'MATERIAL DOESNOT EXISTS' TYPE 'E'. ENDIF.
MOVE-CORRESPONDING ZPRDFGIHEAD TO W_ZPRDFGIHEAD.
APPEND W_ZPRDFGIHEAD TO T_ZPRDFGIHEAD.
SELECT * FROM ZPRDFGITAIL INTO TABLE T_ZPRDFGITAIL FOR ALL ENTRIES IN T_ZPRDFGIHEAD
WHERE FGINO = T_ZPRDFGIHEAD-FGINO.
WHEN 'MODIFY'.
MOVE-CORRESPONDING ZPRDFGITAIL TO W_ZPRDFGITAIL.
APPEND W_ZPRDFGITAIL TO T_ZPRDFGITAIL.
UPDATE ZPRDFGITAIL FROM TABLE T_ZPRDFGITAIL.
CLEAR W_ZPRDFGITAIL.
REFRESH T_ZPRDFGITAIL.
ENDCASE. ENDMODULE.
MODULE DISPLAY_MODE OUTPUT.
LOOP AT SCREEN.
IF SCREEN-NAME = 'ZPRDFGIHEAD-ERNAME'.
SCREEN-INPUT = '0'.
MODIFY SCREEN. ENDIF.
IF SCREEN-NAME = 'ZPRDFGIHEAD-AENAM'.
SCREEN-INPUT = '0'.
MODIFY SCREEN. ENDIF.
IF SCREEN-NAME = 'ZPRDFGIHEAD-LAEDA'.
SCREEN-INPUT = '0'.
MODIFY SCREEN. ENDIF. ENDLOOP.ENDMODULE.
MODULE DATA_POPULATE OUTPUT.
IF SY-STEPL = 1.
ZSUBTC-LINES = ZSUBTC-TOP_LINE + SY-LOOPC + 1.
ENDIF.
MOVE-CORRESPONDING W_ZPRDFGITAIL TO ZPRDFGITAIL.
CLEAR W_ZPRDFGITAIL.
ENDMODULE.
MODULE CHECK_MATNR INPUT.
DATA: P_MATNR TYPE MATNR,
LV_MATNR TYPE MATNR.
P_MATNR = ZPRDFGITAIL-MATNR.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = P_MATNR
IMPORTING
OUTPUT = P_MATNR.
SELECT SINGLE MATNR INTO LV_MATNR FROM MARA WHERE MATNR = P_MATNR.
IF SY-SUBRC NE 0.
MESSAGE 'MATERIAL DOESNOT EXISTS' TYPE 'E'. ENDIF. ENDMODULE.
MODULE TC_MODIFY_MATNR INPUT.
w_zprdfgitail-fgino = zprdfgihead-fgino.
W_ZPRDFGITAIL-MATNR = ZPRDFGITAIL-MATNR.
w_zprdfgitail-sno = zprdfgitail-sno.
w_zprdfgitail-wordno = zprdfgitail-wordno.
w_zprdfgitail-qty = zprdfgitail-qty.
append w_zprdfgitail to t_zprdfgitail.
IF W_ZPRDFGITAIL-MATNR IS NOT INITIAL.
CLEAR LV_MATNR.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
INPUT = W_ZPRDFGITAIL-MATNR
IMPORTING
OUTPUT = LV_MATNR.
SELECT SINGLE MAKTG FROM MAKT INTO W_ZPRDFGITAIL-MAKTG WHERE MATNR = LV_MATNR. ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = W_ZPRDFGITAIL-MATNR
IMPORTING
OUTPUT = W_ZPRDFGITAIL-MATNR.
MODIFY T_ZPRDFGITAIL FROM W_ZPRDFGITAIL INDEX ZSUBTC-CURRENT_LINE.
IF SY-SUBRC NE 0.
APPEND W_ZPRDFGITAIL TO T_ZPRDFGITAIL. ENDIF .ENDMODULE.
MODULE APPEND_DATA INPUT.
CASE SY-UCOMM.
WHEN 'INSERT'.
insert zprdfgitail from zprdfgitail.
MOVE-CORRESPONDING ZPRDFGITAIL TO W_ZPRDFGITAIL.
APPEND W_ZPRDFGITAIL TO T_ZPRDFGITAIL.
WHEN 'DELETE'.
SELECT SINGLE * FROM ZPRDFGIHEAD INTO ZPRDFGIHEAD WHERE FGINO = ZPRDFGIHEAD-FGINO.
MOVE-CORRESPONDING ZPRDFGIHEAD TO W_ZPRDFGIHEAD.
APPEND W_ZPRDFGIHEAD TO T_ZPRDFGIHEAD.
CLEAR W_ZPRDFGIHEAD.
IF SY-SUBRC EQ 0.
SELECT * FROM ZPRDFGITAIL INTO TABLE T_ZPRDFGITAIL
FOR ALL ENTRIES IN T_ZPRDFGIHEAD WHERE FGINO = T_ZPRDFGIHEAD-FGINO.
IF SY-SUBRC EQ 0.
LOOP AT T_ZPRDFGITAIL INTO W_ZPRDFGITAIL.
W_ZPRDFGITAIL-LOEKZ = 'X'.
MOVE-CORRESPONDING W_ZPRDFGITAIL TO ZPRDFGITAIL.
CLEAR W_ZPRDFGITAIL. ENDLOOP. ENDIF. ENDIF. ENDCASE.ENDMODULE.
2011 Nov 07 10:36 AM
OK.. make these changes and tell me whats remaining ok..
What is your screen field name for the fields by the way??
PROCESS AFTER INPUT.
LOOP at t_zprdfgitail into INTO INTO ZPRDFGITAIL.
field zprdfgitail-matnr module check_matnr on request..
MODULE tc_modify_matnr.
ENDLOOP.
MODULE APPEND_DATA.
MODULE FETCH_DATA.
in MODULE APPEND_DATA for INSERT add.
modify zprdfgitail from table t_ zprdfgitail .
2011 Nov 07 11:40 AM
THANK FOR UR HELP
ALL options (insert,delete,modify,clear,display) r working properly after filling the entire screen data and selecting options it is working.Insted in the middle if i hit enter the cursor position is going back to first field insted of that i want to move my cursor to the immediate empy field by showing message(like "ENTER XXX") and finally when all screen fields r entered then only i have to
select options from the available ones.HOW SHOULD I CONTROL THE CURSOR POS,GIVE ME SAMPLE CODE.
I AM SHOWIN NY SCREEN. FIRST FIELD IS FGINO.
http://i1237.photobucket.com/albums/ff464/MAHESHLAP/scr1.jpg
IF i entered wrong material my total screen is getting disabled insted i wnt some message to display HOW TO SHOW TAHT ONE ALSO.
http://i1237.photobucket.com/albums/ff464/MAHESHLAP/scr.jpg
thnkx to all.
2011 Nov 07 12:26 PM
HI,
To control your error field going to display mode, You have to code in the statement
field zprdfgitail-matnr module check_matnr on request..
here if you check the validity of matnr and display a type "E' message, that field will be in enable mode in red color, so that you can enter the correct value.
Write modules like this for each field to check if values exist in each cell.
field zprdfgtail-fgino module chk_input.
module chk_input on input.
if zprdfgtail-fgino is initial.
message 'Enter XXX' type 'E'.
endif.
end module.
2011 Nov 07 2:26 PM
thanks for ur help.
but my requirement is all user options present on screen has to be executed when i hit enter .
can u please explain me one condition.
field checks and all others r ok.
2011 Nov 08 4:08 AM
"All User Options should be executed when you press ENter" Do you mean Insert , delete etc??? Can you please explain a little more clearly?
2011 Nov 08 5:53 AM
thanks,
NOT FOR USER OPTIONS EXACTLY.
I WANT TO SET A DYNAMIC CURSOR POSITION ON MY SCREEN .
CLEARLY, I ENTER SLNO IN FIRST COLUMN OF TC AND IF I PRESS ENTER MY CURSOR POSITION IS BACK TO FGINO IN HEADER DETAILS.
MY REQ IS AFTER ENTERING ANY FIELD IN SCREEN, MY CURSOR POSITION SHOULD MOVE TO NEXT IMMEDIATE FIELD(COL OR ROW).
I KNOW THIS STATEMENT:
set cursor field <fld nam>[offset<off>].
BUT I DONT KNOW HOW TO USE IT IN SCREEN PROGRAMMING. AND ONEMORE THNG IF I ENTERD ANY WRONG VAL ON THE SCREEN , MY SCREEN IS GETTING DISABLED,NO OPTION IS EXECUTIN EVEN EXIT.
HOW Should i change that.
CAN U PLZ EXPLAIN ME WITH EX.
Edited by: MAHESHLAP on Nov 8, 2011 6:53 AM
2011 Nov 08 6:36 AM
Did you try out the method I said
PROCESS AFTER INPUT.
LOOP at t_zprdfgitail into INTO INTO ZPRDFGITAIL.
field zprdfgitail-matnr module check_matnr ..
MODULE tc_modify_matnr.
ENDLOOP.
MODULE APPEND_DATA.
MODULE FETCH_DATA.
This is actually alteration in your code itself..
See, if you code your field check( includes validation and blank field check ) in the module module check_matnr
then It will automatically go to that field when you click enter. All you need to do is to write message 'XXX' type 'E' in that module..
Please try this out for 1 field, and then reply.
2011 Nov 08 6:58 AM
hi,
i have tried already.but i am not able to contorl cursor position and not able to stop screen goin into disable mode.
this my coe which is workin .
PROCESS BEFORE OUTPUT.
MODULE SET_CURSOR.
MODULE FETCH_DATA.
MODULE DISP_MODE.
LOOP AT T_ZPRDFGITAIL INTO W_ZPRDFGITAIL WITH CONTROL ZSUBTC.
MODULE DATA_POPULATE. ENDLOOP.
* MODULE STATUS_0300.
PROCESS AFTER INPUT.
MODULE GET_CURSOR.
LOOP AT T_ZPRDFGITAIL.
FIELD ZPRDFGITAIL-MATNR.
MODULE CHECK_MATNR.
MODULE TC_MODIFY_MATNR.
MODULE APPEND_DATA. ENDLOOP.
* MODULE USER_COMMAND_0300.
MODULE SET_CURSOR OUTPUT.
set cursor field w_cursor.ENDMODULE.
MODULE FETCH_DATA OUTPUT.
CASE SY-UCOMM.
WHEN 'DISPLAY'.
ZPRDFGITAIL-FGINO = ZPRDFGIHEAD-FGINO.
MOVE-CORRESPONDING ZPRDFGITAIL TO W_ZPRDFGITAIL.
APPEND W_ZPRDFGITAIL TO T_ZPRDFGITAIL.
SELECT SINGLE * FROM ZPRDFGIHEAD INTO ZPRDFGIHEAD
WHERE FGINO = ZPRDFGIHEAD-FGINO.
IF SY-SUBRC NE 0.
MESSAGE 'MATERIAL DOESNOT EXISTS' TYPE 'E'. ENDIF.
MOVE-CORRESPONDING ZPRDFGIHEAD TO W_ZPRDFGIHEAD.
APPEND W_ZPRDFGIHEAD TO T_ZPRDFGIHEAD.
SELECT * FROM ZPRDFGITAIL INTO TABLE T_ZPRDFGITAIL
FOR ALL ENTRIES IN T_ZPRDFGIHEAD
WHERE FGINO = T_ZPRDFGIHEAD-FGINO.
WHEN 'MODIFY'.
check MARK = 'X'.
UPDATE ZPRDFGITAIL FROM TABLE T_ZPRDFGITAIL.
CLEAR W_ZPRDFGITAIL. ENDCASE.
REFRESH T_ZPRDFGIHEAD.ENDMODULE.
MODULE DATA_POPULATE OUTPUT.
IF SY-STEPL = 1.
ZSUBTC-LINES = ZSUBTC-TOP_LINE + SY-LOOPC + 1. ENDIF.
MOVE-CORRESPONDING W_ZPRDFGITAIL TO ZPRDFGITAIL.
CLEAR W_ZPRDFGITAIL.ENDMODULE.
MODULE GET_CURSOR INPUT.
get cursor field w_cursor.
ENDMODULE.
MODULE CHECK_MATNR INPUT.
DATA: P_MATNR TYPE MATNR,
LV_MATNR TYPE MATNR.
P_MATNR = ZPRDFGITAIL-MATNR.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = P_MATNR
IMPORTING
OUTPUT = P_MATNR.
SELECT SINGLE MATNR INTO LV_MATNR FROM MARA WHERE MATNR = P_MATNR.
IF SY-SUBRC NE 0.
MESSAGE 'MATERIAL DOESNOT EXISTS' TYPE 'E'. ENDIF.ENDMODULE.
MODULE TC_MODIFY_MATNR INPUT.
W_ZPRDFGITAIL-MATNR = ZPRDFGITAIL-MATNR.
IF W_ZPRDFGITAIL-MATNR IS NOT INITIAL.
CLEAR LV_MATNR.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
INPUT = W_ZPRDFGITAIL-MATNR
IMPORTING
OUTPUT = LV_MATNR.
SELECT SINGLE MAKTG FROM MAKT INTO W_ZPRDFGITAIL-MAKTG
WHERE MATNR = LV_MATNR. ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
INPUT = W_ZPRDFGITAIL-MATNR
IMPORTING
OUTPUT = W_ZPRDFGITAIL-MATNR.
W_ZPRDFGITAIL-FGINO = ZPRDFGIHEAD-FGINO.
W_ZPRDFGITAIL-SNO = ZPRDFGITAIL-SNO.
W_ZPRDFGITAIL-WORDNO = ZPRDFGITAIL-WORDNO.
W_ZPRDFGITAIL-QTY = ZPRDFGITAIL-QTY.
MODIFY T_ZPRDFGITAIL FROM W_ZPRDFGITAIL
INDEX ZSUBTC-CURRENT_LINE.
IF SY-SUBRC NE 0.
APPEND W_ZPRDFGITAIL TO T_ZPRDFGITAIL. ENDIF. ENDMODULE.
MODULE APPEND_DATA INPUT.
CASE SY-UCOMM.
WHEN 'INSERT'.
ZPRDFGITAIL-FGINO = ZPRDFGIHEAD-FGINO.
INSERT ZPRDFGITAIL FROM ZPRDFGITAIL .
WHEN 'DELETE'.
SELECT SINGLE * FROM ZPRDFGIHEAD INTO ZPRDFGIHEAD
WHERE FGINO = ZPRDFGIHEAD-FGINO.
MOVE-CORRESPONDING ZPRDFGIHEAD TO W_ZPRDFGIHEAD.
APPEND W_ZPRDFGIHEAD TO T_ZPRDFGIHEAD.
CLEAR W_ZPRDFGIHEAD.
IF SY-SUBRC EQ 0.
SELECT * FROM ZPRDFGITAIL INTO TABLE T_ZPRDFGITAIL
FOR ALL ENTRIES IN T_ZPRDFGIHEAD WHERE FGINO = T_ZPRDFGIHEAD-FGINO.
IF SY-SUBRC EQ 0.
IF MARK NE 'X'.
LOOP AT T_ZPRDFGITAIL INTO W_ZPRDFGITAIL.
W_ZPRDFGITAIL-LOEKZ = 'X'.
V_IDX = SY-TABIX.
MODIFY T_ZPRDFGITAIL FROM W_ZPRDFGITAIL INDEX V_IDX.
CLEAR W_ZPRDFGITAIL.
UPDATE ZPRDFGITAIL FROM TABLE T_ZPRDFGITAIL.
ENDLOOP. ELSE.
W_ZPRDFGITAIL-LOEKZ = 'X'.
V_IDX = SY-TABIX.
MODIFY T_ZPRDFGITAIL FROM W_ZPRDFGITAIL INDEX V_IDX.
CLEAR W_ZPRDFGITAIL.
UPDATE ZPRDFGITAIL FROM TABLE T_ZPRDFGITAIL.
ENDIF. ENDIF. ENDIF. ENDCASE.ENDMODULE.
Edited by: MAHESHLAP on Nov 8, 2011 7:59 AM
2011 Nov 08 7:12 AM
Buddy This is your PAI code
LOOP AT T_ZPRDFGITAIL.
FIELD ZPRDFGITAIL-MATNR.
MODULE CHECK_MATNR.
MODULE TC_MODIFY_MATNR.
MODULE APPEND_DATA. ENDLOOP.
replace it with
LOOP AT T_ZPRDFGITAIL.
FIELD ZPRDFGITAIL-MATNR MODULE CHECK_MATNR.
MODULE TC_MODIFY_MATNR.
MODULE APPEND_DATA. ENDLOOP.
and try now
Please note: FIELD ZPRDFGITAIL-MATNR MODULE CHECK_MATNR. is a single line
2011 Nov 08 8:48 AM
2011 Nov 08 9:33 AM
If you have done the above code correctly, you should be able to see that the cursor by itself is positioned in the correct field.( which has an error, or which is blank, depending on the order in which your field statements are)
Suzie
2011 Nov 08 10:08 AM
hi,
thanks
EVERY THING IS WORKING FINE EXCEPT CURSOR POSITION WHEN I ENTERD THE VALE ANE HIT ENTER THEN THE CURSOR IS GOING BACK TO FIRST FIELD ON THE SCREEN
2. WHEN I ENTERD WRONG VAL MY SCREEN IS GETTING DISABLE WAT ABT THAT.
2011 Nov 08 10:10 AM
2011 Nov 08 10:33 AM
hi,
THIS IS THE FLOW LOGIC FOR TC
PROCESS BEFORE OUTPUT.
MODULE SET_CURSOR.
MODULE FETCH_DATA.
MODULE DISP_MODE.
LOOP AT T_ZPRDFGITAIL INTO W_ZPRDFGITAIL WITH CONTROL ZSUBTC.
MODULE DATA_POPULATE.
ENDLOOP.
* MODULE STATUS_0300.
*
PROCESS AFTER INPUT.
MODULE GET_CURSOR.
LOOP AT T_ZPRDFGITAIL.
FIELD ZPRDFGITAIL-MATNR MODULE CHECK_MATNR.
MODULE TC_MODIFY_MATNR.
MODULE APPEND_DATA.
ENDLOOP.
* MODULE USER_COMMAND_0300
2011 Nov 09 4:11 AM
Your Flow Logic is correct, except for your fetch data. It will work that way too, but I would prefer executing my User actions in PAI. Have you written an Error message in your check_matnr module? It should enable that particular field whenever the particular error triggers and all the other fields will be disabled.
2011 Nov 09 4:31 AM
hi,
thanks,
EVERY THING IS FINE,
BUT I HAVE TO PLACE ROW SELECTION IN TABLE CONTROL and THAT IF I SELECT ANY PARTICULAR ROW AND IF I PRESS DELETE ONLY THAT PARTICULAR ENTRY HAS TO UPDATED WITH DELETION INDICATOR
HERE I HAVE PLACED ROW SELECTION AND I DONT KNOW HOW TO CPTURE THE SELECTION WHEN SINGLE ROW IS SELECTED.
CAN U PLZ HELP ME
HERE IS MY CODE FOR DELETE OPTION.
ALSO HERE IS MY SCREEN
[http://i1237.photobucket.com/albums/ff464/MAHESHLAP/xxxx.jpg]
MODULE APPEND_DATA INPUT.
CASE SY-UCOMM.
WHEN 'INSERT'.
ZPRDFGITAIL-FGINO = ZPRDFGIHEAD-FGINO.
INSERT ZPRDFGITAIL FROM ZPRDFGITAIL .
WHEN 'DELETE'.
SELECT SINGLE * FROM ZPRDFGIHEAD INTO ZPRDFGIHEAD WHERE FGINO = ZPRDFGIHEAD-FGINO.
MOVE-CORRESPONDING ZPRDFGIHEAD TO W_ZPRDFGIHEAD.
APPEND W_ZPRDFGIHEAD TO T_ZPRDFGIHEAD.
CLEAR W_ZPRDFGIHEAD.
IF SY-SUBRC EQ 0.
SELECT * FROM ZPRDFGITAIL INTO TABLE T_ZPRDFGITAIL
FOR ALL ENTRIES IN T_ZPRDFGIHEAD WHERE FGINO = T_ZPRDFGIHEAD-FGINO.
IF SY-SUBRC EQ 0.
LOOP AT T_ZPRDFGITAIL INTO W_ZPRDFGITAIL.
CHECK MARK = 'X'.
W_ZPRDFGITAIL-LOEKZ = 'X'.
V_IDX = SY-TABIX.
MODIFY T_ZPRDFGITAIL FROM W_ZPRDFGITAIL INDEX V_IDX.
CLEAR W_ZPRDFGITAIL.
UPDATE ZPRDFGITAIL FROM TABLE T_ZPRDFGITAIL.
CLEAR MARK.
ENDLOOP.
* ELSE.
* W_ZPRDFGITAIL-LOEKZ = 'X'.
* V_IDX = SY-TABIX.
* MODIFY T_ZPRDFGITAIL FROM W_ZPRDFGITAIL INDEX V_IDX.
* UPDATE ZPRDFGITAIL FROM TABLE T_ZPRDFGITAIL.
ENDIF.
ENDIF.
ENDCASE.
ENDMODULE.
Edited by: MAHESHLAP on Nov 9, 2011 5:47 AM
2011 Nov 09 4:59 AM
I din really understand why you are selecting data from tables to delete your records already in Table control. As far as I understood, you need to update a field LOEKZ as 'X' for each row in table control that is selected. Please correct me If I am wrong.
To update LOEKZ as 'X' for selected rows...
Instead of assigning the fieldname for selection as MARK, give teh field name as W_ZPRDFGITAIL-LOEKZ.
But in the flow Logic, make sure that in PAI you have written Loop statement as
Loop at T_ZPRDFGITAIL into W_ZPRDFGITAIL.
...
...
endloop.
Also make sure that you do not alter your work area value before the append_data module
And in Append Module... You do not need to write anything in particular to mark it for deletion because your internal table will already have the correct value...
Instead comment your code in append Module for delete and write
IF W_ZPRDFGITAIL-LOEKZ = 'X'
write the code to update the table
endif..
Edited by: Suzie on Nov 9, 2011 10:30 AM
2011 Nov 09 5:31 AM
hi suzie,
idea is good,
BUT HOW SHOULD LOOP KNOWS THE SELECTION IF I SELECT OTHER THAN FIRST ROW.
I DID THAT ALL R GETTING UPDATED OTHER THAN SELECTED ROWS.
HERE I WANT TO PASS DELETIOJ INDICATOR FOR OMLY SELECTED ROWS HOW SHOULD IT BE POSSIBLE?
THIS IS MODIFIED CODE.
WHEN 'DELETE'.
SELECT SINGLE * FROM ZPRDFGIHEAD INTO ZPRDFGIHEAD WHERE FGINO = ZPRDFGIHEAD-FGINO.
MOVE-CORRESPONDING ZPRDFGIHEAD TO W_ZPRDFGIHEAD.
APPEND W_ZPRDFGIHEAD TO T_ZPRDFGIHEAD.
CLEAR W_ZPRDFGIHEAD.
IF SY-SUBRC EQ 0.
SELECT * FROM ZPRDFGITAIL INTO TABLE T_ZPRDFGITAIL
FOR ALL ENTRIES IN T_ZPRDFGIHEAD WHERE FGINO = T_ZPRDFGIHEAD-FGINO.
IF SY-SUBRC EQ 0.
LOOP AT T_ZPRDFGITAIL INTO W_ZPRDFGITAIL.
* CHECK MARK = 'X'.
W_ZPRDFGITAIL-LOEKZ = 'X'.
V_IDX = SY-tabix.
MODIFY T_ZPRDFGITAIL FROM W_ZPRDFGITAIL INDEX V_IDX.
CLEAR W_ZPRDFGITAIL.
UPDATE ZPRDFGITAIL FROM TABLE T_ZPRDFGITAIL.
* CLEAR MARK.
ENDLOOP.
Edited by: MAHESHLAP on Nov 9, 2011 6:32 AM
2011 Nov 09 6:10 AM
Teh loop wil know because You are checking
HEN 'DELETE'.
* SELECT SINGLE * FROM ZPRDFGIHEAD INTO ZPRDFGIHEAD WHERE FGINO = ZPRDFGIHEAD-FGINO.
* MOVE-CORRESPONDING ZPRDFGIHEAD TO W_ZPRDFGIHEAD.
* APPEND W_ZPRDFGIHEAD TO T_ZPRDFGIHEAD.
* CLEAR W_ZPRDFGIHEAD.
* IF SY-SUBRC EQ 0.
* SELECT * FROM ZPRDFGITAIL INTO TABLE T_ZPRDFGITAIL
* FOR ALL ENTRIES IN T_ZPRDFGIHEAD WHERE FGINO = T_ZPRDFGIHEAD-FGINO.
* IF SY-SUBRC EQ 0.
* LOOP AT T_ZPRDFGITAIL INTO W_ZPRDFGITAIL.
* CHECK MARK = 'X'.
if W_ZPRDFGITAIL-LOEKZ = 'X'.
V_IDX = SY-tabix.
MODIFY T_ZPRDFGITAIL FROM W_ZPRDFGITAIL." INDEX V_IDX.
CLEAR W_ZPRDFGITAIL.
--UPDATE ZPRDFGITAIL FROM TABLE T_ZPRDFGITAIL--.
** CLEAR MARK.
endif.
* ENDLOOP.
You are already inside a loop in teh flow logic remember... So you need not write a separate loop inside it. It becomes a nested loop..
Instead after the endloop in the flow logic.. add anotehr module and in that for sy-ucomm = 'DELETE'
write
UPDATE ZPRDFGITAIL FROM TABLE T_ZPRDFGITAIL.
2011 Nov 09 7:03 AM
hi,
thanks,
when i am usin modify statement the modified values r showing in tc but my db table is not getting updated
wat to do now
see code
WHEN 'MODIFY'.
* CHECK MARK = 'X'.
LOOP AT T_ZPRDFGITAIL INTO W_ZPRDFGITAIL.
* MOVE-CORRESPONDING ZPRDFGItail TO W_ZPRDFGItail.
* APPEND W_ZPRDFGItail TO T_ZPRDFGItail.
UPDATE ZPRDFGItail FROM w_zprdfgitail.
CLEAR W_ZPRDFGItail.
* UPDATE ZPRDFGITAIL FROM TABLE T_ZPRDFGITAIL.
* CLEAR W_ZPRDFGITAIL.
ENDLOOP.
2011 Nov 09 7:16 AM
Where have your written this code?? In the PAI/PBO ? In teh Loop in the flow logic??
2011 Nov 09 7:34 AM
2011 Nov 09 7:38 AM
2011 Nov 09 7:39 AM
2011 Nov 09 8:10 AM
hi suzie,
u have given some code foe delete it is getting shoet dump
saying no index addition in loop.
the above one was solved , we r trying to modify key field so its not happening.
can u plz suggeszt me another way for delete.
2011 Nov 09 8:14 AM
IF a dump is happening then You ll have to specify the index as you mentioned earlier. just uncomment " INDEX V_IDX.
2011 Nov 09 8:55 AM
hi suzie,
ok i did that and its workin.
now what i have to do is,
1. i have to make that particular row which was deleted into disable mode
2. when i press DISPLAY option my total TABLE CONTROL SCREEN HAS TO BE IN DISPLAY MODE(NO EDITING),
whenever i press modify my SCREEN HAS TO BECOME ENABLE .
3.ONE MORE IMPORTANT THIN IS ON MY SCREEN THERE R FGINO and SERL NO THEY HAVE TO be AUTOMATICALLY GETS INCREASED BASED ON PREVIOUS NO ENTERD (first:1000,1001,1002 etc..)
CAN U PLZ SEND SOME SAMPLE CODE.
CAN U PLAESE CLARIFY THESE THREE AS SOON AS POSSIBLE.
THANKS.
Edited by: MAHESHLAP on Nov 9, 2011 9:55 AM
Edited by: MAHESHLAP on Nov 9, 2011 9:56 AM
2011 Nov 09 9:17 AM
I think you have wasted enough time of forum participants by now. Please take an ABAP course before posting again, always search for available information first.
Do not post in UPPER CASE LETTERS, this is considered shouting.
Do not use terms like "as soon as possible", everybody has the same priority here.
[Rules of engagement|http://wiki.sdn.sap.com/wiki/display/HOME/RulesofEngagement]
[Asking Good Questions in the Forums to get Good Answers|]
Thread locked.
Thomas