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: 

Delete the entries from table conrol

former_member670836
Participant
0 Kudos

HI experts..

Moderator Message: This thread has gone far too long, thanks to you not putting much effort of your own and totally depending on the forum for getting your work done. This is evident in the fact that you are asking one more question after the current one seems to be partially solved. So, let me repeat it...put some effort of your own and stop depending on the forums for every small issue.

I am facing a problem while deleting the entries from table controls..i mean entries not deleted..

as of now my code is

MODULE DATA_RETRIVAL OUTPUT.

SELECT MANDT WERKS MATNR LGOLIF LFGJA LFMON LABST

INSME SPEME RETME VMLAB VMINS VMSPE VMRET

LBVLA VMSAL ZRCVDQTY ZISSUEQTY FROM ZMABBSTOCK INTO TABLE LT_STOCK

WHERE WERKS IN WERKS AND

MATNR IN MATNR AND

LGOLIF IN LGOLIF AND

LFGJA IN LFGJA AND

LFMON IN LFMON.

ENDMODULE. " DATA_RETRIVAL OUTPUT

&----


*& Module POPULATE_DATA OUTPUT

&----


  • text

----


MODULE POPULATE_DATA OUTPUT.

MOVE-CORRESPONDING LS_STOCK TO ZMABBSTOCK.

ENDMODULE. " POPULATE_DATA OUTPUT

MODULE USER_COMMAND_0100 INPUT.

CASE OK-CODE.

WHEN 'BACK'.

LEAVE TO SCREEN 0.

WHEN 'EXIT'.

EXIT.

WHEN 'DELETE'.

LOOP AT ZMABBSTOCK INTO ZMABBSTOCK.

IF LSEL = 'X'.

DELETE ZMABBSTOCK FROM ZMABBSTOCK.

ENDIF.

ENDLOOP.

can any body plz help me..

Thanks

praveena

Edited by: kishan P on Dec 1, 2010 3:53 PM

25 REPLIES 25

Former Member
0 Kudos

HI,

Have you defined the ZMABBSTOCK -LSEL in the table control attribute w/sel_column , if yes then write the below logic--

WHEN 'DELETE'.

DELETE ZMABBSTOCK FROM ZMABBSTOCK where LSEL = 'X'.

Regards,

Madhukar Shetty

0 Kudos

Hi madukar,

ThanQ for giving reply.

as you said i hav ewritten code as

WHEN 'DELETE'.

DELETE ZMABBSTOCK FROM ZMABBSTOCK WHERE LSEL = 'X'.

now i am geting error as . expected after ZMABBSTOCK

can you plz tell me waht is wrong...

0 Kudos

Hi,

Try DELETE ZMABBSTOCK WHERE LSEL = 'X'.

I hope you have made in table control properties w/selcolumn as ZMABBSTOCK-LSEL.

0 Kudos

Hi

WHEN 'DELETE'.

DELETE ZMABBSTOCK where LSEL = 'X'.

Regards,

Madhukar Shetty

0 Kudos

hI MADUKAR..

this is my actual code..

PROCESS BEFORE OUTPUT.

MODULE DATA_RETRIVAL.

MODULE STATUS_0100.

LOOP AT LT_STOCK into LS_STOCK WITH CONTROL TABCON.

MODULE POPULATE_DATA.

ENDLOOP.

PROCESS AFTER INPUT.

LOOP AT LT_STOCK.

ENDLOOP.

MODULE USER_COMMAND_0100.

MODULE USER_COMMAND_0100 INPUT.

CASE OK-CODE.

WHEN 'BACK'.

LEAVE TO SCREEN 0.

WHEN 'EXIT'.

EXIT.

WHEN 'DELETE'.

DELETE ZMABBSTOCK FROM ZMABBSTOCK WHERE LSEL = 'X'.

WHEN 'SAVE'.

UPDATE ZMABBStOCK FROM TABLE LT_STOCK.

IF SY-SUBRC EQ 0.

COMMIT WORK AND WAIT.

endif.

ENDCASE.

still it is giving same error..

can you plz help me out

still it is givi

0 Kudos

hi..

WHEN 'DELETE'.

DELETE ZMABBSTOCK WHERE LSEL = 'X'.

now it is giving error as

Unable to interpret "WHERE". Possible causes: Incorrect spelling or comma error.

can you plz check this..

0 Kudos

HI,

What is this ZMABBSTOCK is this a internal table ? And have you defined the LSEL field in the ZMABBSTOCK internal table ?

0 Kudos

Hi,

Check this link. I am explaining step by step how to do the database manipultions using table control.

https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/documents/a1-8-4/table%20c...

