SAP指针Field-Symbols:<FS>用法及实例

指针Field-Symbols:用法

内部字段定义 :

FIELD-SYMBOLS:   [TYPE>]

一、在ABAP编程中使用非常广泛,类似于指针,可以指代任何变量。

当不输入时,继承赋给它的变量的所有属性 

当输入时,赋给它的变量必须与同类型。 

举个简单的例子:

  FIELD-SYMBOLS:.

  DATA:DAT(8) VALUE '19920108'.

  ASSIGN DAT TO F1>.

  WRITE:/ F1>.

" 继承dat属性,为C类型,值为19920108 。"

二、注意,这里定义了之后,使用assign .. to ..,将变量分配给内部字段,这时才继承了dat的属性及值。

如果写成如下:

  FIELD-SYMBOLS: TYPE D.DATA:DAT(5) TYPE C VALUE '12345'.ASSIGN DAT TO F2>.WRITE:/ F2>.

这时就会报错:dat与的类型不兼容。因为F2定义为D类型,所以assign的只能是同类型变量。

FIELD-SYMBOLS: TYPE D.DATA:DAT(8) VALUE '19920108'.ASSIGN DAT TO F3> TYPE 'D'.WRITE:/ F3>.

这次虽然为D类型,而dat为C类型,但是type D 是将dat类型转换成D类型再分配给,输出19920108.

简单介绍下之后,我们不再赘述,下面结合之前的博文《将Excel导入SAP数据库表》讲下如何使用field-symbol:

首先我们摘取相关代码如下

1.先定义.

FIELD-SYMBOLS:.
SORT I_EXCEL BY ROW COL.
DATA:NUM_COL TYPE I.

2.循环i_excel内表,依次读出Excel中每一行的内容,写入I_TABLE内表(这里要结合之前的将excel导入SAP的博文内容):

我们选择的Excel有两行内容 

所以取到i_excel中的内容如下图: 

去掉表头行后: 

执行下面的代码:

LOOP AT I_EXCEL INTO W_EXCEL.NUM_COL = W_EXCEL-COL.ASSIGN COMPONENT  NUM_COL  OF STRUCTURE W_TABLE TO .= W_EXCEL-VALUE.AT END OF ROW.APPEND W_TABLE TO I_TABLE.CLEAR:W_TABLE.ENDAT.CLEAR:W_EXCEL.
ENDLOOP.

根据代码,我们一起单步调试一下: 

loop第一次,先将i_excel的第一行写入工作区 w_excel,这时w_excel中的内容为: 

w_excel-row = 0002. 

w_excel-col = 0001. 

w_excel-value = 1. 

所以num_col = w_excel-col 也就是1. 

那ASSIGN COMPONENT NUM_COL OF STRUCTURE W_TABLE TO .就相当于: 

assign component 1 of structure w_table to . 

也就是将w_table-num 分配给了,前面我们提到,分配给之后,继承了分配给它的变量的属性和值。 

此外还有一点:当我们改变本身时,它的分配变量也会跟着改变,简单来说,就是双向的。改变任何一方,另一方都会跟着改变。所以我们这里的思路就是通过改变达到改变w_table-num的目的。 

回到代码: = w_excel-value. 

将 2-1单元格的 value 赋值给,相当于就是将第一行的序号字段赋值给了w_table-num.也就是1 。这时w_table-num = 1. 

紧接着,后面有一个用法: 

at end of row. 

….. 

endat. 

这段代码的作用就是:以row字段为准,当row值将要改变时(也就是下一次循环的值)执行其中的代码。 

所以这个用法只能在loop中使用,而且使用之前我们要注意给内表按照row排序:SORT I_EXCEL BY ROW COL.

在上面的程序中,我们为了让一行所有的字段都对应赋值到w_table的对应字段上,然后再提交到i _table中。回到刚才的第一次循环结束: 

由于内表中第二行row值还为0002,所以不执行at end of 中的代码,loop第二次: 

w_excel-row = 0002. 

w_excel-col = 0002. 

w_excel-value = A. 

道理同上,这次assign component 2 of structure w_table to . 

将 w_table-txt 分配给,然后将’A’赋值给,也就是 w_table-txt = ‘A’.这次执行at end of 中代码,因为内表下一行row是0003(见上图),所以执行 append w_table to i_table. clear:w_table. 

这样我们就写入i_table中一行内容,那就是序号 :1 ,内容:A。

这样我们依次把excel中的每一行都取到了i_table中,当然这样还没有完全完成,最终我们要将数据写入gt_table,从而提交到数据库中。所以还要执行下面的代码:

LOOP AT I_TABLE INTO W_TABLE.GW_TABLE-MANDT = SY-MANDT.GW_TABLE-NUM = W_TABLE-NUM.GW_TABLE-TXT = W_TABLE-TXT.
APPEND GW_TABLE TO GT_TABLE.
CLEAR:GW_TABLE.
CLEAR:W_TABLE.
ENDLOOP.

后面这部分是博文如何将Excel导入sap数据库表的内容,但是field-symbols的用法非常方便,具体的其他使用方法本人后续会总结后分享给大家共同学习进步,有不对之处还望各位大神指正。

三、实例

