Field-Symbols(以下简称FS)大致类似于C语言里的指针,主要作用是程序更加灵活,有时可以实现一般无法实现的功能(比如之前那篇关于动态内表的),合理使用FS还可以提高程序效率,但是FS也有缺点,影响程序可读性,为修改和维护代码造成困难,出错隐蔽,而且很多错误都是编译器检查不出来的,只有运行时才会发生错误,提示内容也各种千奇百怪,不容易排查错误。

FS的定义类型大体分为变量和表,具体查阅SAP帮助,下面是FS的一些零散的心得和碰到的情况:

1,在使用FS前必须ASSIGN,不然会发生RUNTIME ERROR。

2, ASSIGN ‘200’ TO<FS1>.意思是指向常量的<FS1>,之后不可更改值(比如<FS1> = ‘300’),否则发生RUNTIME ERROR。

3,如果想实现2里类似的效果,那么需要ASSIGN一个变量给FS:

DATA V_ABC(20) TYPE C.

V_ABC = '200'.

ASSGIN V_ABC TO <FS1>.

<FS1> = '300'.

这时<FS1>就从200变更为300了,另外如果直接改变变量的值,那么<FS1>也会发生变化。
比如上例里V_ABC = '400',那么<FS1>也随之变为400。

4, 假设定义了<FS1>和<FS2>两个FS,分别ASSGIN到两个变量,变量A和变量B。

ASSIGN <FS1> TO <FS2>的意思是,让<FS2>同样指向<FS1>所指向的地方,即变量A,执行完该语句后,两个FS都指向变量A。而<FS2>= <FS1>的意思是,<FS2>所指向的变量B的值变成<FS1>所指向的变量A的值,<FS1>和<FS2>仍然是一个指向变量A,一个指向变量B。

5,如果LOOP时,LOOP AT IT_TAB ASSIGNING <WA_TAB>.,那么之后假如有REFRESH TABLE的操作的话,<WA_TAB>就再次回到初始未被ASSIGN的状态,这时如果使用<WA_TAB>会RUNTIME ERROR。

6,LOOP和READ语句把TABLEASSIGN到工作区的一些写法:

LOOP AT IT_TAB ASSIGNING <WA_TAB>.

READ TABLE IT_TAB ASSIGNING <WA_TAB>INDEX 1.

(注:LOOP AT IT_TAB INTO<WA_TAB>的写法也是允许的,但是含义和ASSIGNING不同,如果之前循环过内表,这里再是INTO的话,读到的数据是上次循环最后一行的数据,只有用ASSIGNING才能保证从内表第一行重新开始循环)。
其中<WA_TAB>有两种定义法:

FIELD-SYMBOLS <WA_TAB> TYPE TY_TAB."结构

FIELD-SYMBOLS <WA_TAB> TYPE ANY.

前者是指定了结构了,后者是不指定结构。

之后在为<WA_TAB>赋值时,写法有区别:

ASSIGN COMPONNET 'COL1' OF STUCTURE <WA_TAB>TO <FS1>

<FS> = 'ABC'."为<WA_TAB>里的COL1字段赋值ABC

此种写法对有结构定义和没有结构定义的<WA_TAB>都可行。

但是有结构定义的<WA_TAB>可以直接使用<WA_TAB>-COL = 'ABC'来赋值。

一般如果知道结构的话,还是应该用TYPE结构的来定义FS。

<WA_TAB>严格说来不是工作区,和WA_TAB工作原理不同,这里只是为了阅读方便才用WA前缀。

下面介绍下为什么<WA_TAB>要比工作区WA_TAB效率高:

内表写数据到工作区时,系统会开辟额外的内存。也就是说,工作区只是内表里的数据的一个副本,操作这个副本并不会影响内表里的数据。在工作区数据量大时,建议使用FS,它是只是一个指针,指向内表数据,所以使用<WA_TAB>操作数据时,是直接操作内表里的数据(而不是像WA_TAB那样是创建副本)。所以使用Field-Symbols比工作区效率更高。

注意:由于Field-Symbols是直接操作内表里的数据,所以不需要像工作区那样使用MODIFY语句,同理如果是CLEAR语句会直接清空内表里的数据,所以不能像使用工作区那样每次LOOP结束就清空一次工作区。还有就是<WA_TAB>必须是定义结构型才能提高效率,如果是定义成TYPE ANY的FS,反而比普通的工作区写法效率低。

