ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

SAP ABAP开发入门:命名规范与第一个程序创建指南

SAP ABAP开发入门:命名规范与第一个程序创建指南 1. 从零开始先搞清楚ABAP里什么能写、什么不能写如果你刚开始接触SAP ABAP开发最头疼的可能不是写代码而是“怎么写才对”。ABAP有一套自己的规矩尤其是命名规范它不像Python或Java那样有社区共识而是和SAP系统架构、数据字典深度绑定。搞不清楚轻则代码可读性差重则程序报错、数据不一致。所以入门ABAP基本语法的第二步不是急着写WRITE ‘Hello World’而是先弄明白命名规范和如何创建一个能跑起来的程序。这就像盖房子前得先知道砖头叫什么、怎么放图纸程序又该怎么画。ABAP的命名空间主要分两大块数据对象和程序对象。数据对象就是你程序里要处理的变量、常量、结构、内表程序对象就是报表、函数组、类这些容器本身。数据对象的命名核心是前缀。这不是强制语法但几乎是所有ABAP项目的硬性规定目的是看一眼变量就知道它存的是什么类型的数据。常见的前缀约定如下LV_ 本地变量。在子程序、方法内部声明的变量。例如lv_matnr TYPE matnr.物料号GV_或G_ 全局变量。在程序顶层声明的变量整个程序都能访问。例如gv_ok_code TYPE sy-ucomm.屏幕上的OK代码LS_ 结构体。用于存放一行结构化的数据。例如ls_mara TYPE mara.物料主数据的一行LT_或T_ 内表。相当于其他语言里的数组或列表用于存放多行数据。例如lt_mara TYPE TABLE OF mara.物料主数据的多行R_ 范围表。用于存放选择屏幕上的区间条件如BETWEEN,GT(大于) 等。例如r_budat TYPE RANGE OF bkpf-budat.过账日期范围C_ 常量。例如c_flag_x TYPE char1 VALUE ‘X’.常量X代表选中/激活程序对象的命名则与事务代码和系统目录紧密相关。SAP通过一个叫包Package的逻辑容器来管理所有开发对象。创建任何程序对象前必须先指定或创建一个包。对象的名称通常有固定格式可执行程序报表 通常以Z或Y开头这是SAP留给客户自定义的命名空间。例如ZMMR001。函数组 以ZFG_或YFG_开头例如ZFG_MATERIAL_UTILITIES。类 以ZCL_或YCL_开头例如ZCL_SALV_WRAPPER。接口 以ZIF_开头。数据字典对象 透明表以Z开头如ZMATERIAL_EXT视图以ZV_开头。记住这些前缀你读别人的代码或者自己写的时候思路会清晰很多。变量lt_mara一眼就知道是物料主数据的内表而lv_index则是一个本地循环计数器。2. 动手第一步创建你的第一个ABAP程序理论懂了接下来就是在SAP GUI里实操。整个过程可以概括为进开发环境 - 指定包 - 创建对象 - 写代码 - 激活 - 运行。2.1 进入ABAP开发工作台登录SAP系统后在命令框也就是那个可以输入事务代码的地方输入SE80并回车。SE80是ABAP开发的核心工作台对象导航器你几乎所有的开发工作都可以从这里开始。也可以输入SE38直接进入ABAP编辑器但SE80视图更完整推荐新手从这里开始熟悉。2.2 创建程序与指定包在SE80界面的左上角有一个下拉菜单默认是“程序”。点击下拉箭头选择“程序”。在旁边的输入框中输入你想要创建的程序名必须是以Z或Y开头的例如ZHELLO_WORLD。然后点击“创建”按钮。这时会弹出一个“创建程序”的对话框你需要填写标题 用中文或英文描述这个程序是干什么的例如“我的第一个ABAP程序 - 测试”。类型 选择“可执行程序”。这是最基础、可以直接用事务代码或SE38运行的程序类型。点击“保存”后最关键的一步来了指定包。系统会弹出“创建对象目录条目”的窗口。你不能直接保存到本地必须分配一个包。如果你知道项目使用的包名直接输入。如果是个人练习通常使用$TMP包。这是本地对象包里面的对象不会传输到其他系统如测试、生产系统仅供本地学习和测试使用。对于初学者强烈建议使用$TMP。指定包后点击“保存”你的程序就正式在系统中创建了但还没激活。2.3 编写、激活与运行代码现在ABAP编辑器界面会打开。你可以看到一个几乎空白的编辑区。在这里输入你的第一段ABAP代码REPORT ZHELLO_WORLD. DATA: lv_greeting TYPE string, lv_name TYPE string VALUE ‘ABAPer’. lv_greeting ‘Hello, ‘ lv_name ‘!’. WRITE: / ‘这是通过WRITE语句输出的:’, lv_greeting. WRITE: / ‘系统当前日期是:’, sy-datum. WRITE: / ‘系统当前时间是:’, sy-uzeit.代码解释REPORT ZHELLO_WORLD. 声明这是一个可执行报表名称是ZHELLO_WORLD。DATA: 声明数据对象的语句。这里声明了两个字符串变量lv_greeting和lv_name并给lv_name赋了初始值 ‘ABAPer’。注意使用了前面讲的LV_前缀。lv_greeting ... 字符串拼接操作ABAP使用来连接字符串。WRITE: 经典的输出语句/表示换行输出。sy-datum和sy-uzeit是SAP系统提供的全局字段分别代表系统日期和时间。写完代码后按Ctrl F2进行语法检查。如果底部状态栏显示“语法检查OK”就可以进行下一步。接下来按Ctrl F3激活程序。在SAP中只有激活的对象才能被运行。激活成功后状态栏会有提示。最后按F8运行程序。你会看到SAP GUI的输出界面显示你编写的问候语以及系统日期时间。3. 从“能跑”到“会写”理解基本语法结构第一个程序跑通了我们来拆解一下ABAP程序的基本骨架和核心语法点。这能帮你写出更结构化的代码。3.1 程序的基本结构一个典型的可执行程序报表通常包含以下部分虽然不是所有部分都强制但按这个顺序写会让代码清晰REPORT ZYOUR_PROGRAM_NAME. “ 1. 程序声明 *———————————————————————* * 数据定义区 *———————————————————————* DATA: ... “ 定义全局变量、内表、结构等 TABLES: ... “ 定义表工作区老式语法现在少用 SELECT-OPTIONS: ... “ 定义选择屏幕字段 PARAMETERS: ... “ 定义参数输入字段 *———————————————————————* * 初始化或启动事件 *———————————————————————* INITIALIZATION. “ 程序初始化时执行一次 ... “ 常用于给选择屏幕字段赋默认值 AT SELECTION-SCREEN. “ 选择屏幕输入处理 ... “ 用于输入校验 START-OF-SELECTION. “ 主数据处理开始最重要的事件块 ... “ 在这里写主要的业务逻辑取数、处理、计算 END-OF-SELECTION. “ 主数据处理结束 ... “ 通常在这里进行数据输出如调用ALV显示 TOP-OF-PAGE. “ 列表输出时的页眉 ... END-OF-PAGE. “ 列表输出时的页脚 ...对于初学者可以暂时聚焦在REPORT,DATA,START-OF-SELECTION和WRITE这几个部分。INITIALIZATION和AT SELECTION-SCREEN是在程序有选择屏幕用户输入界面时才需要深入。3.2 核心语法元素解析语句结束符 ABAP的语句以句点.结束。一行可以写多条语句但必须用句点分隔。现代风格建议一行一条语句更清晰。注释行注释以星号*开头整行都会被编译器忽略。内联注释在语句后面用双引号“开头引号后的内容被忽略。* 这是行注释说明下面要定义变量 DATA lv_amount TYPE p DECIMALS 2. “ 这是一个金额字段保留2位小数数据类型 ABAP有丰富的数据类型分为全局在数据字典中定义和本地。本地基本类型 直接在程序里用TYPE关键字定义。TYPE C 字符型如DATA lv_char TYPE c LENGTH 10.TYPE N 数值字符型纯数字组成的字符。TYPE I 整型。TYPE P 压缩小数型用于精确计算如金额。需要指定小数位DECIMALS。TYPE D 日期型YYYYMMDD格式。TYPE T 时间型HHMMSS格式。TYPE STRING 可变长度字符串现代ABAP推荐使用string代替固定长度的c。TYPE XSTRING 二进制字符串。全局数据类型 引用数据字典中的类型这是ABAP强大之处能确保与业务数据一致。TYPE matnr 物料号类型。TYPE bukrs 公司代码类型。TYPE belnr_d 凭证编号类型。用法DATA lv_matnr TYPE matnr.变量的声明与赋值DATA: lv_count TYPE i VALUE 0, “ 声明并赋初值 lv_price TYPE p DECIMALS 2. lv_count lv_count 1. “ 赋值 lv_price ‘123.45’. “ 注意从字符赋给数值类型会自动转换 “ 同时声明多个同类型变量 DATA: lv_name1 TYPE string, lv_name2 TYPE string. “ 或者用更简洁的写法 DATA: lv_name1, lv_name2 TYPE string.4. 避坑指南与最佳实践初探跑通第一个程序只是开始实际开发中会遇到各种问题。下面是一些初期最容易踩的坑和对应的处理思路。4.1 常见错误与排查语法检查通不过现象 按Ctrl F2后底部出现红色错误信息。排查检查句点 是否每条语句都正确以.结束复杂的语句如IF...ENDIF,LOOP...ENDLOOP是否完整检查关键字拼写DATA不是DATETYPE不是TYPESTYPES用于定义本地类型。检查数据类型 你引用的TYPE matnr是否存在如果系统提示找不到类型可能是类型名拼写错误或者这个类型需要从特定的数据字典结构中引入通常用TYPE或LIKE引用表字段即可。检查变量名 是否使用了ABAP的保留关键字变量名中是否包含非法字符如空格、连字符尽量使用下划线_连接单词。程序激活失败现象 按Ctrl F3激活时出错。排查依赖对象未激活 如果你的程序引用了一个自定义的数据类型或表而这个对象本身处于未激活或修改状态程序就无法激活。需要先去激活它。包权限问题 如果你尝试激活到非$TMP的传输包可能没有权限。确认包是否正确或联系系统管理员。对象被锁定 可能有其他人正在编辑同一个程序。可以尝试用SE03或SM12查看锁条目。程序运行没输出或输出不对现象 按F8运行后屏幕空白或显示的内容不符合预期。排查主逻辑位置 你的数据处理和输出语句如WRITE, 调用ALV的函数是否写在了START-OF-SELECTION或END-OF-SELECTION事件块里如果直接写在DATA声明后面它们可能不会被执行。变量未初始化 如果变量没有赋初值就直接使用其内容可能是初始值如数值型为0字符型为空导致逻辑错误。养成声明时赋默认值的习惯。选择屏幕逻辑 如果程序有PARAMETERS或SELECT-OPTIONS用户没有输入就执行你的主逻辑可能需要处理这种空值情况。4.2 给初学者的实操建议从$TMP包开始 在真正参与项目前所有练习都创建在$TMP包下。这能避免污染开发包也无需担心传输问题。多用语法检查 (CtrlF2) 和激活 (CtrlF3) 写几行代码就检查一次不要全部写完再检查这样定位错误更容易。善用系统帮助 (F1) 和代码补全 (CtrlSpace) 将光标放在任意关键字如DATA,WRITE或数据字典对象如matnr上按F1可以调出详细的官方文档。在编辑时按CtrlSpace可以触发代码补全。模仿与查阅 在SE38或SE80中输入SAP*或Z*等通配符可以查看很多SAP标准程序或他人写的程序。这是学习优秀代码风格和常用逻辑的绝佳途径。理解“激活”的意义 在SAP中激活相当于编译部署。未激活的对象只是一个“草稿”系统运行时不会识别。任何修改后必须重新激活才能生效。把命名规范记熟再把创建、编码、检查、激活、运行这个流程走顺ABAP入门的路就走通了一大半。接下来你就可以更深入地学习数据读取SELECT、条件判断IF/CASE、循环LOOP/DO/WHILE以及最重要的——内表操作了。记住前期基础打得越牢后面接触ALV、BDC、RFC、IDOC等复杂技术时才会越轻松。
返回列表