2018 Oct 02 10:48 AM
Hello experts,
I have a problem I can not solve, and hope you can help me.
Here is an internal table:
ID name Datefrom
1 Test 02.10.2018
1 Test1 01.10.2018
2 Test3 29.09.2018
The rows with the same ID belong together. I have a report where you can select the dates. If you choose for example the date „02.10.2018“. The result should show up both rows with the same id . This is because at least one of the rows with the same id meets the condition.
For example if I put „02.10.2018“ in the parameter field, I want the result to show to this example below:
ID name Datefrom
1 Test 02.10.2018
1 Test1 01.10.2018
Here is what I tried so far and I don't get any results.
FIELD-SYMBOLS <wa_itab> LIKE LINE OF itab. LOOP AT itab ASSIGNING <wa_itab>.
IF <wa_itab>date < p_date.
DELETE TABLE itab FROM <wa_itab>ENDIF.
ENDLOOP.
I am very thankful for any help.
2018 Oct 02 12:00 PM
Dear Zeynep,
If you need entries specific to one parameter. You can do it without using loop and simply with one statement.
DELETE itab WHERE date NE p_date.
I hope this will resolve your issue.
Thanks and Regards,
Arpan Shukla
Dear Zeynep,
If you need entries specific to one parameter. You can do it without using loop and simply with one statement.
DELETE itab WHERE date NE p_date.
I hope this will resolve your issue.
Thanks and Regards,
Arpan Shukla
2018 Oct 02 12:00 PM
Dear Zeynep,
If you need entries specific to one parameter. You can do it without using loop and simply with one statement.
DELETE itab WHERE date NE p_date.
I hope this will resolve your issue.
Thanks and Regards,
Arpan Shukla
2018 Oct 02 12:49 PM
*&---------------------------------------------------------------------*
*& Report ZWELT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zwelt.
PARAMETERS: p_date TYPE sy-datum DEFAULT '20181002'.
TYPES BEGIN OF it_tabline.
TYPES: id TYPE i,
name(10) TYPE c,
date TYPE sy-datum.
TYPES END OF it_tabline.
DATA: it_tab TYPE TABLE OF it_tabline.
DATA: lr_tab TYPE it_tabline.
FIELD-SYMBOLS <wa_itab> LIKE LINE OF it_tab.
lr_tab-id = 1.
lr_tab-name = 'Test'.
lr_tab-date = '20181002'.
APPEND lr_tab TO it_tab.
lr_tab-id = 1.
lr_tab-name = 'Test1'.
lr_tab-date = '20181001'.
APPEND lr_tab TO it_tab.
lr_tab-id = 2.
lr_tab-name = 'Test3'.
lr_tab-date = '20180929'.
APPEND lr_tab TO it_tab.
READ TABLE it_tab INTO lr_tab WITH KEY date = p_date.
CHECK sy-subrc EQ 0.
LOOP AT it_tab ASSIGNING <wa_itab> WHERE id EQ lr_tab-id.
WRITE: / <wa_itab>-id,
<wa_itab>-name,
<wa_itab>-date.
ENDLOOP.or if you want to delete the lines with the same id: put instead of the loop. endloop.:
DELETE it_tab WHERE id EQ lr_tab-id.Regards,
Michael
2019 Jul 23 11:46 AM
Dear Zeynep,
even if your request is already old, maybe my solution (works only with NW7.40PL08 and higher) helps you in future.
REPORT zstkoes_internal_table_new.
TYPES:
BEGIN OF gtys_data,
id TYPE i,
name TYPE name1,
date TYPE d,
END OF gtys_data,
gtyt_data TYPE TABLE OF gtys_data WITH DEFAULT KEY.
PARAMETERS: pa_date TYPE d DEFAULT '20181002'.
DATA(gt_data) = VALUE gtyt_data(
( id = 1 name = 'Test' date = '20181002' )
( id = 1 name = 'Test1' date = '20181002' )
( id = 1 name = 'Test2' date = '20181001' )
( id = 2 name = 'Test3' date = '20180929' ) ).
cl_demo_output=>begin_section( |Original Data| ).
cl_demo_output=>write_data( gt_data ).
DATA(gt_data_nested_loop) = VALUE gtyt_data( FOR ls_data IN gt_data
WHERE ( date EQ pa_date ) " First loop with valid parameter-date
FOR ls_data_filtered IN gt_data
WHERE ( id EQ ls_data-id ) " Second loop for all ids
( ls_data_filtered ) ). " Entries which fits both condition
cl_demo_output=>begin_section( |Nested Loop| ).
cl_demo_output=>write( |Be careful with this logic.{
cl_abap_char_utilities=>newline }It can cause multiple entries, if date condition one id fits multiple times.{
cl_abap_char_utilities=>newline }If date is unique then logic is working fine.| ).
cl_demo_output=>write_data( gt_data_nested_loop ).
DATA(gt_data_grouped_loop) = VALUE gtyt_data( FOR GROUPS ids OF ls_data IN gt_data
WHERE ( date EQ pa_date ) " First loop to get ids of valid parameter-date
GROUP BY ls_data-id
FOR ls_data_filtered IN gt_data
WHERE ( id EQ ids ) " Second loop for all ids
( ls_data_filtered ) ). " Entries which fits both condition
cl_demo_output=>begin_section( |Loop Grouped by| ).
cl_demo_output=>write( |This logic is working perfect.| ).
cl_demo_output=>write_data( gt_data_grouped_loop ).
cl_demo_output=>display( ).
And here is the output of the report:

Greetings
Stephan
| User | Count |
|---|---|
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |