第一天、ABAP菜鸟进阶

这篇博客介绍了ABAP编程中的基础概念,包括如何定义变量、用户自定义类型、结构体以及内表。通过示例代码详细展示了如何创建和初始化这些数据结构,并讲解了它们在实际操作中的应用。例如,定义姓名、年龄等类型的变量,创建结构体用于存储员工信息,以及内表的创建与数据处理,强调了类型和字段长度预定义的重要性。
摘要由CSDN通过智能技术生成

一、定义变量和类型

新的开始,菜鸟ABAP从此起航。记录每天的进步和收获,坚持就一定会有收获。

1、定义基本变量和类型

示例代码如下:

REPORT  ZTEST_WJ_002.
*用户自定义类型
*要求:
*首先定义以下类型
*姓名 长度20的字符串。
*年龄 整数类型
*身份证号 长度为18的字符串。
*手机号 长度为11的数字
*性别 长度为1的字符
*身高(米) 1位整数,两位小数。

TYPES:TY_NAME(20) TYPE c.
TYPES:TY_AGE(2) TYPE n.
*可以用一个TYPES 用冒号连续定义多个类型。

TYPES:TY_SFZ(18) TYPE C,
      TY_MOBILE(11) TYPE N,
      TY_GENDER(1) TYPE C,
      TY_HIGHT(2) TYPE P DECIMALS 2.

DATA:name TYPE TY_NAME,
     age TYPE TY_AGE,
     sfz TYPE TY_SFZ,
     gender TYPE TY_GENDER,
     hight TYPE TY_HIGHT,
     mobile TYPE TY_MOBILE.
MOVE '张三' TO name.
age = 28.
sfz = '422802199401111234'.
gender = 'F'.
hight = '1.85'.
mobile = '15251632992'.

WRITE: '员工个人信息:',/,'姓名:',name,/,'性别:',gender,/,'年龄:',age,/,'身份站号:',sfz,
/,'电话:',mobile.

注意:类型的创建主要参考已经存在基本数据类型和表字段,在创建的时候同时可以预定义字段的长度。字段的定义主要有以下几种方式。注意在参考类型创建时用关键字TYPE,参考字段创建时,用关键LIKE.
①、参考基本类型定义。

DATA: g_l(10) TYPE c.

②、参考类型

DATA: g_l(10) TYPE TY_NAME.

③、参考字段

DATA: g_l(10) LIKE mseg-matnr.

2、定义结构体类型

示例代码如下:

REPORT  ZTEST_WJ_003.
TYPES:TY_NAME(20) TYPE c.
TYPES:TY_AGE(2) TYPE n.
*可以用一个TYPES 用冒号连续定义
TYPES:TY_SFZ(18) TYPE C,
      TY_MOBILE(11) TYPE N,
      TY_GENDER(1) TYPE C,
      TY_HIGHT(2) TYPE P DECIMALS 2.
*定义结构体类型
TYPES:
  BEGIN OF s_person,
       t_name TYPE TY_NAME,
       t_age TYPE TY_AGE,
       t_mobile TYPE TY_MOBILE,
       t_gender TYPE TY_GENDER,
       t_hight TYPE TY_HIGHT,
  END OF s_person.
  DATA:ty_person TYPE s_person.
  ty_person-t_name = '张三'.
  ty_person-t_gender = '男'.
  ty_person-t_age = '28'.
  ty_person-t_mobile = '15251632992'.
  ty_person-t_hight = '1.85'. WRITE:ty_person-t_name.
*结构的嵌套
TYPES:BEGIN OF s_student,
          t_person TYPE s_person,
          t_id(8) TYPE n,
          t_school(20) TYPE c,
END OF s_student.
DATA:ty_student TYPE s_student.
   ty_student-t_person = ty_person.

WRITE:ty_student-t_person-t_name.
ty_student-t_person-t_name = '张三1'.
write:ty_student-t_person-t_name.
*验证结构赋值
TYPES:BEGIN OF s_sname,
    t_name TYPE  TY_NAME,
    t_age TYPE TY_AGE,
  END OF s_sname.
DATA:ts_name TYPE s_sname.
DATA ts_person TYPE s_person.
ts_name-t_name = '张三4'.
IF ts_name-t_name = '张三4'.
  ts_name-t_name = 'WJ4'.
ENDIF.
* ts_name-t_name = '张三4'.
move-corresponding ts_name to ts_person.
WRITE:/,'ts_name:',ts_name,/,'ts_person:',ts_person-t_name.

注意: 在定义数据对象的时候,必先确定数据类型。对于类型的创建可以参考多种方式,比如参考已经存在的表的字段,直接创建基于基本数据类型的类型,参考之前定义的属性字段,还可以预定义类型的长度,这在对某些固定长度的字段中显得非常有必要,比如电话号码、身份证等信息,就可以在类型中预定义数据的长度。结构的创建主要有以下几种方式:
①、直接创建,结构体类型的成员为基本数据类型或为参考基本数据创建的数据类型。

