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

2020-09-05 07:32发布

         点击此处--->   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。

非常感谢您的帮助。

         点击此处--->   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条回答
当学会了学习
1楼 · 2020-09-05 08:00.采纳回答

亲爱的Zeynep,

如果需要特定于一个参数的条目。 您可以不使用循环而只用一个语句就可以做到这一点。

在日期NE p_date处删除itab。

我希望这能解决您的问题。

感谢和问候,

Arpan Shukla

打个大熊猫
2楼-- · 2020-09-05 08:14
 *&------------------------------------------  --------------------------- *
 *&报告ZWELT
 *&
 *&------------------------------------------------  --------------------- *
 *&
 *&
 *&------------------------------------------------  --------------------- *

 报告zwelt。


  参数:p_date TYPE sy-datum默认值'20181002'。

  类型开始于it_tabline。
    TYPES:ID TYPE I,
           名称(10)TYPE C,
           日期TYPE数据。
    在it_tabline结尾的类型。
  数据:it_tabline的it_tab类型表。
  数据:lr_tab类型为it_tabline。

  字段符号类似于it_tab的行。

  lr_tab-id = 1。
  lr_tab-name ='测试'。
  lr_tab-date ='20181002'。
  将lr_tab附加到it_tab。

  lr_tab-id = 1。
  lr_tab-name ='Test1'。
  lr_tab-date ='20181001'。
  将lr_tab附加到it_tab。

  lr_tab-id = 2。
  lr_tab-name ='Test3'。
  lr_tab-date ='20180929'。
  将lr_tab附加到it_tab。

  读取表it_​​tab并使用键date = p_date进入lr_tab。

  检查sy-subrc EQ 0。

  在it_tab ASSIGNING 上环回,其中id EQ lr_tab-id。
    写:/ -id,
             -名称,
             -日期。
  ENDLOOP。

,或者如果您要删除具有相同ID的行:请放置而不是循环。 endloop。:

删除it_tab的WHERE id EQ lr_tab-id。

此致

Michael

渐行渐远_HoldOn
3楼-- · 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()。
 

这是报告的输出:

问候
斯蒂芬

一周热门 更多>