0 Kudos

hi madhu

ZMABBSTOCK is a database table..TABCON is table control name..i ahve defined LSEL property for TABCON

i am populating data into table control from database..

0 Kudos

Hi jayathi

thanks for giving reply

actually in my databse table i do'nt have field like pick or something related to that...then how can i approach..

can you plz help me

0 Kudos

Praveen,

Have you defined this field LSEL in the internal table which you have used in the table control ? If not then define it first . Then if you want the record which user selects in Tcontrol should be deleted from DB tabe then

loop at itab where LSEL = 'X'. " This is the internal table used in table control

DELETE FROM ZMABBSTOCK WHERE field = itab-field. "This where use the key field value

if sy-subrc eq 0.

delete itab.

endif.

endloop.

Regards,

MadhukarShetty

0 Kudos

Hi madhu...

As you said i have declared LSEL in internal table..still it is not working...as of my code is....

ZMABBSTOCK is database table lt_stock is internal table..

TYPES: BEGIN OF TT_STOCK,

mandt type ZMABBSTOCK-mandt,

WERKS TYPE ZMABBSTOCK-WERKS,

MATNR TYPE ZMABBSTOCK-MATNR,

LGOLIF TYPE ZMABBSTOCK-LGOLIF,

LFGJA TYPE ZMABBSTOCK-LFGJA,

LFMON TYPE ZMABBSTOCK-LFMON,

LABST TYPE ZMABBSTOCK-LABST,

INSME TYPE ZMABBSTOCK-INSME,

SPEME TYPE ZMABBSTOCK-SPEME,

RETME TYPE ZMABBSTOCK-RETME,

VMLAB TYPE ZMABBSTOCK-VMLAB,

VMINS TYPE ZMABBSTOCK-VMINS,

VMSPE TYPE ZMABBSTOCK-VMSPE,

VMRET TYPE ZMABBSTOCK-VMRET,

LBVLA TYPE ZMABBSTOCK-LBVLA,

VMSAL TYPE ZMABBSTOCK-VMSAL,

ZRCVDQTY TYPE ZMABBSTOCK-ZRCVDQTY,

ZISSUEQTY TYPE ZMABBSTOCK-ZISSUEQTY,

LSEL TYPE C, END OF TT_STOCK.

DATA: LT_STOCK TYPE TABLE OF TT_STOCK,

LS_STOCK TYPE TT_STOCK.

PROCESS BEFORE OUTPUT.

MODULE DATA_RETRIVAL.

MODULE STATUS_0100.

LOOP AT LT_STOCK into LS_STOCK WITH CONTROL TABCON.

MODULE POPULATE_DATA.

ENDLOOP.

PROCESS AFTER INPUT.

LOOP AT LT_STOCK.

ENDLOOP.

MODULE USER_COMMAND_0100.

MODULE DATA_RETRIVAL OUTPUT.

SELECT MANDT WERKS MATNR LGOLIF LFGJA LFMON LABST

INSME SPEME RETME VMLAB VMINS VMSPE VMRET

LBVLA VMSAL ZRCVDQTY ZISSUEQTY FROM ZMABBSTOCK INTO TABLE LT_STOCK

WHERE WERKS IN WERKS AND

MATNR IN MATNR AND

LGOLIF IN LGOLIF AND

LFGJA IN LFGJA AND

LFMON IN LFMON.

ENDMODULE.

MODULE POPULATE_DATA OUTPUT.

MOVE-CORRESPONDING LS_STOCK TO ZMABBSTOCK.

*MOVE-CORRESPONDING LS_STOCK TO LS_STOCK1.

ENDMODULE.

MODULE USER_COMMAND_0100 INPUT.

CASE OK-CODE.

WHEN 'BACK'.

LEAVE TO SCREEN 0.

WHEN 'EXIT'.

EXIT.

WHEN 'DELETE'.

LOOP AT LT_STOCK INTO LS_STOCK WHERE LSEL = 'X'. .

DELETE ZMABBSTOCK FROM LS_STOCK.

ENDLOOP.

WHEN 'SAVE'.

UPDATE ZMABBStOCK FROM TABLE LT_STOCK.

IF SY-SUBRC EQ 0.

COMMIT WORK AND WAIT.

endif.

ENDCASE.

ENDMODULE.

can you plz help me...

0 Kudos

hI JAYANTHI...

as u given the link..then pick field should be in Z table also?

plz give me reply..plz help me out..

0 Kudos

Hi,

That will be easiest way for maintaining it in database. Otherwise, as suggested already you can declare a types with the database structure with this extra field also and then use it in the table control. But everytime, when you do the database operation, you need to move this to another intenral table which has the same database structure and then do the operation(for eg., during deletion).

