ABAP创建内表的方法
- 格式:docx
- 大小:13.00 KB
- 文档页数:2
ABAP中域(Domain)、数据元素(Data Element)、表(Table)的创建一、基本概念 (2)1.域Domain (2)2.数据元素Data Element (2)3.字段Field (2)4.表Table (2)二、域、数据元素、字段、表的关系 (2)三、建表准备 (3)四、维护数据库表 (4)1.创建域:ZXB (4)2.创建数据元素 (7)(1)创建引用域的数据元素Z_GENDER (7)(2)创建不引用域的数据元素Z_GRADE (9)3.创建表——学生信息表ZTT_STUDENT (11)(1)维护表格基础信息:描述、提交类、是否允许维护等 (11)(2)维护表格的字段信息——参照数据元素 (12)(3)维护表格的字段信息——不参照数据元素 (12)(4)维护表格的主键 (13)(5)维护表格的技术信息 (14)(6)维护数据类型为QUAN或者CURR的字段的参照 (15)(7)激活保存表格 (16)(8)设置表格的增强类别 (18)(9)维护字段的搜索帮助、索引以及表格维护生成器等其他 (19)4.维护表的数据记录 (19)(1)通过表格数据浏览器进行维护 (19)(2)通过表格维护的实用程序进行数据记录维护 (20)(3)通过表格维护工具的数据浏览器进行维护 (21)5.创建表——学生成绩表ZTT_SCORE (23)一、基本概念1.域Domain域是用来描述一个字段的技术属性的集合,包括数据类型,数据长度,小数点位数以及取值范围等。
具有以上技术属性的相同定义的字段可以包含进一个域,那么当域的属性定义发生改变时,一旦域被激活,所有引用它的字段的属性都会对应进行更改。
2.数据元素Data Element数据元素是一个数据的类型,包含了这个元素的语义属性,它包含了一些非结构化的数据对象(如表的字段、结构的字段和变量等)的技术属性(域)、屏幕信息(比如字段长、中、短、头标签等),是能够被引用的数据类型的最小单元,比如表或者结构的字段可以参考数据元素,这样可以保证这类特性的数据一致性,同时在ABAP中,数据元素也可以直接用关键字TYPE进行引用,从数据定义的角度来看,数据元素与ABAP最基本的数据类型(如C、I、F等)是同一个层面上。
ABAP中域(Domain)、数据元素(Data Element)、表(Table)的创建一、基本概念 (2)1.域Domain (2)2.数据元素Data Element (2)3.字段Field (2)4.表Table (2)二、域、数据元素、字段、表的关系 (2)三、建表准备 (3)四、维护数据库表 (4)1.创建域:ZXB (4)2.创建数据元素 (7)(1)创建引用域的数据元素Z_GENDER (7)(2)创建不引用域的数据元素Z_GRADE (9)3.创建表——学生信息表ZTT_STUDENT (11)(1)维护表格基础信息:描述、提交类、是否允许维护等 (11)(2)维护表格的字段信息——参照数据元素 (12)(3)维护表格的字段信息——不参照数据元素 (12)(4)维护表格的主键 (13)(5)维护表格的技术信息 (14)(6)维护数据类型为QUAN或者CURR的字段的参照 (15)(7)激活保存表格 (16)(8)设置表格的增强类别 (18)(9)维护字段的搜索帮助、索引以及表格维护生成器等其他 (19)4.维护表的数据记录 (19)(1)通过表格数据浏览器进行维护 (19)(2)通过表格维护的实用程序进行数据记录维护 (20)(3)通过表格维护工具的数据浏览器进行维护 (21)5.创建表——学生成绩表ZTT_SCORE (23)一、基本概念1.域Domain域是用来描述一个字段的技术属性的集合,包括数据类型,数据长度,小数点位数以及取值范围等。
具有以上技术属性的相同定义的字段可以包含进一个域,那么当域的属性定义发生改变时,一旦域被激活,所有引用它的字段的属性都会对应进行更改。
2.数据元素Data Element数据元素是一个数据的类型,包含了这个元素的语义属性,它包含了一些非结构化的数据对象(如表的字段、结构的字段和变量等)的技术属性(域)、屏幕信息(比如字段长、中、短、头标签等),是能够被引用的数据类型的最小单元,比如表或者结构的字段可以参考数据元素,这样可以保证这类特性的数据一致性,同时在ABAP中,数据元素也可以直接用关键字TYPE进行引用,从数据定义的角度来看,数据元素与ABAP最基本的数据类型(如C、I、F等)是同一个层面上。
ABAP基本语法学习关键语句的写法内表建立过程:1、声明一个结构体2、用声明好的结构体作为工作区,声明一个内表内表名称like standard table of 结构体名称,内表名称like sorted table of 结构体名称,内表名称like harshed table of 结构体名称。
后面可以用到with 选项来进行关键字的声明。
基本语法如下:DATA itab { {TYPE tabkind OF [REF TO] type}| {LIKE tabkind OF dobj} }[WITH key] [INITIAL SIZE n][WITH HEADER LINE][VALUE IS INITIAL][READ-ONLY].DATA rtab {TYPE RANGE OF type}|{LIKE RANGE OF dobj}[INITIAL SIZE n][WITH HEADER LINE][VALUE IS INITIAL][READ-ONLY].此语句可以定义一个范围表,在操作数据库时可以用来作为判断数据选择的条件描述。
3、向内表中插入数据,插入数据可以用insert数据into内表语句或者是append数据to内表语句。
可以插入整个内表到另一内表insert lines of 内表名称into table 另一内表名称。
亦可以进行累加插入:collect 数据into 内表名称。
相同的数据进行累积。
4、修改内表数据,利用modify 关键字,modify 内表名称from 数据(用结构体表示的数据)。
可以修改多行,modify 内表名称from 数据transporting 关键字where 条件。
5、读内表数据的几种操作方法:用Include来构造一个结构体INCLUDE { {TYPE struc_type} | {STRUCTURE struc} }[AS name [RENAMING WITH SUFFIX suffix]].TYPES: BEGIN OF t_day,work TYPE c LENGTH 8,free TYPE c LENGTH 16,END OF t_day.DATA BEGIN OF week.INCLUDE TYPE t_day AS monday RENAMING WITH SUFFIX _mon.INCLUDE TYPE t_day AS tuesday RENAMING WITH SUFFIX _tue.INCLUDE TYPE t_day AS wednesday RENAMING WITH SUFFIX _wed. DATA END OF week.可以用两种方式来访问结构体的内容:1、直接用结构体的名称来访问:week-monday-work, week-monday-free, week-tuesday-work2、用重新命名的后缀名字来访问:week-work_mon, week-free_mon, week-work_tue类对象的定义方式:CLASS class DEFINITION [class_options].[PUBLIC SECTION.[components]][PROTECTED SECTION.[components]][PRIVATE SECTION.[components]]ENDCLASS.类对象的实现方式:CLASS class IMPLEMENTATION....METHOD ......ENDMETHOD....ENDCLASS.类对象的继承:CLASS class DEFINITIONLOCAL FRIENDS class1 class2 ...intf1 intf2 ...CLASS class DEFINITION { {DEFERRED [PUBLIC]} | LOAD }.[PUBLIC][INHERITING FROM superclass][ABSTRACT][FINAL][CREATE {PUBLIC|PROTECTED|PRIVATE}][SHARED MEMORY ENABLED][FOR TESTING][[GLOBAL] FRIENDS class1 class2 ...intf1 intf2 ...].Deferred 关键字可以预先声明一个未被定义的类。
动态内表的创建和使用主要有以下几点:1.动态内表的创建,首先要定义动态结构,然后再根据定义的动态结构利用系统一个标准的method:”cl_alv_table_create=>create_dynamic_table“生成动态内表。
2.动态内表的赋值,遍历动态结构,获取指定的字段,然后给指定的字段赋值。
3.动态内表的读取显示,与赋值相似,遍历动态结构,获取指定的字段,然后读取对应字段的值。
下面是具体的代码实例:①定义所需的系统变量。
FIELD-SYMBOLS:<dyn_table> TYPE STANDARD TABLE,"动态内表<dyn_wa> TYPE ANY,"动态内表的工作区<dyn_field> TYPE ANY."指向动态内表工作区某一字段的指针DATA:dy_table TYPE REF TO data,dy_line TYPE REF TO data,it_structure TYPE lvc_t_fcat,”存储动态内表列的内表,其中的每一行代表动态内表的一列。
wa_structure TYPE lvc_s_fcat.“lvc_t_fact的工作区。
②通过lvc_t_fact构建动态内表的列:FORM setstructrue USING value(p_fname) TYPE char6value(p_col) TYPE int4value(p_tab) TYPE char10value(p_fld) TYPE char6.wa_structure-fieldname = p_fname." 列名wa_structure-col_pos = p_col.“列的顺序wa_structure-ref_table = p_tab.”参照表wa_structure-ref_field = p_fld.“参照字段APPEND wa_structure TO it_structure.ENDFORM. "setstructrue③通过lvc_t_fact构建创建动态内表给dy_table:FORM create_dynamic_table .CALL METHOD cl_alv_table_create=>create_dynamic_table"类静态方法EXPORTINGit_fieldcatalog = it_structureIMPORTINGep_table = dy_table.ASSIGN dy_table->* TO <dyn_table>.ENDFORM. " CREATE_DYNAMIC_TABLE④给动态内表赋值:FORM setdata .DATA:wa_new_line TYPE REF TO data.DATA lv_tol TYPE wertv12.CREATE DATA wa_new_line LIKE LINE OF <dyn_table>.ASSIGN wa_new_line->* TO <dyn_wa>.”让<dyn_wa>代表指向动态内表的工作区LOOP AT gt_coep2.CLEAR <dyn_wa>.READ TABLE it_structure INTO wa_structure INDEX 4.“获取it_structure的第四行,即动态内表的第四列ASSIGN COMPONENT wa_structure-fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.”当<dyn_field>指向工作区中的第四个字段PERFORM removezero USING gt_coep2-kstar.<dyn_field> = gt_coep2-kstar.“通过给field-symbol赋值来达到给工作区中第四个字段赋值的作用。
ABAP中的引用表,又称为内表,是程序执行时临时存在于内存中的表。
在ABAP中,我们可以通过不同的关键字来创建和操作引用表,比如使用SELECT、LOOP等关键字。
关于引用的创建,我们可以使用“SELECT ... INTO TABLE”语句从底表(硬盘上的数据库表)中查询数据,并将查询结果存储到内表中。
此外,我们还可以使用“APPEND ... TO TABLE”语句将结构的数据插入到内表中。
在内表中,我们可以使用不同的方法来操作数据。
例如,我们可以在LOOP语句中使用MODIFY关键字来一行一行地更新数据。
另外,我们还可以使用“FOR ALL ENTRIES IN”语句来关联底表和内表,并从内表中获取值。
此外,ABAP还提供了许多其他有用的功能来处理内表。
例如,我们可以使用二分法查询(BINARY SEARCH)来提高查询效率,如果满足条件则执行某些代码(IF ... ENDIF语句),还可以在循环中执行特定的代码(AT END OF field ... ENDAT语句)。
总的来说,ABAP中的引用表是一种非常有用的工具,可以帮助我们高效地处理和操作数据。
ABAP动态内表创建赋值DATA:it_structure TYPE lvc_t_fcat,dy_line TYPE REF TO data,dy_table TYPE REF TO data.FIELD-SYMBOLS: <dyn_wa> TYPE ANY,<dyn_table> TYPE table."根据动态内表结构,创建动态内表FORM create_dy_table USING p_structure.CALL METHOD cl_alv_table_create=>create_dynamic_tableEXPORTINGit_fieldcatalog = p_structure "USING it_structureIMPORTINGep_table = dy_table.ASSIGN dy_table->* TO <dyn_table>.ENDFORM."给动态内表赋值FORM get_data.CREATE DATA dy_line LIKE LINE OF <dyn_table>.ASSIGN dy_line->* TO <dyn_wa>.LOOP AT gt_itab INTO gs_itab.MOVE-CORRESPONDING gs_itab TO <dyn_wa>.APPEND <dyn_wa> TO <dyn_table>.ENDLOOP.ENDFORM.ASSIGN 分配FIELD-SYMBOLS:<fs>.DATA:str(20) TYPE c VALUE 'Output String',name(20) TYPE c VALUE 'STR'."静态分配:编译时就知道要分配的对象名ASSIGN name TO <fs>."结果是<fs>与name变量等同"通过变量名动态访问变量ASSIGN (name) TO <fs>."结果是是<fs>的值为str变量值"通过索引分配LOOP AT <dyn_table> ASSIGNING <dyn_wa> .ASSIGN COMPONENT col OF STRUCTURE <dyn_wa> TO <fs3>.endloop.通过字段名动态的访问结构成员COMPONENT <f2>OF STRUCTURE TO <f3>.。
[SAPABAP开发技术总结]内表操作内表是每个ABAP开发⼈员都必须懂的,数据从R3取出来后,就是放在内表⾥处理的,其实就是Java中的集合框架,只是没有那么多不同数据结构的内表,⽬前只有标准、排序、Hash三种,这还是新的语法,⽼的只有个标准的,关于内表这⽅⾯的定义、性能,以后我专贴⼀篇⽂章吧。
这⾥只是对内表的常⽤操作,这也是项⽬中⽤得最多的点!3.内表3.4.适合所有类型的内表操作COLLECT [<wa>INTO] <> 将具有相同关键字段值的⾏中同名的数字字段的值累计到⼀条记录上,只有⾮表关键字段被累加;当在内表中找不到指定的被累加⾏时,COLLECT语句的功能与APPEND语句是⼀样的,即将⼀个⼯作区的内容附加到itab内表中。
使⽤COLLECT操作的内表有⼀个限制,即该的⾏结构中,除了表键字段以外的所有字段都必须是数字型(i、p、f)INSERT <wa> INTO TABLE <itab>."单条插⼊INSERT LINES OF <itab1> [FROM <n1>] [TO <n2>] INTO TABLE<itab2>"批量插⼊向UNIQUE 的排序表或哈希表插⼊重复的数据时,不会抛异常,但数据不会被插⼊进去,这与是不⼀样的"只要根据关键字或索引在内表中读取到相应数据,不管该数据⾏是否与COMPARING 指定的字段相符,都会存储到⼯作区<itab> WITH KEY{<k1> = <f1> ... <kn> = <fn>...[]}INTO <wa> [COMPARING <f1><f2> ...|ALL FIELDS][TRANSPORTING <f1><f2> ...|ALL FIELDS|NO FIELDS]READ TABLE <itab> FROM <wa>…以表关键字为查找条件,条件值来⾃<wa>COMPARING:系统根据<k1>...<kn>(关键字段)读取指定的单⾏与⼯作区<wa>中的相应组件进⾏⽐较。
A B A P动态内表的使用动态内表的创建和使用主要有以下几点:1.动态内表的创建,首先要定义动态结构,然后再根据定义的动态结构利用系统一个标准的method:”cl_alv_table_create=>create_dynamic_table“生成动态内表。
2.动态内表的赋值,遍历动态结构,获取指定的字段,然后给指定的字段赋值。
3.动态内表的读取显示,与赋值相似,遍历动态结构,获取指定的字段,然后读取对应字段的值。
下面是具体的代码实例:①定义所需的系统变量。
FIELD-SYMBOLS:<dyn_table> TYPE STANDARD TABLE,"动态内表<dyn_wa> TYPE ANY,"动态内表的工作区<dyn_field> TYPE ANY."指向动态内表工作区某一字段的指针DATA:dy_table TYPE REF TO data,dy_line TYPE REF TO data,it_structure TYPE lvc_t_fcat,”存储动态内表列的内表,其中的每一行代表动态内表的一列。
wa_structure TYPE lvc_s_fcat.“lvc_t_fact的工作区。
②通过lvc_t_fact构建动态内表的列:FORM setstructrue USING value(p_fname) TYPE char6value(p_col) TYPE int4value(p_tab) TYPE char10value(p_fld) TYPE char6.wa_structure-fieldname = p_fname." 列名wa_structure-col_pos = p_col.“列的顺序wa_structure-ref_table = p_tab.”参照表wa_structure-ref_field = p_fld.“参照字段APPEND wa_structure TO it_structure.ENDFORM. "setstructrue③通过lvc_t_fact构建创建动态内表给dy_table:FORM create_dynamic_table .CALL METHOD cl_alv_table_create=>create_dynamic_table"类静态方法EXPORTINGit_fieldcatalog = it_structureIMPORTINGep_table = dy_table.ASSIGN dy_table->* TO <dyn_table>.ENDFORM. " CREATE_DYNAMIC_TABLE④给动态内表赋值:FORM setdata .DATA:wa_new_line TYPE REF TO data.DATA lv_tol TYPE wertv12.CREATE DATA wa_new_line LIKE LINE OF <dyn_table>.ASSIGN wa_new_line->* TO <dyn_wa>.”让<dyn_wa>代表指向动态内表的工作区LOOP AT gt_coep2.CLEAR <dyn_wa>.READ TABLE it_structure INTO wa_structure INDEX 4.“获取it_structure的第四行,即动态内表的第四列ASSIGN COMPONENT wa_structure-fieldname OF STRUCTURE <dyn_wa> TO <dyn_field>.”当<dyn_field>指向工作区中的第四个字段PERFORM removezero USING gt_coep2-kstar.<dyn_field> = gt_coep2-kstar.“通过给field-symbol赋值来达到给工作区中第四个字段赋值的作用。
ABAP动态⽣成内表的三种⽅法原⽂链接:https:///zhongguomao/article/details/77474375动态内表的创建和使⽤主要有以下⼏点:1.动态内表的创建,⾸先要定义动态结构,然后再根据定义的动态结构利⽤系统⼀个标准的method:”cl_ALV_table_create=>create_dynamic_table“⽣成动态内表。
2.动态内表的赋值,遍历动态结构,获取指定的字段,然后给指定的字段赋值。
3.动态内表的读取显⽰,与赋值相似,遍历动态结构,获取指定的字段,然后读取对应字段的值。
⽅法1:TYPE-POOLS:ABAP.PARAMETERS p_name TYPE tabname.DATA lt_table TYPE TABLE OF dfies. "字段结构表DATA ls_table TYPE dfies.DATA lr_struc TYPE REF TO cl_abap_structdescr.DATA lr_table TYPE REF TO cl_abap_tabledescr.DATA lr_type TYPE REF TO cl_abap_typedescr.DATA lr_data TYPE REF TO cl_abap_datadescr.DATA lt_comp TYPE abap_component_tab.DATA ls_comp LIKE LINE OF lt_comp.DATA dyn_wa TYPE REF TO data.DATA dyn_table TYPE REF TO data.DATA l_string TYPE string.FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,<dyn_wa> TYPE ANY.*1.获取表中的字段结构CALL FUNCTION'DDIF_NAMETAB_GET'EXPORTINGtabname = p_nameTABLESdfies_tab = lt_tableEXCEPTIONSnot_found = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.LOOP AT lt_table INTO ls_table.CONCATENATE ls_table-tabname '-' ls_table-fieldname INTO l_string.ls_comp-name = ls_table-fieldname.*读取字段类型CALL METHOD cl_abap_datadescr=>describe_by_nameEXPORTINGp_name = l_stringRECEIVINGp_descr_ref = lr_typeEXCEPTIONStype_not_found = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.ls_comp-type ?= lr_type.APPEND ls_comp TO lt_comp.CLEAR ls_comp.ENDLOOP.*根据字段⽬录创建动态结构类型CALL METHOD cl_abap_structdescr=>createEXPORTINGp_components = lt_compRECEIVINGp_result = lr_struc.*根据动态结构创建动态内表类型CALL METHOD cl_abap_tabledescr=>createEXPORTINGp_line_type = lr_strucRECEIVINGp_result = lr_table.*参照动态结构类型和动态内表类型创建内表与⼯作区CREATE DATA dyn_wa TYPE HANDLE lr_struc.CREATE DATA dyn_table TYPE HANDLE lr_table.*指定内表与⼯作区到字段符号ASSIGN dyn_wa->* TO <dyn_wa>.ASSIGN dyn_table->* TO <dyn_table>.*从动态表中取数到动态内表中SELECT * INTO CORRESPONDING FIELDS OF TABLE <dyn_table> UP TO100 ROWS FROM (p_name).*显⽰内表中的数据CALL FUNCTION'REUSE_ALV_GRID_DISPLAY'EXPORTINGi_structure_name = p_nameTABLESt_outtab = <dyn_table>EXCEPTIONSprogram_error = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.⽅法2:TYPE-POOLS:abap.PARAMETERS p_name TYPE tabname.DATA: d_ref TYPE REF TO data,lt_alv_cat TYPE TABLE OF lvc_s_fcat,ls_alv_cat LIKE LINE OF lt_alv_cat.DATA: lt_table LIKE TABLE OF dntab.DATA: ls_table TYPE dntab.FIELD-SYMBOLS : <dyn_table> TYPE table,<dyn_wa> TYPE ANY,<dyn_field> TYPE ANY.*取出表结构的字段⽬录CALL FUNCTION'NAMETAB_GET'EXPORTINGlangu = sy-langutabname = p_nameTABLESnametab = lt_tableEXCEPTIONSno_texts_found = 1.*根据取出的字段⽬录⽣成参考字段⽬录LOOP AT lt_table INTO ls_table.ls_alv_cat-fieldname = ls_table-fieldname.ls_alv_cat-ref_table = p_name.ls_alv_cat-ref_field = ls_table-fieldname.APPEND ls_alv_cat TO lt_alv_cat.CLEAR ls_alv_cat.ENDLOOP.*内表创建CALL METHOD cl_alv_table_create=>create_dynamic_tableEXPORTINGit_fieldcatalog = lt_alv_catIMPORTINGep_table = d_ref.*指定⽣成的内表到字段符号ASSIGN d_ref->* TO <dyn_table>.*从动态表中取数到动态内表中SELECT * INTO CORRESPONDING FIELDS OF TABLE <dyn_table> UP TO100 ROWS FROM (p_name).*显⽰内表中的数据CALL FUNCTION'REUSE_ALV_GRID_DISPLAY'EXPORTINGi_structure_name = p_nameTABLESt_outtab = <dyn_table>EXCEPTIONSprogram_error = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.⽅法3:PARAMETERS p_name TYPE tabname.DATA: dyn_table TYPE REF TO data.DATA: dyn_wa TYPE REF TO data.FIELD-SYMBOLS: <dyn_table> TYPE table,<dyn_wa> TYPE ANY.*创建动态表结构CREATE DATA dyn_table TYPE TABLE OF (p_name).*创建动态内表ASSIGN dyn_table->* TO <dyn_table>.*创建动态⼯作区结构CREATE DATA dyn_wa LIKE LINE OF <dyn_table>.*创建动态⼯作区ASSIGN dyn_wa->* TO <dyn_wa>.*从动态表中取数到动态内表中SELECT * INTO CORRESPONDING FIELDS OF TABLE <dyn_table> UP TO100 ROWS FROM (p_name).*对取出数据进⾏处理LOOP AT <dyn_table> assigning <dyn_wa>."内表数据处理ENDLOOP.*显⽰内表中的数据CALL FUNCTION'REUSE_ALV_GRID_DISPLAY'EXPORTINGi_structure_name = p_nameTABLESt_outtab = <dyn_table>EXCEPTIONSprogram_error = 1OTHERS = 2.IF sy-subrc <> 0.MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgnoWITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.ENDIF.。
说明:几种内表的定义方法。
REPORT ZTESTLP_1206.DATA: BEGIN OF itab_test OCCURS 0, " 定义了一个有表头的内表matnr(04) TYPE C,ebeln TYPE I,END OF itab_test.TYPES: BEGIN OF itab_c,aaa TYPE I,bbb(20) TYPE C,END OF itab_c.DATA: ITAB1 LIKE RANGE OF MARA-MATNR. " 定义一个表,结构为ranges ,有上下限RANGES: s_bwart FOR mseg-bwart." data likeDATA tlike LIKE itab_test. " 定义一个结构DATA tlike_occurs0 LIKE itab_test OCCURS 0. " 定义一个无表头的内表DATA tlike_occurs0_withhead LIKE itab_test OCCURS 0 WITH HEADER LINE. " 定义一个有表头的内表" data like line ofDATA: like_line_of LIKE LINE OF itab_test, " 定义一个结构like_line_of_occurs0 LIKE line of itab_test OCCURS 0, " 定义一个无表头的内表like_line_of_occurs0_nohead LIKE LINE OF itab_test OCCURS 0 WITH HEADER LINE. " 定义一个有表头的内表" data like table of 只能跟内表,不能跟结构、工作区DATA lt LIKE TABLE OF itab_test . " 定义了一个参照有表头内表的内表,但不带工作区*DATA lt_occurs0 LIKE TABLE OF itab_test OCCURS 0. 错误定义,不可带OCCURS 0。
abap ooalv创建步骤以ABAP OO ALV创建步骤为标题的文章ABAP是一种面向对象的编程语言,用于在SAP系统中进行开发和定制。
其中,OO(面向对象)ALV(ABAP列表视图)是一种用于显示和处理数据的功能强大的工具。
本文将介绍使用ABAP OO ALV创建步骤的详细过程。
第一步:定义内部表和结构在使用ABAP OO ALV之前,首先需要定义一个内部表和一个结构。
内部表用于存储数据,而结构用于定义表格的列。
可以根据实际需要定义多个内部表和结构。
第二步:创建ALV对象使用ABAP OO ALV创建步骤的下一步是创建一个ALV对象。
可以使用CL_GUI_ALV_GRID类来创建一个ALV对象。
在创建对象时,需要传递内部表和结构。
第三步:设置ALV的属性创建ALV对象后,可以通过设置属性来定制ALV的外观和行为。
可以设置行高、列宽、表头、排序等属性。
还可以设置事件处理程序来响应用户的操作。
第四步:显示ALV设置ALV属性后,需要调用ALV对象的显示方法来显示ALV。
可以使用方法SET_TABLE_FOR_FIRST_DISPLAY来显示ALV。
在调用该方法时,需要传递内部表和结构,并指定是否要显示表头。
第五步:处理用户交互一旦ALV显示出来,用户可以通过点击列头进行排序,通过双击行来查看详细信息,通过右键菜单执行其他操作等。
为了处理这些用户交互,需要编写相应的事件处理程序。
第六步:刷新ALV当内部表的数据发生变化时,需要刷新ALV以反映最新的数据。
可以使用方法REFRESH_TABLE_DISPLAY来刷新ALV。
在调用该方法时,需要传递内部表和结构。
第七步:释放资源最后一步是释放ALV对象以释放内存。
可以使用方法FREE来释放ALV对象。
通过以上七个步骤,可以使用ABAP OO ALV创建一个功能强大且灵活的列表视图。
通过定制ALV的外观和行为,并处理用户交互,可以实现各种复杂的数据显示和处理需求。
ABAP之内表定义、insert、read、update、delete ⼀、内表定义.1.1参照表类型创建内表——先定义类型,参照类型定义内表.TYPES:BEGIN OF s_type,no(6) TYPE c,name(10) TYPE c,part(16) TYPE c,END OF s_type.DATA:gt_itab TYPE STANDARD TABLE OF s_type with NON-UNIQUE KEY no WITH HEADER LINE.参照结构体创建内表DATA:BEGIN OF s_type,no(6) TYPE c,name(10) TYPE c,part(16) TYPE c,END OF s_type.DATA:gt_itab LIKE STANDARD TABLE OF s_type with NON-UNIQUE KEY no WITH HEADER LINE.1.2 参照表定义内表语法: DATA:itab TYPE <t_itab> WITH {UNIQUE|NON-UNIQUE} KEY <keys> [INITIAL SIZE <n>][WITH HEADER LINE]. DATA gt_itab TYPE SORTED TABLE OF scarr WITH UNIQUE KEY carrid.DATA gs_str LIKE LINE OF gt_itab.⼆、内表操作2.1.内表赋值."内表带表头的话,下⾯语句只赋值表头。
MOVE itab1 TO itab2."同于 itab2 = itab1."赋值表体数据MOVE itab1[] TO itab2[]. "同于 itab2[] = itab1[]."表类型不同时或者字段顺序不同时。
MOVE-CORRESPONDING itab1 TO itab2.2.2.内表初始化CLEAR、REFRESH、FREE.1).CLEAR .CLEAR itab.--返回内存空间.--itab如果带表头,只清楚表头,如果不带表头,清除表体数据。
ABAP内表用法小结第一篇:ABAP 内表用法小结ABAP 内表用法小结ABAP中的内表相当于其他程序设计语言中的二维数组,存储多行结构相同的数据不同于二维数组,内表在创建后,列结构与列数是固定不变的,而行数是动态增长的内表支持循环对每行数据进行操作,也支持整体操作内表是具有行和列的表结构,然而,不同于数据库表,内表仅在程序运行期间在内存中存储数据ABAP中有三种内表类型:标准表,哈希表,排序表– ABAP内表数据类型内表数据对象是实际的内表,可以用数据进行填充内表数据类型是用于定义内表数据对象的抽象数据类型(ADT)可以使用的内表数据类型有: Structure 数据库表用户自定义数据类型–ABAP内表声明 1> TYPES: BEGIN OF line, field1 TYPE i, field2 TYPE i, END OF line.* 声明一个数据类型DATA: ITAB_WA TYPE(LIKE)line.“声明一个内表工作区DATA: ITAB TYPE(LIKE)line OCCURS 0.“声明一个无工作区的内表 DATA: ITAB TYPE(LIKE)STANDARD TABLE OF line INITIAL SIZE 0.“声明一个有工作区的内表 DATA: ITAB TYPE(LIKE)line OCCURS 0 WITH HEADER LINE.DATA: ITAB TYPE(LIKE)STANDARD TABLE OF line INITIAL SIZE 0 WITH HEADER LINE.2> DATA: BEGIN OF line, field1 TYPE i, field2 TYPE i, END OF line.* 声明一个line对象,该对象可以作为工作区使用* 用DATA定义的line本身也是一个结构类型,也可再声明一个工作区DATA: ITAB_WA TYPE(LIKE)line.“声明一个工作区DATA: ITAB TYPE(LIKE)line OCCURS 0 WITH HEADER LINE.“声明一个带工作区的内表DATA: ITAB TYPE(LIKE)STANDARD TABLE OF line INITIAL SIZE0 WITH HEADER LINE.“声明一个带工作区的内表 3>直接定义内表,这个内表是有工作区的 DATA: BEGIN OF ITAB OCCURS 0 , CARR1 LIKE SPFLI-CARRID, CONN1 LIKE SPFLI-CONNID, END OF ITAB.* DATA: ITAB1 TYPE ITAB.(错误的,实践证明,定义出来的什么都不是)。
abap 类和方法的创建使用教程ABAP(Advanced Business Application Programming)是一种用于SAP系统开发的编程语言,它的主要特点是使用面向对象的编程范式。
在ABAP中,类和方法是实现面向对象编程的基本组成部分。
本文将介绍如何创建和使用ABAP类和方法。
一、ABAP类的创建和使用在ABAP中,类是对象的模板,用于定义对象的属性和行为。
创建类的步骤如下:1. 打开ABAP开发工具(如SE80),选择“类”作为对象类型,点击“创建”按钮。
2. 在弹出的对话框中,输入类的名称和描述信息,并选择合适的包。
点击“确定”按钮。
3. 在类的定义中,可以定义类的属性和方法。
属性用于存储对象的状态信息,方法用于定义对象的行为。
4. 定义属性:在类的定义中,使用关键字“DATA”定义属性,并指定属性的名称和数据类型。
例如:DATA lv_name TYPE string.5. 定义方法:在类的定义中,使用关键字“METHODS”定义方法,并指定方法的名称和参数。
例如:METHODS display_name IMPORTING iv_name TYPE string.6. 实现方法:在类的定义结束后,可以为方法添加具体的实现。
在方法的实现中,可以使用关键字“WRITE”将数据输出到屏幕。
7. 保存类的定义并激活。
使用ABAP类的步骤如下:1. 创建类的实例:在ABAP程序中,使用关键字“CREATE OBJECT”创建类的实例。
例如:CREATE OBJECT lo_class.2. 访问属性:使用箭头操作符“->”访问类的属性。
例如:lo_class->lv_name = 'Tom'.3. 调用方法:使用箭头操作符“->”调用类的方法。
例如:lo_class->display_name( 'Tom' ).二、ABAP方法的创建和使用在ABAP中,方法是类的行为,用于执行特定的操作。
ABAP内表详解内表⽼式的内表类型定义⽼式内表只有标准内表⼀种,使⽤OCCURS选项来定义了标准内表,这是ABAP3.0之前的定义内表的做法了,在新版的ABAP不建议使⽤,因为在新的版本中有三种内表类型(标准、排序、哈希)。
TYPES <t><type> OCCURS <n>.内表中⾏的数据类型在<type>中指定。
要指定⾏的数据类型,可以使⽤ TYPE 或 LIKE 参数。
基于基本类型内表类型"如果去掉了 OCCURS 则表⽰是普通类型⽽不是内表类型了vector TYPE i OCCURS 10."如果要带隐藏表头则⼀定要加上WITH HEADER LINE,否则默认没有,⽽且只能在声明内表变量时加,⽽不能在上⾯定义内表类型时加DATA vector TYPE vector WITH HEADER LINE.vector = 1.APPEND vector.上⾯的TYPES与下⾯语句等效:TYPES vector TYPE STANDARD TABLE OF iWITH NON-UNIQUE DEFAULT KEYINITIAL SIZE 10.本⽰例创建内表数据类型 vector,其⾏包含基本类型 I 字段。
注:WITH HEADER LINE只能与DATA关键字⼀起使⽤,⽽不能与TYPES⼀起使⽤,这也就是说,只有在分配了存储空间时才有隐藏⼯作区这⼀说,在定义内表类型时是没有的。
下⾯这样也可以:vector TYPE i.DATA vector TYPE vector OCCURS 0 WITH HEADER LINE.vector = 1.APPEND vector.基于结构体类型内表类型"由于没有加 occurs 选项,所以定义的是⼀结构类型TYPES: BEGIN OF line,column1 TYPE i,column2 TYPE i,column3 TYPE i,END OF line."定义⼀内表类型⽽不是普通类型TYPES itab TYPE line OCCURS 10.本⽰例创建内表数据类型itab,其⾏与字段串line结构相同。
ABAP中创建动态内表的三种⽅法(转载)BAP中创建动态内表的三种⽅法第⼀种:如果我们需要的动态内表字段或者动态⼯作区和数据字典中的类型⼀致,可以直接使⽤CREATE DATA⽣成,当然也可以是⾃定义类型。
⽐如要产⽣和数据表MARA结构⼀致的动态内表:DATA : DY_TABLE TYPE REF TO DATA, WA_LINE TYPE REF TO DATA.FIELD-SYMBOLS: <DYN_TABLE> TYPE STANDARD TABLE .CREATE DATA DY_TABLE TYPE TABLE OF MARA.ASSIGN DY_TABLE->* TO <DYN_TABLE>.CREATE DATA WA_LINE LIKE LINE OF <DYN_TABLE>.ASSIGN WA_LINE->* TO <DYN_WA>.如果在程序中需要动态⽣成多个不同的动态内表,可以将表名设置为变量CREATE DATA DY_TABLE TYPE TABLE OF (tabname).第⼆种:如果需要对动态内表进⾏输出,控制输出顺序等属性。
可以使⽤下述⽅法:CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'EXPORTINGI_CLIENT_NEVER_DISPLAY = ''I_STRUCTURE_NAME = TABNAMECHANGINGCT_FIELDCAT = IT_STRUCTUREEXCEPTIONSINCONSISTENT_INTERFACE = 1PROGRAM_ERROR = 2OTHERS = 3.使⽤该⽅法创建输⼊的tabname对应的字段⽬录之后根据该字段⽬录产⽣与之对应的动态内表结构CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLEEXPORTINGIT_FIELDCATALOG = IT_STRUCTURE* I_LENGTH_IN_BYTE = 'X'IMPORTINGEP_TABLE = DY_TABLE.ASSIGN DY_TABLE->* TO <DYN_TABLE>.动态⼯作区的产⽣跟第⼀种⼀样。
说明:几种内表的定义方法。
REPORT ZTESTLP_1206.
DATA: BEGIN OF itab_test OCCURS 0, " 定义了一个有表头的内表
matnr(04) TYPE C,
ebeln TYPE I,
END OF itab_test.
TYPES: BEGIN OF itab_c,
aaa TYPE I,
bbb(20) TYPE C,
END OF itab_c.
DATA: ITAB1 LIKE RANGE OF MARA-MATNR. " 定义一个表,结构为ranges ,有上下限RANGES: s_bwart FOR mseg-bwart.
" data like
DATA tlike LIKE itab_test. " 定义一个结构
DATA tlike_occurs0 LIKE itab_test OCCURS 0. " 定义一个无表头的内表
DATA tlike_occurs0_withhead LIKE itab_test OCCURS 0 WITH HEADER LINE. " 定义一个有表头的内表
" data like line of
DATA: like_line_of LIKE LINE OF itab_test, " 定义一个结构
like_line_of_occurs0 LIKE line of itab_test OCCURS 0, " 定义一个无表头的内表
like_line_of_occurs0_nohead LIKE LINE OF itab_test OCCURS 0 WITH HEADER LINE. " 定义一个有表头的内表
" data like table of 只能跟内表,不能跟结构、工作区
DATA lt LIKE TABLE OF itab_test . " 定义了一个参照有表头内表的内表,但不带工作区
*DATA lt_occurs0 LIKE TABLE OF itab_test OCCURS 0. 错误定义,不可带OCCURS 0。
DATA lt_withhead LIKE TABLE OF itab_test WITH HEADER LINE. " 定义一个有表头的内表。
*DATA lt_orc LIKE LINE OF itab_c. " 错误定义不能跟结构itab_C.
" 另外定义lt的工作区。
DATA: BEGIN OF wa_lt,
matnr(04) TYPE C,
ebeln TYPE I,
END OF wa_lt. itab_test-matnr = '0014'. itab_test-ebeln = 12133.
APPEND itab_test.
itab_test-matnr = 'BT02'. itab_test-ebeln = 23433.
APPEND itab_test.
wa_lt-matnr = 'KKKK'. wa_lt-ebeln = 8888. APPEND wa_lt to lt.
wa_lt-matnr = 'KKKG'. wa_lt-ebeln = 99999. APPEND wa_lt to lt.
WRITE : 'itab_test内表原始数据:'. CLEAR itab_test.
LOOP AT itab_test.
WRITE: / itab_test-matnr, itab_test-ebeln. ENDLOOP.
LOOP AT lt INTO wa_lt.
WRITE: / wa_lt-matnr, wa_lt-ebeln. ENDLOOP.
clear itab_test.
SKIP 2.
WRITE : 'itab_test内表清空测试:'.
if itab_test is INITIAL.
WRITE :/ '表头清空'.
ENDIF.
CLEAR itab_test[].
if itab_test[] is INITIAL.
WRITE: / 'itab_test表体清空'.
endif.
CLEAR lt.
if itab_test[] is INITIAL.
WRITE: / 'lt表体清空'.
endif.。