读书人

ABAP 札记 01

发布时间: 2012-12-21 12:03:49 作者: rapoo

ABAP 笔记 01

*&---------------------------------*
*& Report? Z10_P02
*& Author: TianJun GZ010
*& Date:2011/04/21
*& ABAP NOTE 1
*&---------------------------------*

*(1)在代码最开始的时候,需要制定一个REPORT
REPORT? z10_p02.

*(2)如果下面有用到t001,则需要用TABLES来声明,或者用INTO指定将数据存到另一个地方。
* 这里的t001要查资料,了解一下table work area,和ABAP/4 资料档(Dictionary Object)
TABLES t001.

SELECT * FROM t001.
*? WRITE: / t001-mandt.
ENDSELECT.

*(3)下面用到的begin of ... end of.然后用DATA声明后,可以直接使用,在ABAP里面存放方式是Structure,只是这样还不能将其
*???? 声明为一种type,然后复用。
DATA: BEGIN OF tianjuntest,
name(10) TYPE c,
address(20) TYPE c,
END OF tianjuntest.

tianjuntest-name = 'tianjun'.
tianjuntest-address = 'shenzhen city'.

*(4)下面先用TYPES将这个Strucutre定义为TYPE,后面就可以用DATA直接新建出此TYPE的实例,类似java里面的class与实例。
TYPES: BEGIN OF test2,
age TYPE i,
birthmonth TYPE d,
birthday TYPE d,
END OF test2.

DATA cooltest TYPE test2.
cooltest-age = 26.
cooltest-birthmonth = '10'.
cooltest-birthday = '03'.
WRITE: '你的年龄:', cooltest-age, / '你的出生月:',cooltest-birthmonth, / '你的出生日:',cooltest-birthday.

*(5)注意下面 LIKE 与 LIKE TABLE OF 的区别。
*???? 这个时候的LIKE,tabletest会成为一个Structure,flat structure; 注意:Structure里面只能放唯一一批数据,类似java中的class 属性。
*???? 而这个时候的LIKE TABLE OF,tabletest2会成为一个table,standard table; 注意:table在这里可以记录多条数据,就是一个table概念。
*???? 1.1 如果要添加进Standard table一条数据记录,可以使用配套字段的Structure,设置好数据,传输方法: APPEND XXX(Structure) TO XXX(Table)。
*???? 1.2 方法二是用 XXX LIKE LINE OF XXX(table name),方法见下面代码。并且这个table只能是internal table的时候,like line of 才可以使用,查资料看
*???????? 这里说的internal table的具体含义(这里可以确定一点,只要是程序里面通过LIKE TABLE OF出来)
*???? 2. 注意只要APPEND TO一次数据,TABLE就会增加一条新记录。
DATA: tabletest LIKE cooltest.
DATA: tabletest2 LIKE TABLE OF cooltest.
tabletest-age = 22.
tabletest-birthday = '329'.
APPEND tabletest TO tabletest2.
tabletest-birthmonth = '32'.
APPEND tabletest TO tabletest2.
tabletest-birthmonth = '12'.

DATA: linetest LIKE LINE OF tabletest2.
linetest-age = 44.
linetest-birthday = '33'.
APPEND linetest TO tabletest2.
CLEAR linetest.
linetest-age = 26.
linetest-birthmonth = '11'.
APPEND linetest TO tabletest2.
CLEAR linetest.

*(6)通过SELECT语句可以遍历table内容,可以操作每条数据。
DATA: BEGIN OF test4,
char1 LIKE t001-mandt,
char2 LIKE t001-bukrs,
char3 LIKE t001-periv,
END OF test4.


SELECT mandt bukrs periv INTO test4 FROM t001.
*write: / test4-char3.
ENDSELECT.

*(7)将T001表导入internal table的方法。关注一下work area的含义。
*???? 如果不加select ... into table 中的table,会报错"You cannot use an internal table as a work area."
DATA: stable1 LIKE TABLE OF test4.
SELECT mandt bukrs periv INTO TABLE stable1 FROM t001.

*(8)可以将internal table 做排序,用Sort XXX(table name) by XXX(table 字段).
SORT stable1 BY char2.

*(9)可以通过LOOP AT XXX(internal table name) into XXX(line of table)来将表记录读出来做处理。
*???? CASE的句型:
*???? CASE XXXX.
*???????? WNEH 'test'.
*??????????? to do...
*????????? WHEN OTHERS.
*??????????? to do...
*????? ENDCASE.
DATA: linetest2 LIKE LINE OF stable1.
LOOP AT stable1 INTO linetest2.
? CASE linetest2-char3.
??? WHEN 'K4'.
*????? WRITE: / 'this is K4'.
??? WHEN OTHERS.
*????? WRITE: / 'none'.
? ENDCASE.

*(10)IF的写法,备注:不等于的三种写法:<> , >< , NE; 等于2种写法: = , EQ.
? IF linetest2-char3 <> 'K4'.
??? WRITE: / 'this is not k4'.
? ENDIF.
ENDLOOP.

?

*CONDENSE ls_range-low NO-GAPS.? 去掉前后的空格,测试一下即可。

读书人网 >编程

热点推荐