Former Member
0 Kudos

hi,

In layout u r taken table the control in layout first we need give the table control name in below one option is there W/0COLUM ENABLE That option and give the name WA-LSEL after that u must declare the LSEL in internal table.

MODULE DATA_RETRIVAL OUTPUT.

SELECT MANDT WERKS MATNR LGOLIF LFGJA LFMON LABST

INSME SPEME RETME VMLAB VMINS VMSPE VMRET

LBVLA VMSAL ZRCVDQTY ZISSUEQTY FROM ZMABBSTOCK INTO TABLE LT_STOCK

WHERE WERKS IN WERKS AND

MATNR IN MATNR AND

LGOLIF IN LGOLIF AND

LFGJA IN LFGJA AND

LFMON IN LFMON.

ENDMODULE. " DATA_RETRIVAL OUTPUT

&----


*& Module POPULATE_DATA OUTPUT

&----


  • text

-


MODULE POPULATE_DATA OUTPUT.

MOVE-CORRESPONDING LS_STOCK TO ZMABBSTOCK.

ENDMODULE. " POPULATE_DATA OUTPUT

MODULE USER_COMMAND_0100 INPUT.

CASE OK-CODE.

WHEN 'BACK'.

LEAVE TO SCREEN 0.

WHEN 'EXIT'.

EXIT.

WHEN 'DELETE'.

LOOP AT ZMABBSTOCK INTO ZMABBSTOCK where lsel = 'X'.

DELETE ZMABBSTOCK FROM ZMABBSTOCK.

ENDIF.

ENDLOOP.

thanks,

murali

0 Kudos

HI MURALI..

Thnaks for giving replly

as you said if i given like this

WHEN 'DELETE'.

LOOP AT ZMABBSTOCK INTO ZMABBSTOCK WHERE LSEL = 'X'.

DELETE ZMABBSTOCK FROM ZMABBSTOCK.

ENDIF.

ENDLOOP.

i am getting error as

"VERSION ... ." expected after "ZMABBSTOCK"

can u check this...

Former Member
0 Kudos

Hi,

You written the code in PBO in that u r extracting data and placed into one internal table is LT_STOCK.

after that pai

case ok_code.

WHEN 'DELETE'.

LOOP AT LT_STOCK INTO WA_STOCK WHERE LSEL = 'X'.

DELETE ZMABBSTOCK FROM WA_STOCK.

ENDLOOP.

Other wise create on more internal table(itab) and assign same structure like ZMABBSTOCK then we can assign the all values into MOVE-CORRESPONDING LT_STOCK ITAB.

one more we can add the field LSEL TO ITAB.

types:begin of ty_data.

LSEL TYPE C.

INCLUDE STRUCTURE ZMABBSTOCK.

TYPES:END OF TY_DATA.

DATA:ITAB TYPE STANDARD TABLE OF TY_DATA.

WHEN 'DELETE'.

LOOP AT ITAB INTO WA WHERE LSEL = 'X.'

DELETE ZMABBSTOCK FROM WA.

ENDLOOP.

REGARDS,

MURALII

0 Kudos

Hi murali...

As you said i have declared LSEL in internal table..still it is not working...as of my code is....

ZMABBSTOCK is database table lt_stock is internal table..

TYPES: BEGIN OF TT_STOCK,

mandt type ZMABBSTOCK-mandt,

WERKS TYPE ZMABBSTOCK-WERKS,

MATNR TYPE ZMABBSTOCK-MATNR,

LGOLIF TYPE ZMABBSTOCK-LGOLIF,

LFGJA TYPE ZMABBSTOCK-LFGJA,

LFMON TYPE ZMABBSTOCK-LFMON,

LABST TYPE ZMABBSTOCK-LABST,

INSME TYPE ZMABBSTOCK-INSME,

SPEME TYPE ZMABBSTOCK-SPEME,

RETME TYPE ZMABBSTOCK-RETME,

VMLAB TYPE ZMABBSTOCK-VMLAB,

VMINS TYPE ZMABBSTOCK-VMINS,

VMSPE TYPE ZMABBSTOCK-VMSPE,

VMRET TYPE ZMABBSTOCK-VMRET,

LBVLA TYPE ZMABBSTOCK-LBVLA,

VMSAL TYPE ZMABBSTOCK-VMSAL,

ZRCVDQTY TYPE ZMABBSTOCK-ZRCVDQTY,

ZISSUEQTY TYPE ZMABBSTOCK-ZISSUEQTY,

LSEL TYPE C, END OF TT_STOCK.

DATA: LT_STOCK TYPE TABLE OF TT_STOCK,