FIELD-SYMBOLS: <tab01>   TYPE any,<tab02>   TYPE any,<field01> TYPE any,<field02> TYPE any.* 管理费用特殊处理READ TABLE pt_acc_cost1 ASSIGNING <tab01> WITH KEY ergsl = '00001' stufe = '02'.WHILE sy-subrc = 0.ASSIGN COMPONENT sy-index OF STRUCTURE <tab01> TO <field01>.READ TABLE pt_acc_cost1 ASSIGNING <tab02> WITH KEY ergsl = '71'.IF sy-subrc = 0.ASSIGN COMPONENT sy-index OF STRUCTURE <tab02> TO <field02>.ENDIF.IF sy-index > 7.<field01> = <field01> - <field02>.ENDIF.ENDWHILE.READ TABLE gt_acc_cost1_lastyear ASSIGNING <tab01> WITH KEY ergsl = '00001' stufe = '02'.WHILE sy-subrc = 0.ASSIGN COMPONENT sy-index OF STRUCTURE <tab01> TO <field01>.READ TABLE gt_acc_cost1_lastyear ASSIGNING <tab02> WITH KEY ergsl = '71'.IF sy-subrc = 0.ASSIGN COMPONENT sy-index OF STRUCTURE <tab02> TO <field02>.ENDIF.IF sy-index > 7.<field01> = <field01> - <field02>.ENDIF.ENDWHILE.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/213383.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

visionOS空间计算实战开发教程Day 6 拖拽和点击

在之前的学习中我们在空间中添加了3D模型&#xff0c;但在初始摆放后就无法再对其进行移动或做出修改。本节我们在​​Day 5​​显示和隐藏的基础上让我们模型可以实现拖拽效果&#xff0c;同时对纯色的立方体实现点击随机换色的功能。 首先是入口文件&#xff0c;无需做出改变…

vulnhub6

靶机地址&#xff1a;https://download.vulnhub.com/evilbox/EvilBox---One.ova 准备工作 可以先安装 kali 的字典: sudo apt install seclists ​ 或者直接输入 seclists​&#xff0c;系统会问你是否安装&#xff0c;输入 y 即可自动安装 733 x 3751414 x 723 ​ 默认路…

Whatweb简单使用

目录 简介 安装 debian/ubtuntu redhat/centos 特性 使用 常用参数如下&#xff1a; whatweb -v whatweb --version whatweb -i 1.txt whatweb -v www.baidu.com 扫描等级 whatweb -a 4 www.baidu.com 扫描网段 whatweb --no-errors -t 255 192.168.71.0/24 导出…

2024第十二届成都国际智能驾驶技术展览会

2024第十二届成都国际智能驾驶技术展览会 2024 Chengdu International Autonomous driving Expo 时间&#xff1a;2024年7月17-19日 地点&#xff1a;成都世纪城新国际会展中心 指导单位&#xff1a; 成都市人民政府 四川省经济和信息化厅 重庆市经济和信息化委员会 推动…

综合实力盘点高性价比还优质的云服务器:亚马逊云科技仍然领跑市场

如果说云计算是一条流向数字化未来的河流&#xff0c;那亚马逊云科技毫无疑问是航行在最前面的帆船&#xff1b;如果说云计算是一条通往数字化未来的铁轨&#xff0c;那亚马逊云科技就是行驶在最前面的高铁。接下来回首往昔&#xff0c;以史为镜&#xff0c;得出云服务器哪家便…

Spring Beans;Spring Bean的生命周期;spring Bean的作用域,spring处理线程并发问题

文章目录 Spring Beans请解释Spring Bean的生命周期解释Spring支持的几种bean的作用域Spring容器中的bean可以分为5个范围&#xff1a; Spring如何处理线程并发问题&#xff1f; 在现在的项目开发中经常使用到spring bean&#xff0c;那么来谈谈spring bean的生命周期&#xff…

OSG编程指南<十>:OSG几何体的绘制

1、场景基本绘图类 在 OSG 中创建几何体的方法比较简单&#xff0c;通常有 3 种处理几何体的手段&#xff1a; 使用松散封装的OpenGL 绘图基元&#xff1b;使用 OSG 中的基本几何体&#xff1b;从文件中导入场景模型。 使用松散封装的OpenGL 绘图基元绘制几何体具有很强的灵活…

LangChain(0.0.339)官方文档一:快速入门

LangChain官网、LangChain官方文档 、langchain Github、langchain API文档、llm-universe 文章目录 一、LangChain简介&#xff08;v0.0.338&#xff09;1.1 整体框架1.2 主要组件1.2.1 Model I/O1.2.2 Retrieval1.2.2.1 RAG1.2.2.2 Retrieval 1.2.3 Chain 1.3 其它组件1.3.1 …

在vscode中添加代码提示

添加配置 run->add_configuration 添加头文件路径 在c_cpp_properties.json中添加头文件路径 效果

Spark---SparkCore(一)

一、术语与宽窄依赖 1、术语解释 1、Master(standalone):资源管理的主节点&#xff08;进程&#xff09; 2、Cluster Manager:在集群上获取资源的外部服务(例如&#xff1a;standalone,Mesos,Yarn) 3、Worker Node(standalone):资源管理的从节点(进程)或者说管理本机资源的…

ElasticSearch 7 SQL 详解

平时使用Elasticsearch的时候,会在Kibana中使用Query DSL来查询数据.每次要用到Query DSL时都基本忘光了,需要重新在回顾一遍,最近发现Elasticsearch已经支持SQL查询了(6.3版本以后),整理了下一些用法. 简介 Elasticsearch SQL是一个X-Pack组件,它允许针对Elasticsearch实时执…

设计模式之建造者(Builder)模式

目录 1、什么是建造者Builder模式&#xff1f; 2、建造者Builder模式的利与弊 3、建造者Builder模式的应用场景 4、建造者模式中的指导者&#xff08;Director&#xff09;有什么作用&#xff1f; 5、建造者Builder模式与其他模式的关系 小结 1、什么是建造者Builder模式…