这个简单的代码有什么问题?

2020-09-06 22:21发布

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

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


大家好,

任何人都可以告诉我下面这段代码有什么问题吗?

报告ztest1。
 types:从t1开始,
 fld1类型N,
 fld2类型C,
 pfld3类型N,
 t1结束。
 
类型:t2的开头,
 fld3类型N,
 t2结束。
数据:tab1 TYPE t1,
 wa_tab1 TYPE t1。
 
数据:tab2类型t2,
 wa_tab2输入t2。


实际上,我想声明一个带有字段的结构't1'-fld1为'Numeric'类型,fld2为'char'类型,等等。

然后,我想创建一个内部表'tab2',该表的行类型与't1'相同,即具有与fld1,fld2和pfld3等类型相同的字段。

同样,对于第二个int。 表tab2基于结构类型't2'。

但是我遇到以下语法错误-'未知列名" FLD1"字段列表'

我要去哪里错了?

任何帮助将不胜感激。

感谢与问候

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

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


大家好,

任何人都可以告诉我下面这段代码有什么问题吗?

报告ztest1。
 types:从t1开始,
 fld1类型N,
 fld2类型C,
 pfld3类型N,
 t1结束。
 
类型:t2的开头,
 fld3类型N,
 t2结束。
数据:tab1 TYPE t1,
 wa_tab1 TYPE t1。
 
数据:tab2类型t2,
 wa_tab2输入t2。


实际上,我想声明一个带有字段的结构't1'-fld1为'Numeric'类型,fld2为'char'类型,等等。

然后,我想创建一个内部表'tab2',该表的行类型与't1'相同,即具有与fld1,fld2和pfld3等类型相同的字段。

同样,对于第二个int。 表tab2基于结构类型't2'。

但是我遇到以下语法错误-'未知列名" FLD1"字段列表'

我要去哪里错了?

任何帮助将不胜感激。

感谢与问候

付费偷看设置
发送
12条回答
小c菟菟
1楼-- · 2020-09-06 22:53

除了可怕的命名选择,我没有发现任何错误。 我将您的代码复制粘贴到ABAP 7.31系统中,并通过了语法检查。 您在哪一行出现错误? 我怀疑您没有与我们共享所有代码...

尝试了解代码的作用。 您确实声明了结构t1,但是没有表声明。 内部表使用TYPE <表的种类> TABLE OF声明。

有关您的版本(ABAPDOCU事务或ABAP编辑器中的F1),请参阅ABAP文档中的关键字TYPE。

P.S。 附带说明-不过请认真对待,养成给变量提供描述性名称的习惯,并删除诸如wa_之类的前缀。 这是否是您的第一个程序并不重要。 这样的名字永远都不行。

黑丝骑士
2楼-- · 2020-09-06 22:46

让我安排 Dip Choudhury 通过将实际代码(根据他的评论)放置在问题附近来解决问题:

 REPORT ZTEST1。
 类型:str1的开头,
          fld1 TYPE N,
          fld2 TYPE C,
          fld3 TYPE N,
        str1的结尾,
        str2的开头,
          fld3 TYPE N,
        str2的结尾。
    
 数据:tab1的str1类型表,
        wa_tab1 TYPE str1,
        tab2 str2的类型表,
        wa_tab2类型str2。

 从tab1处选择fld1 fld2,而fld3 = pfld3。
   写:/1 tab1-fld1,tab1-fld2。  " <===语法错误1和2
 ENDSELECT。

语法错误:

类型" TAB1"是没有标题行的表,因此没有
 组件称为" FLD1"。

 类型" TAB1"是没有标题行的表,因此没有
 
吹牛啤
3楼-- · 2020-09-06 22:49

再次,尝试了解代码的作用,然后您也可以了解问题所在以及如何解决。 您应该能够查看每个命令并向其他人(或橡皮鸭:))解释代码的作用。

步骤1 :(即使复制粘贴此代码也很痛苦,但我愿意为科学而牺牲自己。:))

类型:str1的开头,
    fld1类型N,
   fld2类型C,
  pfld3类型N,

 

这定义了一个名为str1的类型,这是一种结构类型(=字段组,在这种情况下为3个字段)。

第2步:

数据:str1的tab1类型表,
         wa_tab1 TYPE str1。

这里是实际变量。 tab1是一个内部表,可以保存str1类型的结构的记录,wa_tab1是str1类型的结构。 根据上面的TYPE定义,它具有3个字段。

在这一点上,例如,您可以按照另一个答案的建议进行操作:

 wa_tab1-fld1 = 1。

 wa_tab1-fld2 ='A'。

 

前两个命令为结构wa_tab1中的字段分配一个值。 然后将此结构添加到内部表tab1中。 因此,结果,您在表tab1中有1条记录。

第3步。老实说,我不清楚您要使用的记录是什么。

 SELECT fld1 fld2 从tab1到fld3 = pfld3。

 写:/1 tab1-fld1,tab1-fld2。

 ENDSELECT。

SELECT与数据库表一起使用,而不与内部表一起使用(在最近的发行版中,我相信您也可以从内部表中执行SELECT,但是对于一个简单的示例来说,这似乎有些过头) 。 如果您的目标是从数据库表中选择数据,那么您需要一个不同的结构类型定义。 将合法数据选择为通用N和C类型没有任何意义。 相反,您应该使用与所选内容相对应的数据字典类型。 (ABAP帮助中的许多示例。)长期以来,还没有使用SELECT ... ENDSELECT并在其中进行一些处理。 (不确定HANA是否在此处进行了更改,但我对此表示怀疑。)

如果您想从内部表中获取数据(在您的代码中,该内部表中没有数据,因此也没有意义) 使用内部表的命令:READ和LOOP AT。

我也很惊讶您在pfld3上没有语法错误。 那个是从哪里来的?

然后,当然,我们不能简单地引用内部表中的值,例如

-表具有行和列。 这将指向哪个? 在哪一行/记录中? 根本没有道理。 如果要输出所有表内容,则将其遍历到结构或字段符号中(请参阅有关LOOP AT的帮助),然后使用该结构或字段符号输出值。

同样,文档深入涵盖了所有这些主题。 即使在旧版本中,也有很多可用的示例。 在ABAP编辑器中,转到菜单环境->示例。

野沐沐
4楼-- · 2020-09-06 22:55

或者有人认为您将s放在表名的末尾。 事情。

而不是

 LOOP AT t_thing INTO s_thing。
暮风yp
5楼-- · 2020-09-06 22:58

何时收到此错误? 在激活代码时还是在运行时? 您如何访问theese字段?

尝试使用声明表(或标准表):

数据:t1的tab1类型表,
 wa_tab1类型t1。
N-Moskvin
6楼-- · 2020-09-06 22:37

该错误是在语法检查(Ctrl + F2)/激活期间。

一周热门 更多>

向帮助了您的网友说句感谢的话吧!