LS_STOCK TYPE TT_STOCK.

PROCESS BEFORE OUTPUT.

MODULE DATA_RETRIVAL.

MODULE STATUS_0100.

LOOP AT LT_STOCK into LS_STOCK WITH CONTROL TABCON.

MODULE POPULATE_DATA.

ENDLOOP.

PROCESS AFTER INPUT.

LOOP AT LT_STOCK.

ENDLOOP.

MODULE USER_COMMAND_0100.

MODULE DATA_RETRIVAL OUTPUT.

SELECT MANDT WERKS MATNR LGOLIF LFGJA LFMON LABST

INSME SPEME RETME VMLAB VMINS VMSPE VMRET

LBVLA VMSAL ZRCVDQTY ZISSUEQTY FROM ZMABBSTOCK INTO TABLE LT_STOCK

WHERE WERKS IN WERKS AND

MATNR IN MATNR AND

LGOLIF IN LGOLIF AND

LFGJA IN LFGJA AND

LFMON IN LFMON.

ENDMODULE.

MODULE POPULATE_DATA OUTPUT.

MOVE-CORRESPONDING LS_STOCK TO ZMABBSTOCK.

*MOVE-CORRESPONDING LS_STOCK TO LS_STOCK1.

ENDMODULE.

MODULE USER_COMMAND_0100 INPUT.

CASE OK-CODE.

WHEN 'BACK'.

LEAVE TO SCREEN 0.

WHEN 'EXIT'.

EXIT.

WHEN 'DELETE'.

LOOP AT LT_STOCK INTO LS_STOCK WHERE LSEL = 'X'. .

DELETE ZMABBSTOCK FROM LS_STOCK.

ENDLOOP.

WHEN 'SAVE'.

UPDATE ZMABBStOCK FROM TABLE LT_STOCK.

IF SY-SUBRC EQ 0.

COMMIT WORK AND WAIT.

endif.

ENDCASE.

ENDMODULE.

can you plz help me...

0 Kudos

Hi,

If you add in program, you need to do changes here.

PROCESS AFTER INPUT.

LOOP AT LT_STOCK.

FIELD <itabname>-lsel MODULE check.

ENDLOOP.

MODULE check INPUT.

MODIFY <internaltable) INDEX t_ctrl-current_line transporting lsel.

ENDMODULE. " CHECK INPUT

0 Kudos

Hi jayanthi....

now i did one test program as same in PDF file.still it is not working in this test program

ZTABLE_TEST is database table which is having pick field with char of lengh1..and LT_stock is a internal table of same structure of db...plz check this code...

PROCESS BEFORE OUTPUT.

MODULE DATA_RETRIVAL.

MODULE STATUS_0100.

LOOP AT LT_STOCK into LS_STOCK WITH CONTROL TABCON.

MODULE POPULATE_DATA.

ENDLOOP.

PROCESS AFTER INPUT.

LOOP AT LT_STOCK.

FIELD LT_STOCK-PICK MODULE CHECK.

MODULE DATA_DELETE.

ENDLOOP.

MODULE USER_COMMAND_0100.

report:

&----


*& Report ZTEST_MOD

*&

&----


*&

*&

&----


REPORT ZTEST_MOD.

TABLES: ZTABLE_TEST , SSCRFIELDS.

DATA: OK-CODE LIKE SY-UCOMM.

TYPES: BEGIN OF TT_STOCK,

MANDT TYPE ZTABLE_TEST-MANDT,

MATNR TYPE ZTABLE_TEST-MATNR,

ZDESC12 TYPE ZTABLE_TEST-ZDESC12,

PICK TYPE ZTABLE_TEST-PICK,

END OF TT_STOCK.

*TYPES: BEGIN OF TT_STOCK1,

  • LSEL TYPE C.

  • INCLUDE STRUCTURE ZMABBSTOCK.

*TYPES: END OF TT_STOCK1.

DATA: LT_STOCK TYPE TABLE OF TT_STOCK,

LS_STOCK TYPE TT_STOCK,

LT_STOCK1 TYPE TABLE OF TT_STOCK,

LS_STOCK1 TYPE TT_STOCK.

DATA: LV_LINES TYPE I.

CONTROLS TABCON TYPE TABLEVIEW USING SCREEN 100.

INITIALIZATION.

MOVE 'DISPLAY' TO SSCRFIELDS-FUNCTXT_01.

SELECTION-SCREEN FUNCTION KEY 1 .

selection-screen BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.

SELECT-OPTIONS: MATNR FOR ZTABLE_TEST-MATNR NO INTERVALS NO-EXTENSION.

