SAP ABAP 基础语法随笔
SAP ABAP 基础笔记随笔
- 基础
- 1、move-corresponding
- 2、IF终止循环
- 3、CONSTANTS
- 4、LOOP AT
- 5、CLEAR & REFRESH
- 6、获取select-options和parameters的值
- 7、TOP-OF-PAGE
- 8、AT SELECTION-SCREEN OUTPUT 屏幕选择性展示
- 9、MODIFY ID 更改屏幕显示
- 10、设置锁对象
- 11、DESCRIBE
- 12、CLEAR、REFRESH、FREE
- 13、读取文件
- 14、INNER JOIN使用限制
- 15、下载模板
- 16、选择文件路径
- 17、ASSIGNING FIELD-SYMBOL
- 基本使用
- 进阶
- 18、内外部转换
基础
1、move-corresponding
A(id:10,name:aa,gen:f)
B(id:20,gen:m,dm:01)
move-corresponding A to B.
—>B(id:10,gen:f,dm:01).
B如果有与A相同的Key,则替换对应的Value。
2、IF终止循环
CONTINUE:用于结束当前循环,剩下的代码块不执行,进入下一循环。
CHECK 检查condition是否为真,如果为真就结束循环。
EXIT:立即结束循环并执行ENDDO、ENDWHILE、ENDSELECT,对于嵌套循环,只结束本循环,对其它层循环不影响。
3、CONSTANTS
CONSTANTS:gv_data TYPE string VALUE '类似于JAVA的FINAL'
用于定义固定值,该固定值不可改变
4、LOOP AT
AT FIRST 循环开始时执行
AT LAST 循环结束时执行
AT NEW 出现新的 数据(非数字字段) 时执行
AT END
5、CLEAR & REFRESH
CLEAR用于清空不带表头的表。
REFRESH用于清空WITH HEADER LINE 的表
6、获取select-options和parameters的值
RSPARAMS是select-options和parameters的通用结构,如图:
调用’RS_REFRESH_FROM_SELECTOPTIONS’可以将s和p的值存入函数内表 GIT_PARAMS[] 中,s的KIND为‘S’,p的KIND为‘P’,可以根据不同的KIND循环选出需要的值。
TABLES: MARA.
DATA:GIT_PARAMS TYPE TABLE OF RSPARAMS.
DATA:GWA_PARAMS TYPE RSPARAMS.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*SELECT-OPTIONS:S_MATNR FOR MARA-MATNR.
PARAMETERS:P_MTART TYPE MARA-MTART.
PARAMETERS:P_MATKL TYPE MARA-MATKL.*&---------------------------------------------------------------------**& Start of Selection*&---------------------------------------------------------------------*START-OF-SELECTION.CALL FUNCTION 'RS_REFRESH_FROM_SELECTOPTIONS'EXPORTINGCURR_REPORT = SY-REPIDTABLESSELECTION_TABLE = GIT_PARAMS[].SORT GIT_PARAMS BY KIND.WRITE:/ 'Parameters'.WRITE:/ 'Name' ,20 'Value' .LOOP AT GIT_PARAMS INTO GWA_PARAMS WHERE KIND = 'P'.WRITE:/ GWA_PARAMS-SELNAME ,20 GWA_PARAMS-LOW.ENDLOOP.SKIP.WRITE:/ 'Select-Options'.WRITE:/ 'Name' ,20 'Sign' ,25 'Option',32 'Low',52 'High'.LOOP AT GIT_PARAMS INTO GWA_PARAMS WHERE KIND = 'S'.WRITE:/ GWA_PARAMS-SELNAME ,20 GWA_PARAMS-SIGN ,25 GWA_PARAMS-OPTION, 32 GWA_PARAMS-LOW,52 GWA_PARAMS-HIGH.ENDLOOP.
7、TOP-OF-PAGE
在页头执行
8、AT SELECTION-SCREEN OUTPUT 屏幕选择性展示
**AT SELECTION-SCREEN OUTPUT **用于设置画面属性
设置AT SELECTION-SCREEN OUTPUT:
9、MODIFY ID 更改屏幕显示
用于动态显示屏幕
屏幕设计
TABLES:EKKO.
SELECTION-SCREEN BEGIN OF BLOCK BLK01 WITH FRAME.
PARAMETERS:P_MAINT RADIOBUTTON GROUP G1 USER-COMMAND ACTIVE,P_QUERY RADIOBUTTON GROUP G1 DEFAULT 'X' .
SELECTION-SCREEN END OF BLOCK BLK01.SELECTION-SCREEN BEGIN OF BLOCK BLK02 WITH FRAME.
SELECT-OPTIONS: S_EBELN FOR EKKO-EBELN MODIF ID M1,S_BUKRS FOR EKKO-BUKRS MODIF ID M1,S_EKORG FOR EKKO-EKORG MODIF ID M1.
SELECTION-SCREEN END OF BLOCK BLK02.
屏幕显示逻辑
AT SELECTION-SCREEN OUTPUT.LOOP AT SCREEN.CASE SCREEN-GROUP1.WHEN 'M1'.IF P_MAINT = 'X'.SCREEN-ACTIVE = '0'.ELSE.SCREEN-ACTIVE = '1'.ENDIF.MODIFY SCREEN.ENDCASE.ENDLOOP.
10、设置锁对象
T-CODE :se11
通过调用从锁对象的定义自动生成的特定功能模块,在在线事务的编程中请求和释放锁定。必须在 ABAP 字典中显式创建这些锁对象。
注意事项
- 必须在 ABAP 字典中定义锁对象。锁对象的名称应以 E 开头。
- 必须将激活锁对象时自动创建的用于请求和释放锁定的功能模块链接到相关在线事务的编程。
创建
填写对应信息并激活
点击锁模块查看生成的FM模块
在需要的程序调用即可
PERFORM FRM_LOCK_DATA USING LST_CJ-EMPID "加锁,传入主键CHANGING O_SUBRC.
PERFORM FRM_UNLOCK_DATA USING LST_CJ-EMPID. "解锁
FORM FRM_LOCK_DATA USING P_LST_CJ_EMPIDCHANGING P_O_SUBRC.CALL FUNCTION 'ENQUEUE_EZ187386_01'EXPORTINGMODE_ZT187386CJ = 'E'MANDT = SY-MANDTEMPID = P_LST_CJ_EMPID
* X_EMPID = ' '
* _SCOPE = '2'
* _WAIT = ' '
* _COLLECT = ' 'EXCEPTIONSFOREIGN_LOCK = 1SYSTEM_FAILURE = 2OTHERS = 3.IF SY-SUBRC <> 0.
* Implement suitable error handling hereENDIF.ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UNLOCK_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LST_CJ_EMPID text
*----------------------------------------------------------------------*
FORM FRM_UNLOCK_DATA USING P_LST_CJ_EMPID.CALL FUNCTION 'DEQUEUE_EZ187386_01'EXPORTINGMODE_ZT187386CJ = 'E'MANDT = SY-MANDTEMPID = P_LST_CJ_EMPID.
* X_EMPID = ' '
* _SCOPE = '3'
* _SYNCHRON = ' '
* _COLLECT = ' 'ENDFORM.
11、DESCRIBE
DESCRIBE TABLE lt_mat LINES lv_cont.
- 表示计算内表It_mat的数据行数,并将行数放到Iv_cont内。
DESCRIBE FIELD el.
描述数据元素的属性,包括长度、类型、小数点等信息
DESCRIBE FIELD dobj[TYPE typ [COMPONENTS com]][LENGTH ilen IN { BYTE | CHARACTER } MODE][DECIMALS dec][OUTPUT-LENGTH olen][HELP-ID hlp][EDIT MASK mask].
typ里放类型,com里放el的子元素,ilen里放长度,dec里放小数位数、olen里放输出长度,
DESCRIBE TABLE itab KIND knd.
- 用于判断内表类型,将itab内表类型赋给knd。
- knd类型分别可以为SYDEX_KIND-standed ,SYDEX_KIND-SORTED,SYDEX_KIND-HASHED。
12、CLEAR、REFRESH、FREE
CLEAR用于清理内表和工作区
对于有表头的内表WA_DATA,CLEAR WA_DATA表示清除工作区域,CLEAR WA_DATA[] 表示清除内表区域内不清楚工作区域。
REFRESH专门用于清理内表
FREE会清除内表并释放所占空间。
13、读取文件
读取Excel表到SAP内表:
屏幕定义
*----------------------------------------------------------------------*
* 选择画面定义
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK BLK01 WITH FRAME.
PARAMETERS:P_FILE LIKE RLGRAP-FILENAME. "FILE SELECT PARAMETRER
SELECTION-SCREEN END OF BLOCK BLK01.
打开选择文件
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG "用于选择文件EXPORTINGWINDOW_TITLE = 'OPEN FILE'INITIAL_DIRECTORY = 'C:\' "选择文件打开的初始路径CHANGINGFILE_TABLE = GT_FILERC = GW_RCEXCEPTIONSFILE_OPEN_DIALOG_FAILED = 1CNTL_ERROR = 2ERROR_NO_GUI = 3NOT_SUPPORTED_BY_GUI = 4OTHERS = 5.IF SY-SUBRC <> 0.ENDIF.READ TABLE GT_FILE INTO GST_FILE INDEX 1.P_FILE = GST_FILE-FILENAME. "将文件名赋值给P_FILE
读取P_FILE路径下的Excel文件到内表GT_DATA。
DATA: LWK_FILENAME TYPE RLGRAP-FILENAME, "字符串LT_DATA TYPE TRUXS_T_TEXT_DATA.LWK_FILENAME = P_FILE.CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP' "读取数据到内表EXPORTING
* I_FIELD_SEPERATOR =I_LINE_HEADER = 'X'I_TAB_RAW_DATA = LT_DATAI_FILENAME = LWK_FILENAMETABLESI_TAB_CONVERTED_DATA = GT_DATAEXCEPTIONSCONVERSION_FAILED = 1OTHERS = 2.
14、INNER JOIN使用限制
- 必须要有ON条件语句,多个条件只能用AND连接
- 不能使用NOT、LIKE、IN
15、下载模板
上传模板:输入T-CODE SMW0上传模板,Web对象选择"WebRFC应用程序的二进制数据",然后新建上传即可。
模板下载:
使用以下FORM即可。
FORM FRM_TEMP_DOWNLOAD .DATA: LWA_WWWDATA_TAB LIKE WWWDATATAB,L_FILENAME TYPE RLGRAP-FILENAME.READ TABLE GT_FILE INTO GS_FILE INDEX 1.L_FILENAME = GS_FILE-FILENAME. "下载路径SELECT SINGLE *FROM WWWDATAINNER JOIN TADIRON WWWDATA~OBJID = TADIR~OBJ_NAMEINTO CORRESPONDING FIELDS OF LWA_WWWDATA_TABWHERE WWWDATA~SRTF2 = 0AND WWWDATA~RELID = 'MI' "标识二进制的对象AND TADIR~PGMID = 'R3TR'AND TADIR~OBJECT = 'W3MI'AND TADIR~OBJ_NAME = 'ZTEMP_187386_01'."模板名字IF SY-SUBRC = 0.CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'EXPORTINGKEY = LWA_WWWDATA_TABDESTINATION = L_FILENAME.MESSAGE '模板已下载到桌面' TYPE 'S'.ENDIF.
ENDFORM.
16、选择文件路径
DATA: GT_FILE TYPE FILETABLE,GW_RC TYPE I.FORM FRM_FILE_SEL .CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG "用于选择文件EXPORTINGWINDOW_TITLE = 'OPEN FILE' "选择窗口名字INITIAL_DIRECTORY = 'C:\' "选择初始路径FILE_FILTER = CL_GUI_FRONTEND_SERVICES=>FILETYPE_EXCEL "过滤Excel类型文件CHANGINGFILE_TABLE = GT_FILERC = GW_RCEXCEPTIONSFILE_OPEN_DIALOG_FAILED = 1CNTL_ERROR = 2ERROR_NO_GUI = 3NOT_SUPPORTED_BY_GUI = 4OTHERS = 5.IF SY-SUBRC <> 0.ENDIF.
ENDFORM.
17、ASSIGNING FIELD-SYMBOL
基本使用
定义指针直接改变内表值
示例:
LOOP AT GT_DATA ASSIGNING FIELD-SYMBOL(<FS_DATA>).<FS_DATA>-NUM = '1'.<FS_DATA>-AGE = '10'.
ENDLOOP.
示例代码作用:将内表GT_DATA的每一行的NUM和AGE字段分别改为“1”和“10”。
进阶
LOOP AT GT_DATA ASSIGNING FIELD-SYMBOL(<FS_OUT>) GROUP BY ( KEY1 = <FS_OUT>-HEADID KEY2 = ... ) ASSIGNING FIELD-SYMBOL(<FS_GROUP>).LOOP AT GROUP <FS_GROUP> ASSIGNING FIELD-SYMBOL(<FS_LINE>).<FS_LINE>-BUKRS = ...<FS_LINE>-BLART = ...<FS_LINE>-BLDAT = ...<FS_LINE>-BUDAT = ...ENDLOOP.....ENDLOOP.
对于上图所示数据 相同的凭证序号表示为同一组数据 在使用bapi进行操作时需要将同一凭证的数据导入到对应的内表中 处理起来就比较繁琐
可以使用以上代码实现分组循环:将内表GT_DATA按照HEADID等进行排序和分组 每一组都放到<FS_GROUP>中 然后对分组进行普通的指针循环 <FS_LINE>即指向每一组的每一条数据。
18、内外部转换
使用Function进行内外部转换
"外部转内部-加前导零
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'EXPORTINGINPUT = <FS_DATA>-HKONTIMPORTINGOUTPUT = <FS_DATA>-HKONT.
"内部转外部-去前导零
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'EXPORTINGINPUT = <FS_DATA>-HKONTIMPORTINGOUTPUT = <FS_DATA>-HKONT.
SAP S4 新语法
"内部转外部-去前导零
X = |{ X ALPHA = OUT }|.
"外部转内部-加前导零
X = |{ X ALPHA = IN }|.
SAP ABAP 基础语法随笔相关推荐
- SAP ABAP 基础知识
0:前言 作者是ABAP新手 之前只学过C / JAVA等语言,所以笔记类型偏向于把ABAP的本质知识和C以及JAVA串联起来,在学习的基础上加了一些自己的理解,故希望读者具有C和面向对象的基础,才能 ...
- SAP ABAP基础
一.SAP ABAP简介: 典型SAP系统的3层客户端/服务器体系结构如下所示: 表示层包含可用于控制SAP系统的任何输入设备. 这可以是web浏览器,移动设备等. 所有中央处理都在应用程序服务器中进 ...
- SAP ABAP基础知识总结图
在学习了两周的abap开发后,我总结了一个思维导图,知识架构大致如下.
- SAP ABAP基础知识自学笔记二
三.各种定义 基本格式 DATA:XX TYPE YY VALUE'ZZ' 各种来了 *参照数据字典定义 *参照数据元素定义 data v9 type zdata_jg_20100325_01. *参 ...
- SAP ABAP 因系统维护使ABAP语法不再被支持导致使用很久的程序报错问题之分析
SAP ABAP 因系统维护使ABAP语法不再被支持导致使用很久的程序报错问题之分析 所在项目客户的一家工厂上线已经超过半年,其业务部门提出一个使用了半年的RF枪程序,突然不能使用了.程序直接Dump ...
- SAP ABAP技能树
分枝介绍 从难易程度以及普及程度来进行了大概的分类,从基础,到中级到高级的技能,纯是根据本人的判断进行分类,不代表任何官方的意见. 基础部分 主要涵盖了开发语言基本的需要掌握的技能,纯粹从技术的角度以 ...
- SAP ABAP Development Tool 提高开发效率的十个小技巧
这是 Jerry 2021 年的第 46 篇文章,也是汪子熙公众号总共第 323 篇原创文章. Jerry 已经有很长一阵子没有打开工作电脑上的 SAP ABAP Development Tool 了 ...
- SAP ABAP一组关键字 IS BOUND, IS NOT INITIAL和IS ASSIGNED的用法辨析
ABAP里的IS BOUND, IS NOT INITIAL和IS ASSIGNED这组关键字,如果平时不留心,很容易理解地似是而非.今天我们就来说一说它们的区别. 先把SAP帮助文档抄过来: IS ...
- SAP ABAP Netweaver服务器的标准登录方式讲解
最近Jerry把这个公众号之前发布的总共230篇文章按照类别整理了一系列合集出来,比如所有的ABAP文章,放在了这个合集里:汪子熙的ABAP合集. 本文继续介绍ABAP里的一个知识点:ABAP Net ...
最新文章
- phpMyAdmin 4.4.0 beta1 发布,MySQL 管理工具
- Oracle case when的用法
- 工业用微型计算机(25)-伪操作(1)
- boost::spirit模块实现使用不同的输出语法格式化单个容器类型的测试程序
- 十进制小数化为二进制小数的方法是什么_十进制转成二进制的两种方式
- 深度学习需要注意的11个方面
- 详解 Ops 智能运维机器人,故障处理又快又准!
- windows内核对象
- Linux下iptables 禁止端口和开放端口
- MFC程序减少体积的方法
- python requests text content_对python requests的content和text方法的区别详解
- 测试mysql主从_MySQL主从介绍、配置主从、测试主从同步
- linux bzip2压缩文件,linux bzip2命令压缩或解压缩bzip2文件
- springboot基于java的邮件收发管理系统毕业设计源码101025
- python实现whois查询_Python 工具whois查询
- MBR2060FCT肖特基二极管,ASEMI品牌原装ASEMI品牌肖特基二极管MBR2060FCT,最大正向整流电流:20A;反向峰值电压:60V;MBR2060FCT广泛应用于开关电源、LED电源
- 监听电源键的单击或长按事件
- 唤醒手腕Python全栈工程师学习笔记(微机实验篇)
- flutter 打开设置面板进行基本设置
- logback 配置总结