11-30-2010 9:52 AM
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
11-30-2010 10:09 AM
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
11-30-2010 10:15 AM
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...
11-30-2010 10:22 AM
Hi,
Try DELETE ZMABBSTOCK WHERE LSEL = 'X'.
I hope you have made in table control properties w/selcolumn as ZMABBSTOCK-LSEL.
11-30-2010 10:23 AM
Hi
WHEN 'DELETE'.
DELETE ZMABBSTOCK where LSEL = 'X'.
Regards,
Madhukar Shetty
11-30-2010 10:23 AM
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
11-30-2010 10:26 AM
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..
11-30-2010 10:29 AM
HI,
What is this ZMABBSTOCK is this a internal table ? And have you defined the LSEL field in the ZMABBSTOCK internal table ?
11-30-2010 10:31 AM
Hi,
Check this link. I am explaining step by step how to do the database manipultions using table control.
11-30-2010 10:32 AM
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..
11-30-2010 10:36 AM
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
11-30-2010 10:41 AM
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
12-01-2010 5:03 AM
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...
12-01-2010 5:58 AM
hI JAYANTHI...
as u given the link..then pick field should be in Z table also?
plz give me reply..plz help me out..
12-01-2010 6:08 AM
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).
11-30-2010 10:25 AM
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
11-30-2010 10:29 AM
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...
11-30-2010 10:46 AM
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
12-01-2010 3:14 AM
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...
12-01-2010 6:17 AM
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
12-01-2010 8:43 AM
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..
12-01-2010 9:22 AM
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
12-01-2010 9:34 AM
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.
12-01-2010 10:08 AM
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..
11-30-2010 10:56 AM
12-01-2010 3:18 AM
Hi
thanks q for giving reply...
first of all record is not deleted from table control...
can you plz help me?