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

news2024/9/20 1:15:18

指针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.coloradmin.cn/o/1245823.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文带你了解多文件混淆加密

目录 &#x1f512; 一文带你了解 JavaScript 多文件混淆加密 ipaguard加密前 ipaguard加密后 &#x1f512; 一文带你了解 JavaScript 多文件混淆加密 JavaScript 代码多文件混淆加密可以有效保护源代码不被他人轻易盗取。虽然前端的 JS 无法做到纯粹的加密&#xff0c;但通…

Grails 启动

Grails系列 Grails项目启动 文章目录 Grails系列Grails一、项目创建二、可能的问题1.依赖下载2.项目导入到idea失败3.项目导入到idea后运行报错 Grails Grails是一款基于Groovy语言的Web应用程序框架&#xff0c;它使用了许多流行的开源技术&#xff0c;如Spring Framework、…

技术部工作职能规划分析

前言 技术部的职能。以下是一个基本的框架,其中涵盖了技术部在公司中的关键职能和子职能。 主要职能 技术部门的主要职能分为以下几个板块: - 技术规划与战略: 制定技术规划和战略,与业务团队合作确定技术需求。 研究和预测技术趋势,引领公司在技术创新和数字化转型方…

外网讨论疯了的神秘模型Q*(Q-Star)究竟是什么?OpenAI的AGI真的要来了吗 | 详细解读

大家好&#xff0c;我是极智视界&#xff0c;欢迎关注我的公众号&#xff0c;获取我的更多前沿科技分享 邀您加入我的知识星球「极智视界」&#xff0c;星球内有超多好玩的项目实战源码和资源下载&#xff0c;链接&#xff1a;https://t.zsxq.com/0aiNxERDq 这几天&#xff0c;…

分布式篇---第三篇

系列文章目录 文章目录 系列文章目录前言一、什么是补偿事务?二、消息队列是怎么实现的?三、那你说说Sagas事务模型前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。…

c语言新龟兔赛跑

以下是一个使用C语言编写的新的龟兔赛跑游戏&#xff1a; #include <stdio.h>#include <stdlib.h>#include <time.h>int main() { int distance, turtle_speed, rabbit_speed, turtle_time, rabbit_time, rabbit_lead; srand(time(NULL)); // 随机数种…

F盘满了变成红色怎么清理?这4个简单方法记得收藏!

“因为我电脑的磁盘比较多&#xff0c;我通常会把一些比较重要的文件放在F盘中。但是很奇怪&#xff0c;我的F盘用着用着就满成红色了&#xff0c;这该怎么办呢&#xff1f;应该怎么进行清理呢&#xff1f;” 我们在使用电脑时都会发现&#xff0c;电脑上有很多的磁盘。我们可以…

企业数字化转型转什么?怎么转?这份攻略请收好

目录 -01-数字化转型“是什么” -02-数据驱动推动企业数字化转型 -03-企业数字化转型的行动路线图 数字化转型&#xff0c;转什么&#xff1f;怎么转&#xff1f;这些问题仍在困扰不少企业&#xff0c;也是每个企业转型升级不得不思考的重要问题。对此&#xff0c;中关村数字…

SQL语句的用法

目录 关系统型数据库相 联系类型 数据库的正规化分析 第一范式&#xff1a;1NF 范式主要就是减产冗余 第二范式&#xff1a;2NF 第三范式&#xff1a;3NF 字符串(char,varchar,text) char和varchar的比较&#xff1a; 修饰符&#xff0c; 主键&#xff0c;唯一键 常见…

干货!ERP软件如何帮助企业实现信息化管理?

ERP即企业资源规划&#xff08;Enterprise Resource Planning&#xff09;系统&#xff0c;其核心是物料的追踪流转。而在物料追踪流转的基础上&#xff0c;又衍生出一系列各类资源计划的管理和追踪。因此ERP发展成为一款集成各类资源计划&#xff0c;也就是集成企业核心业务流…

EMG肌肉电信号处理合集(二)

本文主要展示常见的肌电信号特征的提取说明。使用python 环境下的Pysiology计算库。 目录 1 肌电信号第一次burst的振幅&#xff0c; getAFP 函数 2 肌电信号波长的标准差计算&#xff0c;getDASDV函数 3 肌电信号功率谱频率比例&#xff0c;getFR函数 4 肌电信号直方图…

视频录制怎么弄?这里有一份超全攻略!

视频录制已成为一项常见任务&#xff0c;无论是为了保存在线学习资料&#xff0c;还是为了记录游戏精彩瞬间&#xff0c;它都可以轻松实现&#xff0c;可是您知道视频录制怎么弄吗&#xff1f;本文将介绍两种视频录制的方法&#xff0c;我们将分步骤详细说明&#xff0c;让您轻…

【elementui】el-popover在列表里循环使用,取消的doClose无效解决办法

目录 一、需求效果二、代码详情html方法接口 一、需求效果 在使用elementui的Popover 弹出框时&#xff0c;需求是在table列表里使用&#xff0c;循环出来&#xff0c;无法取消。 二、代码详情 html <el-table-column v-if"checkPermission([admin,user:resetPass…

c盘爆满?别再清什么c盘了,直接卸载!

1、下载软件 联想电脑管家下载&#xff1a; GeekUninstaller 2、排序软件大小 3、卸载 4、比较 直接节省6.2G的C盘&#xff01;&#xff01;&#xff01; 5、效果

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

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

内衣洗衣机怎么选?性价比高的小型洗衣机推荐

在机器解放了双手的时代中&#xff0c;洗衣机走进了千家万户&#xff0c;虽然在某种程度上缓解了人们手洗衣服的压力&#xff0c;但还是有不少人选择了人工手洗自己的内衣内裤&#xff0c;甚至连袜子都是手工洗的&#xff0c;这让人很是郁闷&#xff0c;倒不是说洗衣机不方便&a…

如何将本地websocket发布至公网并实现远程访问?

本地websocket服务端暴露至公网访问【cpolar内网穿透】 文章目录 本地websocket服务端暴露至公网访问【cpolar内网穿透】1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功…

财报解读:三季度的美国零售,“沃尔玛效应”仍在持续

经济学中常用“沃尔玛效应”来指代“消费者减少消费时&#xff0c;会选择每种类别中价格最低的商品”这一现象。作为全球最大的零售商&#xff0c;沃尔玛一定程度上成为了消费市场的风向标。 近日&#xff0c;沃尔玛发布的2024财年第三季度财报显示&#xff0c;其相较去年同期…

synchronized的轻量级锁居然不会自旋?

《Java并发编程的艺术》中说到「如果失败&#xff0c;表示其他线程竞争锁&#xff0c;当前线程便尝试使用自旋来获取锁」&#xff0c;并且下文所配的流程图中明确表示自旋失败后才会升级为重量级锁&#xff0c;但《深入理解Java虚拟机》又说「如果出现两条以上的线程争用同一个…

汇编-PROTO声明过程

64位汇编 64 模式中&#xff0c;PROTO 伪指令指定程序的外部过程&#xff0c;示例如下&#xff1a; ExitProcess PROTO ;指定外部过程&#xff0c;不需要参数.code main PROCmov ebx, 0FFFFFFFFh mov ecx,0 ;结束程序call ExitProcess ;调用外部过程main ENDP END 32位…