TYPES:TY_NAME(20) TYPE c.
TYPES:TY_AGE(2) TYPE n.
*可以用一个TYPES 用冒号连续定义
TYPES:TY_SFZ(18) TYPE C,
      TY_MOBILE(11) TYPE N,
      TY_GENDER(1) TYPE C,
      TY_HIGHT(2) TYPE P DECIMALS 2.
*定义结构体类型
TYPES:
  BEGIN OF s_person,
       t_name TYPE TY_NAME,
       t_age TYPE TY_AGE,
       t_mobile TYPE TY_MOBILE,
       t_gender TYPE TY_GENDER,
       t_hight TYPE TY_HIGHT,
  END OF s_person.
  DATA:ty_person TYPE s_person.

②、参考已存在表对象创建,这也可以被称为创建工作区。

DATA wa_scarr TYPE scarr.

3、内表的创建和处理

示例代码如下:

REPORT  ZTEST_WJ_005.
*定义内表
TYPES:BEGIN OF ty_person,
      name(10) TYPE c,
      sfz(18) TYPE n,
      mobile(11) TYPE n,
      END OF ty_person.
DATA it_person TYPE TABLE OF ty_person.
*利用类型定义工作区
DATA wa_person_1 TYPE ty_person.
DATA wa_person_2 LIKE LINE OF it_person.
DATA it_person1 TYPE TABLE OF mseg.
DATA wa_person1 TYPE mseg.
*用内表取出数据
DATA wa_scarr TYPE scarr.
DATA it_scarr TYPE TABLE OF scarr.
SELECT *
  FROM scarr
  INTO CORRESPONDING FIELDS OF TABLE it_scarr.
IF sy-subrc = 0.
LOOP AT it_scarr
  INTO wa_scarr.
WRITE:wa_scarr-CARRID,
      wa_scarr-CARRNAME,
      wa_scarr-CURRCODE,
      wa_scarr-url,/.
ENDLOOP.
ELSE.
  WRITE:'Data not found!'.
ENDIF.

注意: 内表的创建方式多样, 比较常见的方式有以下几种:
①、参考已经存在的表创建

DATA it_scarr TYPE TABLE OF scarr.

②、参考结构体类型创建

TYPES:BEGIN OF ty_person,
      name(10) TYPE c,
      sfz(18) TYPE n,
      mobile(11) TYPE n,
      END OF ty_person.
DATA it_person TYPE TABLE OF ty_person.

对于内表的处理方式,首先遍历工作区,工作区相当于结构变量。遍历内表行,每次取值至工作区单独处理。

30天学会ABAP程序 学习ABAP并不难,有人说SAP系统重在管理思想,不在技术,通常对有编程经验的读者不用任何培训参考一些相关资料就可立即上手. 简单介绍下ABAP/4的一些特征: 1.和SAP紧密结合,尤其在开发报表方面,坦率地讲,除了和SAP集成的好处,.我定认为ABAP在报表开发上比Crystal report Tool要高效简单. 2.和VB一样 ,ABAP是解释形的,如读者精通VB,学习ABAP应该豪不费力,倒是既然SAP是企业管理解决方案,ABAPer必须对企业管理流程熟悉. 解释性的另一好处是可以很好跟踪程序逻辑(使用/H),这对了解业务逻辑的实和追踪错误很有效. 和VB不同的是,VB跟踪时允许程序运行指针随意往回或往全拉而ABAP程序去不行, 但是ABAP程序允许在运行时修改变量的值,这是编译程序不能做到的. 当然通常编译比解释执行的速度会更快. ABAP程序执行并不直接读取源代码,而是执行内部经过“生成”的描述,对于ABAP/4字典的修改激活后将触发内部描述的重新生成,如程序并没激活就执行原版本,或者出现错误(程序没激活可能造成ABAP Dumping ABAP). 3.在对数据库处理方面,除了可直接执行SQL(使用native sql,缺点是错误处理很难控制,相当于有开发环境将SQL 语句直接传给DB去执行),SAP在ABAP开发环境层还提供了一套Open SQL访问底层数据库. 4. 程序员都知道Windows平台下开发都支持事件驱动,Windows系统本身也支持事件驱动,ABAP也提供了事件驱动,这表现在Dialog编程方面,但是ABAP在此方面并不强,而且相对讲也比较难于掌握(在后面会讨论). 5.基于面向对象的风靡,ABAP在此方面也有相当反应,在SAP强大的软件包中提供了大量可重复使用的程序,读者也可定义类并使用它快速建立新的对象. 6.类似Java,ABAP开发的程序能运行于任何操作系统(Java有Java虚拟机,ABAP也有ABAP processor),多种数据库(比如在ABAP字典中实现了透明表对各种底层数据库表的映射,这样在ABAP层看到的透明表就和具体数据库无关),各种网络系统.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值