2007 Feb 22 12:09 PM
Hi ALL,
I have a requirement to delete the records from the output where we selected the record from the output.
here is my code, please help me out in this case,
the problem is how to delete the record if we check the check box from list output
here is my code.
&----
*& Report YTEST_VARUN
*&
&----
*&
*&
&----
REPORT YTEST_VARUN.
TABLES: KSSK,MARA.
TYPES: BEGIN OF T_KSSK.
INCLUDE STRUCTURE KSSK.
TYPES: END OF T_KSSK.
TYPES: BEGIN OF T_MARA.
INCLUDE STRUCTURE MARA.
TYPES: END OF T_MARA.
TYPES:BEGIN OF T_KSSK1,
FIELD(1).
INCLUDE STRUCTURE KSSK.
TYPES:END OF T_KSSK1.
DATA: WA_MARA TYPE T_MARA.
DATA: WA_KSSK TYPE T_KSSK.
DATA: WA_KSSK1 TYPE T_KSSK1.
DATA: I_KSSK TYPE TABLE OF T_KSSK.
DATA: I_KSSK1 TYPE TABLE OF T_KSSK1.
DATA: I_MARA TYPE TABLE OF T_MARA.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS: Material for mara-matnr.
SELECTION-SCREEN END OF BLOCK B1.
START-OF-SELECTION.
SELECT * FROM KSSK INTO TABLE I_KSSK WHERE OBJEK IN MATERIAL.
IF SY-SUBRC EQ 0.
SORT I_KSSK BY OBJEK.
ENDIF.
SELECT * FROM MARA INTO TABLE I_MARA WHERE MATNR IN MATERIAL.
IF SY-SUBRC EQ 0.
SORT I_MARA BY MATNR.
ENDIF.
LOOP AT I_KSSK INTO WA_KSSK.
CLEAR WA_MARA.
READ TABLE I_MARA INTO WA_MARA WITH KEY MATNR = WA_KSSK-OBJEK.
IF SY-SUBRC NE 0.
MOVE-CORRESPONDING WA_KSSK TO WA_KSSK1.
APPEND WA_KSSK1 TO I_KSSK1.
ENDIF.
ENDLOOP.
IF I_KSSK1 IS INITIAL.
MESSAGE I000(0) WITH 'NO ORPHAN MATERIAL IS AVAILABLE'.
ELSE.
LOOP AT I_KSSK1 INTO WA_KSSK1.
WRITE:/ WA_KSSK1-FIELD AS CHECKBOX,
WA_KSSK1-OBJEK,
WA_KSSK1-MAFID,
WA_KSSK1-KLART,
WA_KSSK1-CLINT,
WA_KSSK1-ADZHL,
WA_KSSK1-ZAEHL,
WA_KSSK1-STATU,
WA_KSSK1-STDCL,
WA_KSSK1-REKRI,
WA_KSSK1-AENNR,
WA_KSSK1-DATUV,
WA_KSSK1-LKENZ.
MODIFY I_KSSK1 FROM WA_KSSK1 TRANSPORTING FIELD.
CLEAR WA_KSSK1.
ENDLOOP.
SET PF-STATUS 'ZTEST_VARUN'.
ENDIF.
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'DELETE'.
LOOP AT I_KSSK1 INTO WA_KSSK1.
ENDLOOP.
DELETE I_KSSK1 WHERE FIELD NE 'X'.
ENDCASE.
please help ma out.
Hi,
what Function code u ahve specified in the screen for DELETE have u used the exact name in the case statement.
2007 Feb 22 12:13 PM
You have to read the lines after the user inputs the check box lik ethis.
do.
read line index sy-index.
if sy-subrc <> 0.
exit.
else.
*MOve the contents into the internal table and delete the marked ones.
endif.
enddo.
2007 Feb 22 12:13 PM
Have a look at the help for the command
READ REPORT
There are some good examples.
2007 Feb 22 12:14 PM
change to this and try
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'DELETE'.
LOOP AT I_KSSK1 INTO WA_KSSK1 where field ne 'X'..
DELETE table I_KSSK1 from wa_kssk1.
ENDLOOP.Message was edited by:
Chandrasekhar Jagarlamudi
2007 Feb 22 12:28 PM
the same code i wrote, its not working please help me out other solution
2007 Feb 22 12:31 PM
Hi,
what Function code u ahve specified in the screen for DELETE have u used the exact name in the case statement.
2007 Feb 22 12:34 PM
its not the problem with the function code,
the check box field is not filling with the value "X'
2007 Feb 22 12:16 PM
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'DELETE'.
LOOP AT I_KSSK1 INTO WA_KSSK1 WHERE field = 'X'.
DELETE TABLE I_KSSK1 FROM wa_kss1.
ENDLOOP.
ENDCASE.
2007 Feb 22 12:16 PM
Hi Sridhar,
Please let me know if you can use a check-box to select the entry to be deleted and then on click of a button say 'DELETE' in Application tool bar this will be deleted. If this is the case I'll send the code neede for this functionality.
Regards,
Paul.
2007 Feb 22 12:19 PM
Hi Vijayananad,
yes Exactly this was my requirement, please send me the code, not ALV report
2007 Feb 22 12:35 PM
2007 Feb 22 12:58 PM
AT USER-COMMAND.
CASE sy-ucomm.
WHEN 'SAVE'.
LOOP AT i_output INTO wa_output.
clear wa_output.
READ LINE SY-CUROW FIELD VALUE wa_output-cb.
IF sy-subrc <> 0.
EXIT.
ELSEIF wa_output-cb = 'X'.
MODIFY i_output FROM wa_output TRANSPORTING cb..
ENDIF.
ENDLOOP.
DELETE i_output WHERE cb = 'X'.
ENDCASE.This will solve ur query, reward points if this helps.
Message was edited by:
Judith Jessie Selvi
2007 Feb 22 1:30 PM
2007 Feb 22 2:06 PM
Hi,
I got the program
TRY <b>DEMO_LIST_READ_LINE</b>
Code as belwo:
lines = sy-linno - 1.
SET PF-STATUS 'ZSTATUS'.
AT USER-COMMAND.
CASE sy-ucomm.
WHEN 'SAVE'.
wa_output-cb = space.
SET PF-STATUS 'ZSTATUS' EXCLUDING 'SAVE'.
DO lines TIMES.
READ LINE sy-index FIELD VALUE wa_output-cb.
IF wa_output-cb = 'X'.
MODIFY i_output FROM wa_output INDEX sy-tabix TRANSPORTING cb.
ENDIF.
ENDDO.
DELETE i_output WHERE cb = 'X'.
ENDCASE.Reward if this helps.
2007 Feb 22 12:17 PM
Hello,
DO like this.
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN 'DELETE'.
DELETE I_KSSK1 where check = 'X'.
ENDCASE.Vasanth
2007 Feb 22 12:42 PM
Do something like this.
AT USER-COMMAND.
CASE SY-UCOMM.
WHEN ?????
DO.
clear WA_KSSK1-FIELD.
READ LINE sy-index FIELD WA_KSSK1-FIELD.
IF sy-subrc <> 0.
EXIT.
ELSEIF WA_KSSK1-FIELD = 'X'.
..............
ENDIF.
ENDDO.
ENDCASE.
2007 Feb 22 1:04 PM
2007 Feb 22 2:00 PM
Hello,
Use this code directly in your report.
TYPES: BEGIN OF ty_kna1,
selected TYPE c,
record TYPE i,
kunnr TYPE kunnr,
land1 TYPE land1_gp,
name1 TYPE name1_gp,
name2 TYPE name2_gp,
END OF ty_kna1.
DATA: gt_kna1 TYPE TABLE OF ty_kna1 WITH HEADER LINE,
gv_count TYPE i,
w_linepos TYPE i,
w_subrc LIKE sy-subrc,
w_tabix LIKE sy-tabix,
w_record LIKE sy-tabix,
w_selected(1) TYPE c.
SELECT-OPTIONS s_kunnr FOR gt_kna1-kunnr.
SELECT kunnr land1 name1 name2
FROM kna1
INTO CORRESPONDING FIELDS OF TABLE gt_kna1
WHERE kunnr IN s_kunnr.
LOOP AT gt_kna1.
gt_kna1-selected = 'X'.
gt_kna1-record = sy-tabix.
ENDLOOP.
PERFORM header.
LOOP AT gt_kna1.
FORMAT COLOR OFF.
WRITE:/ '|' UNDER text-l00,
gt_kna1-selected AS CHECKBOX UNDER text-cb1, '|' UNDER text-l00,
gt_kna1-kunnr UNDER text-h00, '|' UNDER text-l01,
gt_kna1-land1 UNDER text-h01, '|' UNDER text-l02,
gt_kna1-name1 UNDER text-h02, '|' UNDER text-l03,
gt_kna1-name2 UNDER text-h03, '|' UNDER text-l04,
'|' UNDER text-l05.
ENDLOOP.
ULINE.
AT USER-COMMAND.
CLEAR gv_count.
describe table gt_kna1 lines gv_count.
IF gv_count = 0.
EXIT.
ENDIF.
CASE sy-ucomm.
WHEN 'DELETE'.
PERFORM read_report.
PERFORM delete_data.
endcase.
&----
*& Form header
&----
text
----
--> p1 text
<-- p2 text
----
FORM header .
WRITE:/ text-l01, text-cb1, "for check-box.
text-l00, text-h00, " For Kunnr
text-l02, text-h01, " for Land1
text-l03, text-h02, " for Name1
text-l04, text-h03, " for Name2
text-l05. "l01 - l05 = '|'.
ENDFORM. " header
&----
*& Form read_report
&----
text
----
--> p1 text
<-- p2 text
----
FORM read_report .
w_linepos = 1.
*
CHECK 1 = 1.
w_subrc = 0.
*
WHILE w_subrc = 0.
*
w_tabix = sy-tabix.
*
CLEAR: w_record, w_selected.
*
READ LINE w_linepos FIELD VALUE gt_kna1-record INTO w_record.
w_subrc = sy-subrc.
IF w_subrc NE 0.
EXIT.
ENDIF.
*
IF NOT w_record IS INITIAL.
*
READ LINE w_linepos FIELD VALUE gt_kna1-selected
INTO w_selected.
READ TABLE gt_kna1 INDEX w_record.
gt_kna1-selected = w_selected.
*
IF sy-tabix > 0.
MODIFY gt_kna1 INDEX sy-tabix.
ENDIF.
ENDIF.
*
w_linepos = w_linepos + 1.
ENDWHILE.
ENDFORM. " read_report
&----
*& Form delete_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM delete_data .
LOOP AT gt_kna1 WHERE selected = 'X'.
w_tabix = sy-tabix.
*
Delete the record
*
*delete from kna1
*where kunnr = gt_kna1-kunnr.
endloop.
ENDFORM. " delete_data
Use your primary key combunation and delete the file from database.
The above code will display the report with checkboxes,
on selection of the checkboxes and selecting delete button from application tool bar it deletes only the selected entry from database.
You have to create a Button in Application tool bar with FCode - 'DELETE'.
Hope everything's fine.
2007 Feb 22 2:23 PM
Use.......
Case Ok-CODE.
When 'DELETE'.
delete ITAB where FIELD EQ 'X'.
endcase.
2007 Feb 22 2:32 PM
Sreedhar,
There is a small chage. You need to update the selected and record fields of table GT_KNA1 after selecting entries from KNA1 in this manner,
SELECT-OPTIONS s_kunnr FOR gt_kna1-kunnr.
SELECT kunnr land1 name1 name2
FROM kna1
INTO CORRESPONDING FIELDS OF TABLE gt_kna1
WHERE kunnr IN s_kunnr.
LOOP AT gt_kna1.
gt_kna1-selected = 'X'.
gt_kna1-record = sy-tabix.
modify gt_kna1 index sy-tabix. "add this extra statement
ENDLOOP.
With this all entries will be displayed checked in output.
2007 Feb 23 6:37 AM
Have u solved ur problem,
refer this code if u want furtehr help.
END-OF-SELECTION.
lines = sy-linno - 1.
SET PF-STATUS 'ZSTATUS'.
AT USER-COMMAND.
wa_output-cb = space.
SET PF-STATUS 'ZSTATUS' EXCLUDING 'SAVE'.
DO lines TIMES.
READ LINE sy-index FIELD VALUE wa_output-cb.
IF wa_output-cb = 'X'.
MODIFY i_output FROM wa_output INDEX sy-tabix TRANSPORTING cb.
ENDIF.
ENDDO.
CASE sy-ucomm.
WHEN 'SAVE'.
DELETE i_output WHERE cb = 'X'.
ULINE.
FORMAT INTENSIFIED OFF.
FORMAT COLOR COL_HEADING.
WRITE:/001 'CB' ,
003 'Material No',
015 'Mat type',
024 'Mat group'.
FORMAT COLOR OFF.
FORMAT INTENSIFIED ON.
ULINE.
IF NOT i_output[] IS INITIAL.
LOOP AT i_output INTO wa_output.
WRITE:/001 wa_output-cb AS checkbox,
003 wa_output-matnr,
015 wa_output-mtart,
024 wa_output-matkl.
CLEAR wa_output.
ENDLOOP.
ENDIF.
WHEN 'BACK'.
LEAVE SCREEN.
ENDCASE.revert back if u have any clarifications.
Reward and close the thraed.
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |