ABAP——内表与工作区
一、基本概念
- 内表 ,内表实际上是一个临时存储空间,有效范围是当前程序,内表存放多条记录,其中,内表分为无表头内表与有表头内表;
- 工作区 ,实际上就是一个结构,工作区存放一条记录;
二、定义
types: begin of typ_01,
name type char20, "姓名
sex type char5, "性别
age type i, "年龄
end of typ_01.
1、内表的定义
1)无表头内表的定义
方法1:结构定义内表
data gt_01 type [Standard] table of typ_01.
方法2:内表定义内表
data gt_02 like TABLE OF typ_01.
方法2:工作区定义内表
DATA gt_03 like TABLE OF work_area_1.
2)带表头内表的定义
*法1
data gt_04 type table of typ_01 WITH HEADER LINE.
*法2
data gt_05 like TABLE OF typ_01 WITH HEADER LINE.
*法3
DATA gt_06 like TABLE OF work_area_1 WITH HEADER LINE.
2、工作区的定义
方法1:结构定义工作区
data gs_01 type typ_01.
方法2:内表定义工作区
data gs_02 like line of gt_01.
方法3:工作区定义工作区
data gs_03 like work_area_2.
三、对内表中的数据进行操作
1、对无表头的内表进行操作
1)添加数据-需要借助工作区
gs_01-name = '李四'.
gs_01-sex = '女'.
gs_01-age = '23'.
append语句
append gs_01 to gt_01. "追加数据
insert语句
insert gs_01 into gt_01 [index 1]."插入数据到指定行
2)查询内表数据
loop at gt_01 into gs_01.
write: / gs_01-name,gs_01-sex,gs_01-age.
endloop.
2、向有表头的内表中添加数据
1)添加数据-直接添加即可,无需借助工作区
gt_04-name = '李四'.
gt_04-sex = '女'.
gt_04-age = '23'.
append gt_02.
2)查询内表数据
LOOP AT gt_04.
write: / gt_04-name.
ENDLOOP.
ABAP——屏幕
1、创建程序
1)在Tcode输入se38,点击回车,输入程序名称(程序名必须以Z开头),点击创建;
2)在弹出的弹窗中输入简短描述(Title),类型选择“可执行程序”,并点击保存;
3)若程序需要传输至其他环境,则输入开发类(包)后保存,若不需要,选择本地对象 即可;
2、绘制设计屏幕
1)系统进入程序设计界面,点击箭头所指按钮,会在左侧出现创建的程序名;
2)右击程序名,选择“创建”,选择“屏幕”,需要在弹出的弹框中输入屏幕编号(以0100为例),点击确定,右侧会出现三个小窗口,在“属性”窗口里输入简短描述,在格式为OK的一行中的名称填入OK_CODE,点击逻辑流,点击格式化,会出现Screen Painter;
3)点击左侧列表在屏幕中添加控件,双击控件,会弹出属性框,设置属性,若控件显示红色,则表示未正确设置,特别注意按钮与输入输出框的属性:
①、按钮实现保存功能时,一定要写上按钮的功能码,功能码一定要大写,不要选择功能类型;
②、按钮实现退出功能时,一定要写上按钮的功能码,功能码一定要大写,功能类型一定要选择E;
③输入输出框的name一定要记得,你设置的name起到一个临时变量的作用,输入的内容会暂时保存在你设置的name变量中。
4)点击逻辑流进入逻辑流窗口并进行一下操作;
在逻辑流窗口的最后中输入“Module Cancel At EXIT-command”,双击该语句中的Cancel字段,在弹出的窗口中点“是”,系统会在主程序中创建相应的“Module Cancel input”模块,与此类似,去掉注释后,双击“Module User_command_0100.”中的User_command_0100,在弹出的窗口中点是,会在主程序中生成Module User_command_0100 Input模块,具体代码见主程序代码。
5)以上步骤完成后,检查,保存,激活,关闭Screen Painter,
3、创建数据库(自行百度)
在创建数据表的过程中要注意字段名的一致性。
4、完整主程序代码如下所示
*在主程序中声明以下变量:
TYPES:BEGIN OF str_01,
co_id type char30,
co_name type char30,
co_time type char30,
co_addr type char30,
co_ente type char30,
END OF str_01.
*内表
DATA gt TYPE TABLE OF str_01.
*工作区
DATA gs TYPE str_01.
*变量OK_CODE与SAVE_OK:其中OK_code是用来记录功能码的
DATA OK_CODE TYPE SY-UCOMM.
DATA SAVE_OK TYPE SY-UCOMM.
*屏幕中输入输出框的name
data INPUT_00 TYPE CHAR30.
DATA INPUT_01 TYPE CHAR30.
DATA INPUT_02 TYPE CHAR30.
DATA INPUT_03 TYPE CHAR30.
DATA INPUT_04 TYPE CHAR30.
*调用屏幕
START-OF-SELECTION.
CALL SCREEN '0100'.
*逻辑流中相应的模块的代码
*退出屏幕模块
*&---------------------------------------------------------------------*
*& Module CANCEL INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE CANCEL INPUT.
LEAVE PROGRAM.
ENDMODULE.
*保存按钮模块
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*实现:将输入框中的内容保存到内表中
MODULE USER_COMMAND_0100 INPUT.
SAVE_OK = OK_CODE.
CLEAR OK_CODE.
*若SABE_OK 与保存按钮的功能码相同,则将输入框中的内容保存到工作区中
if save_ok = 'SAVE'.
gs-co_id = INPUT_00.
gs-co_name = INPUT_01.
gs-co_time = INPUT_02.
gs-co_addr = INPUT_03.
gs-co_ente = INPUT_04.
*将工作区中的数据保存到内表中
APPEND gs to gt.
*将工作区中的内容保存到数据表中
INSERT INTO zsscompany VALUES gs.
*成功执行后弹出success字样
MESSAGE 'success' TYPE 'I'.
endif.
ENDMODULE.
依次点击“检查”-“保存”-“激活”-“直接处理”,执行程序。