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: 

how should i capture user action when enter is pressed in table control

Former Member
0 Kudos

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

32 REPLIES 32

lijisusan_mathews
Active Contributor
0 Kudos

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

0 Kudos

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

0 Kudos

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.

0 Kudos

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.                

0 Kudos

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 .

0 Kudos

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.

0 Kudos

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.

0 Kudos

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.

0 Kudos

"All User Options should be executed when you press ENter" Do you mean Insert , delete etc??? Can you please explain a little more clearly?

0 Kudos

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

0 Kudos

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.

0 Kudos

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

0 Kudos

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

0 Kudos

hi,

thanks, WHAT ABOUT CURSOR POSITION CONTROL IN TC.

0 Kudos

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

0 Kudos

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.

0 Kudos

Can you please post your latest flow logic code again.

0 Kudos

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

0 Kudos

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.

0 Kudos

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

0 Kudos

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

0 Kudos

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

0 Kudos

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.

0 Kudos

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.

0 Kudos

Where have your written this code?? In the PAI/PBO ? In teh Loop in the flow logic??

0 Kudos

hi,

thanks,

in loop in flow logic pbo

0 Kudos

Place it in the PAI . after the loop..

0 Kudos

OR simply place it in PAI inside the loop itself.

0 Kudos

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.

0 Kudos

IF a dump is happening then You ll have to specify the index as you mentioned earlier. just uncomment " INDEX V_IDX.

0 Kudos

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

0 Kudos

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