Field-Symbols总结相关推荐

  1. 什么是 ABAP Field Symbol

    ABAP Field Symbol 是 ABAP 这门编程语言一个比较重要的语言特性.在 ABAP 帮助文档里的介绍: 在我十几年前刚刚开始学习 ABAP 时,阅读这段帮助文档的文字,觉得比较晦涩. ...

  2. ALV Styles in Field catalogue using OOPS

    转自http://www.saptechnical.com/Tutorials/ALV/Styles/demo.htm By Swarna S, Tata Consultancy Services * ...

  3. 一个简单的动态内表alv案例

    动态内表的问题一直没搞明白,每次都要复制粘贴. 动态内表的创建和使用主要有以下几点: 1.动态内表的创建,首先要定义动态结构,然后再根据定义的动态结构利用系统一个标准的method:"cl_ ...

  4. ALV动态列Demo

    *-------------ALV 相关-------------------------- DATA: wa_layo TYPE lvc_s_layo. DATA: wa_fcat TYPE lvc ...

  5. 释疑の语法LOCAL

    作用就是把当前对象保存在一个临时存储空间,它只能用到子程序或者FUNTION MODULE里,在程序结束的时候数据对象重新分配在临时空间的值. 如果用LOCAL对同一个对象执行了好几遍,那么只有第一次 ...

  6. ABAP常见面试问题

    1. What is the typical structure of an ABAP program? 2. What are field symbols and field groups.? Ha ...

  7. ABAP performance学习笔记

    去年的时候进行了一下Performance的培训,也实际动手对占用系统资源严重的程序进行了tuning,效果还不错!我tuning的一个程序,在tuning以前需要跑20多个小时,tuning完成以后 ...

  8. SAP中的邮件发送功能

    在SAP中我们可以设置装备摆设STMP邮件功能,可以经由过程SOST来查磕暌故件状况,在编码中可用FM SO_DOCUMENT_SEND_API1 .SO_NEW_DOCUMENT_ATT_SEND_ ...

  9. ABAP 740里的新语法 - LET表达式

    A LET expression defines variables var1, var2, - or field symbols , , - as local auxiliary fields in ...

  10. 用ABAP代码实现从1累加到100

    itab = VALUE #( FOR j = 1 WHILE j <= 100 ( j ) ). * Reduce 后面跟类型 * A constructor expression with ...

最新文章

  1. icp mysql_MySQL · 特性分析 · Index Condition Pushdown (ICP)
  2. Entity Framework技术系列之2:三种开发模式实现数据访问
  3. 如何使用Openfiler为VMware ESX设置一个免费的iSCSI或NAS储存系统
  4. python—多线程定义和创建(一)
  5. Asp.Net Core SignalR 与微信小程序交互笔记
  6. java开发门禁指纹,指纹门禁
  7. python多久可以精通_学Python需要多久能学会?精通Python需要多长时间?
  8. html实现在线新闻浏览器,使用JQuery Mobile实现手机新闻浏览器
  9. DevExpress LookUpEdit 数据绑定
  10. 一键还原系统(自我笔记)
  11. IDEA设置SQL格式化(关键字大写)
  12. 手机号码吉凶测试原理计算公式
  13. html仿百度贴吧,利用Canvas模仿百度贴吧客户端loading小球的方法示例
  14. pom.xml文件中的dependency的scope属性值为test,但是Test sources root的文件里面不能使用
  15. Yii2用户信息存储与获取
  16. [计算机组成原理] 第六章 控制系统与CPU
  17. 给SpringBoot Web应用配上JavaFx漂亮衣服
  18. 王牌竞速安装后显示服务器维护,王牌竞速进不去游戏怎么办 如何解决进不去游戏...
  19. 国庆放假前一周,再学这些技术,安安稳稳过假期
  20. 交叉销售(Cross-Selling)与链接分析

热门文章

  1. 从支付宝面试题谈:怎样有效减少用户咨询的客服成本
  2. 10万点击率的“干货”,其实人人都写得出来
  3. MySQL Schema设计(三)利用Python操作Schema
  4. 面试题: Vue中的 computed 和 watch的区别
  5. 基于zookeeper实现系统配置中心
  6. SVN -客户端URL地址修改命令
  7. 横向ListView(四) —— 添加滚动条
  8. MySQL高可用方案-PXC(Percona XtraDB Cluster)环境部署详解
  9. 个人作业-Week2:案例分析
  10. oralce 异常处理 exception