selection-screen end of BLOCK B1.

AT SELECTION-SCREEN.

IF SSCRFIELDS-UCOMM = 'FC01'.

CALL SCREEN 100.

ENDIF.

&----


*& Module DATA_RETRIVAL OUTPUT

&----


  • text

----


MODULE DATA_RETRIVAL OUTPUT.

SELECT MANDT MATNR ZDESC12 PICK FROM ZTABLE_TEST INTO TABLE LT_STOCK

WHERE MATNR IN MATNR .

DESCRIBE TABLE LT_STOCK LINES LV_LINES.

TABCON-CURRENT_LINE = LV_LINES.

ENDMODULE. " DATA_RETRIVAL OUTPUT

&----


*& Module POPULATE_DATA OUTPUT

&----


  • text

----


MODULE POPULATE_DATA OUTPUT.

MOVE-CORRESPONDING LS_STOCK TO ZTABLE_TEST.

*MOVE-CORRESPONDING LS_STOCK TO LS_STOCK1.

ENDMODULE. " POPULATE_DATA OUTPUT

&----


*& Module STATUS_0100 OUTPUT

&----


  • text

----


MODULE STATUS_0100 OUTPUT.

SET PF-STATUS 'ZSTATUS'.

SET TITLEBAR 'xxx'.

ENDMODULE. " STATUS_0100 OUTPUT

&----


*& Module USER_COMMAND_0100 INPUT

&----


  • text

----


MODULE USER_COMMAND_0100 INPUT.

CASE OK-CODE.

WHEN 'BACK'.

LEAVE TO SCREEN 0.

WHEN 'EXIT'.

EXIT.

WHEN 'SAVE'.

UPDATE ZTABLE_TEST FROM TABLE LT_STOCK.

IF SY-SUBRC EQ 0.

COMMIT WORK AND WAIT.

endif.

ENDCASE.

ENDMODULE. " USER_COMMAND_0100 INPUT

&----


*& Module DATA_DELETE INPUT

&----


  • text

----


MODULE DATA_DELETE INPUT.

CASE OK-CODE.

WHEN 'DELETE'.

DELETE LT_STOCK WHERE PICK = 'X'.

if sy-SUBRC eq 0.

DELETE ZTABLE_TEST from table LT_STOCK.

endif.

ENDCASE.

ENDMODULE. " DATA_DELETE INPUT

can you plz check this..

0 Kudos

Hi s.praveena ,

always Remember when you are deleting records in table control using selection .

IN PBO when you are selecting data , it should be executed only when internal table is initial .

i.e you have to addthis code before selecting DAta

MODULE DATA_RETRIVAL OUTPUT.
 
    if lt_stock[] is  initial  .

SELECT MANDT WERKS MATNR LGOLIF LFGJA LFMON LABST
INSME SPEME RETME VMLAB VMINS VMSPE VMRET
LBVLA VMSAL ZRCVDQTY ZISSUEQTY FROM ZMABBSTOCK INTO TABLE LT_STOCK
WHERE WERKS IN WERKS AND
MATNR IN MATNR AND
LGOLIF IN LGOLIF AND
LFGJA IN LFGJA AND
LFMON IN LFMON.

endif .

ENDMODULE.

regards

Deepak.

Edited by: Deepak Dhamat on Dec 1, 2010 10:22 AM

0 Kudos

Hi,

You need to add the subroutine for check.

MODULE check INPUT.

MODIFY <internaltable) INDEX t_ctrl-current_line transporting lsel.

ENDMODULE. " CHECK INPUT

Then handle the Delete in usercommand. In debugging mode in usercommand, you can observe the difference in the table.

0 Kudos

hI DEEPAK....

Thanks a lot for giving reply...

now my report is working bit...

but problem is if i select 1 st record and 3rd record it is deleting 1st record and 4th record..coz..after deleting 1st record the table moves up..so it is condsidering 4th record as 3rd record...how can i solve this problem...

This is the code i ahve writen..

MODULE DATA_DELETE INPUT.

CASE OK-CODE.

WHEN 'DELETE'.

IF LSEL = 'X'.

DELETE LT_STOCK INDEX TABCON-CURRENT_LINE.

if sy-SUBRC eq 0.

DELETE ZMABBSTOCK FROM ZMABBSTOCK. ( Here ZMABBSTOCK is db Table...this is also not working i mean record is not deleted from database) ENDIF.

endif.

Could you Please help me out..

former_member210642
Participant
0 Kudos

Hi,

After delete update the database then try it.

thanks,

Balu.

0 Kudos

Hi

thanks q for giving reply...

first of all record is not deleted from table control...

can you plz help me?