根据实际表检查内部表中是否存在数据

2020-08-23 03:32发布

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

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


嗨。 我是ABAP的新手,如果我使用的术语不正确或提出了一个非常简单的问题,请原谅。 我正在开发一个程序,该程序可以从电子表格上载数据并将其插入表格中。 我的工作原理很不错,但是现在我试图在将记录写入表之前进行一些检查。 例如,首先,我将电子表格中的所有记录放入一个内部表中。 然后,我想检查两个字段,以查看表MARC中是否存在植物和物料的组合。 因此,我将内部表循环到工作区中,我想在where子句中使用工作区中的字段。 那可能吗? 如果可以,我该怎么做? 我尝试使用列号(col3和col2),但是当我运行语法检查时,它不是那样的。

谢谢

乔恩

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

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


嗨。 我是ABAP的新手,如果我使用的术语不正确或提出了一个非常简单的问题,请原谅。 我正在开发一个程序,该程序可以从电子表格上载数据并将其插入表格中。 我的工作原理很不错,但是现在我试图在将记录写入表之前进行一些检查。 例如,首先,我将电子表格中的所有记录放入一个内部表中。 然后,我想检查两个字段,以查看表MARC中是否存在植物和物料的组合。 因此,我将内部表循环到工作区中,我想在where子句中使用工作区中的字段。 那可能吗? 如果可以,我该怎么做? 我尝试使用列号(col3和col2),但是当我运行语法检查时,它不是那样的。

谢谢

乔恩

付费偷看设置
发送
7条回答
能不能别闹
1楼 · 2020-08-23 04:12.采纳回答

好的,是的,这是一个简单的问题,老实说,您在不先掌握内部表格的情况下就能够读取电子表格,对此我感到非常惊讶。

无论如何...由于您询问的是MARC表,因此我假设您使用的是不带HANA的ECC 6.0系统。 如果您使用的是HANA,请忽略并检查此博客以获取更好的建议。

不建议遍历内部表条目并在循环内从数据库中选择数据。 在这种情况下,我将使用可怕的SELECT ... FOR ALL ENTESES,就像Ravi试图建议的那样(尽管有点笨拙)。 确保阅读该命令的帮助(F1键),并事先检查内部表是否为空。

使用SELECT ... INTO TABLE ...,结果将在内部 表。 我建议为其使用HASHED表类型,并使用与MARC主键相同的键(此博客以了解其他 此任务的选项。

如果您使用的是ABAP 7.4及更高版本,则可以利用内联声明,否则,您需要定义一些要进行环回的内容。 文档中有可用的示例。 我建议您按照注释中的建议阅读ABAPDOCU的整个内部表部分,因为它非常重要。

我是小鹏鹏啊
2楼-- · 2020-08-23 04:02

请分享您的代码(直接将其添加到您的问题中,而不是 注释,而不是答案,请使用CODE按钮设置代码格式。)

何必丶何苦呢
3楼-- · 2020-08-23 04:00

您好 Jon Morozowski

我希望您只对电子表格中的有效条目感兴趣,要检查此有效性,您正在考虑如果条目存在于MARC表中,那么您可以决定该条目 是有效的。

对于这种情况,首先,对于我们而言,研究您的代码以提出任何有效的解决方案非常重要。 请使用"代码"按钮粘贴代码,以便我们轻松理解。

现在进入解决方案部分,我将简要概述如何满足您的要求。 但是,通过您的代码,我们可以帮助您确定代码中的错误以及克服该错误的步骤。 请注意,以下步骤对于初学者来说是非常基本的,但是使用现代语法可以进一步优化代码。

1)考虑您拥有内部表1,例如INT1,该表包含电子表格中的所有字段以及物料和工厂。

2)不知道您拥有哪些数据类型 如果将其分配给INT1中的这些字段(如果为字符串),则将数据传输到另一个具有正确数据类型的内部表中。 例如,材料的MATNR和工厂的WERKS。

3)现在,您的内部表INT2具有所有具有正确数据类型的条目,将这些值传递给临时表,并为所有表在MARC表上写入选择查询 临时表中的条目,然后将值提取到另一个内部表INT3中。 在申请所有条目之前,请确保在临时表上完成以下两个先决条件:

a)检查该表是否具有条目,ABAP中使用的键为" NOT INITIAL"

b)按MATNR和WERKS对INT2进行排序,并从INT2比较MATNR WERKS中删除相邻的重复项。

4)现在您有两个表,INT2具有来自电子表格的所有数据,而INT3具有基于INT2中的数据的MARC表中的所有有效条目。

5)现在,使用适当的Read语句 在INT3上,对于INT2中的数据,您可以找到该条目为有效(SY-SUBRC EQ 0)或无效(SY-SUBRC NE 0)。 确保使用MATNR和WERKS对INT3表进行排序,并在read语句中使用二进制搜索。

希望它会有所帮助! 如有需要,请告知我们进一步澄清!

致谢!

bbpeas
4楼-- · 2020-08-23 03:57

事务ABAPDOCU可以帮助您了解如何访问和查询内部表。

执行事务ABAPDOCU,然后使用以下导航:

ABAP-参考

->处理内部数据

->内部表

->处理内部表的语句

->在itab上环绕

当然,整个内部表主题也将提供很多信息。

交易ABAPDOCU是新手和有经验的ABAP者的宝贵资源,我强烈建议您熟悉使用它的所有不同方式。

Nan4612
5楼-- · 2020-08-23 03:45

使用以下代码。

从Marc选择matnr werks到itab1

  对于itab_from_spreadsheet中的所有条目

 其中matnr eq itab_from_spreadsheet-matnr

 和Werks eq itab_from_spreadsheet-werks。

 循环到itab_from_spreadsheet。

 使用键matnr eq itab_from_spreadsheet-matnr读取表itab
 werks eq itab_from_spreadsheet-werks不传送任何字段。

 如果sy-subrc eq 0。

//将行从itab_from_spreadsheet移动到其他内部表

 万一。

 结束循环。
哎,真难
6楼-- · 2020-08-23 03:55

Jelena,

感谢您的详细答复,对不起您的答复!

此致

Jon

Baoming ROSE
7楼-- · 2020-08-23 04:05

Jelena Perfiljeva 谢谢你 指出并提供更准确的解决方案。 SAP总是有新的东西要学习。

美好的一天!

一周热门 更多>