删除具有条件和相同ID的内部表

2020-09-05 07:32发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中) 专家您好, ...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家您好,

我有一个我无法解决的问题,希望您能帮助我。

这是一个内部表:

ID名称Datefrom

1次测试02.10.2018

1 Test1 2018年10月1日

2 Test3 2018年9月29日

具有相同ID的行属于同一列。 我有一个报告,您可以在其中选择日期。 例如,如果您选择日期" 02.10.2018"。 结果应显示具有相同id的两行。 这是因为具有相同ID的行中至少有一个满足条件。

例如,如果我在参数字段中输入" 02.10.2018",我希望结果显示在下面的示例中:

ID名称Datefrom

1次测试02.10.2018

1 Test1 2018年10月1日

这是我到目前为止尝试过的,但没有得到任何结果。

FIELD-SYMBOLS 喜欢itab。 循环在itab分配
如果 date ENDIF删除表itab。
ENDLOOP。

非常感谢您的帮助。

3条回答
渐行渐远_HoldOn
2020-09-05 08:17

亲爱的 Zeynep,

即使您的请求已经过时,也许我的解决方案(仅适用于NW7.40PL08及更高版本)将来也会对您有所帮助。

报告zstkoes_internal_table_new。


 类型:
   开始于gtys_data,
     ID TYPE I,
     名称TYPE名称1,
     日期TYPE d,
   END OF gtys_data,
   带默认键的gtys_data的gtyt_data类型表。


 参数:pa_date TYPE d默认值'20181002'。


 DATA(gt_data)= VALUE gtyt_data(
                   (id = 1名称='Test'日期='20181002')
                   (id = 1名称='Test1'日期='20181002')
                   (id = 1名称='Test2'日期='20181001')
                   (id = 2 name ='Test3'date ='20180929'))。


 cl_demo_output => begin_section(|原始数据|)。
 cl_demo_output => write_data(gt_data)。


 DATA(gt_data_nested_loop)= VALUE gtyt_data(FOR ls_data输入gt_data
                                                 WHERE(date EQ pa_date)"具有有效参数日期的第一个循环
                                               FOR ls_data_filtered IN gt_data
                                                 WHERE(id EQ ls_data-id)"所有ID的第二个循环
                                                   (ls_data_filtered))。 符合两种条件的条目


 cl_demo_output => begin_section(|嵌套循环|)。
 cl_demo_output => write(|请谨慎使用此逻辑。{
                         cl_abap_char_utilities =>换行符}如果一个ID的日期条件可多次匹配,它会导致多个条目。{
                         cl_abap_char_utilities =>换行符}如果日期是唯一的,则逻辑工作正常。  )。
 cl_demo_output => write_data(gt_data_nested_loop)。


 DATA(gt_data_grouped_loop)= VALUE gtyt_data(用于gt_data中ls_data的组ID
                                                 WHERE(date EQ pa_date)"第一个循环,获取有效参数日期的id
                                                 GROUP BY ls_data-id
                                               FOR ls_data_filtered IN gt_data
                                                 WHERE(id EQ ids)"所有ID的第二个循环
                                                   (ls_data_filtered))。 符合两种条件的条目
 cl_demo_output => begin_section(| Loop分组为|)。
 cl_demo_output => write(|此逻辑正常运行。|)。
 cl_demo_output => write_data(gt_data_grouped_loop)。




 cl_demo_output => display()。
 

这是报告的输出:

问候
斯蒂芬

一周热门 更多>