ABAP 7.40 新语法

目录

"1. @DATA(表名):自动创建内表

"2. 读表lt_sales_order中的第20条数据到新建的变量ls_sales_order20中

"2.1 []中放条件

"3. 判断表lt_sales_order中vbeln = '0000000031'是否存在,存在打1

"4. 获取index

"5. 将C类型转换为xstring

"6. 利用value向结构体赋值

"7. 利用value向表赋值

"8. 利用value向表赋自定义范围值

"9. 将旧表(gt_ships)中的值根据条件(ls_ship–city)赋值到目标表(gt_citys)中

"9.1 俩条件

"10. 循环执行col1 = j col2 = j + 1 col3 = j + 2,当j>40的时候停止循环

"11. 循环表gt_itab到结构体wa中 当F1 = 'XYZ'时 x加1 i为lv_lines的type

"12. 循环表itab到结构体wa中 一共多少条 就累加多少次 求总条数

"13. reduce中可以加until for迭代 相当于java或js中的for循环

"14. 将ls_line1的内容移动到ls_line2,其中有一个匹配的列名。在没有初始化ls_line2的列。

"15. 这将使用ls_line2的现有内容作为基础,并覆盖ls_line1中匹配的列。

"16. 将创建第三个新结构(ls_line3),它基于ls_line2,但是通过匹配覆盖了它

"17. 映射允许您映射具有不同名称组件的字段,以符合数据传输的条件。

"18. EXCEPT允许列出必须从数据传输中排除的字段

"19. 字符串的宽度 布局方式(居中 居左 局右) 还有通过0来布局

"20. 不改变大小写

"21. 去前导零

"22. 加前导零

"23. 转换时间格式

"24. 根据group by条件遍历,符合条件的自动归为一组,然后再遍历group 打印输出

"25. 根据key vbeln='0000000031' 读出表一条数据到表结构体中

"26. 根据index查出表中的一条数据

"27. 定义字符串

"28. 把表里的字符串连成一行,如果想用空格格开,要用``包裹

"29. 反转字符串

"30. 从左截取两位字符

"31. 从左截取两位字符放在最后

"32. 从左截取sub的值,sub中的值必须从A开始,必须挨着:比如ABC 不可以AC

"33. 去前导零

"34. 字符串截取


"1. @DATA(表名):自动创建内表


*SELECT vbeln , posnr , matnr
*  FROM vbap
*  INTO TABLE @DATA(lt_sales_order)
*  UP TO 100 ROWS.

"2. 读表lt_sales_order中的第20条数据到新建的变量ls_sales_order20中


*DATA(ls_sales_order20) = lt_sales_order[ 20 ].

"2.1 []中放条件


*DATA(ls_sales_order21) = lt_sales_order[ vbeln = '0000000031' ].

"3. 判断表lt_sales_order中vbeln = '0000000031'是否存在,存在打1


*IF line_exists( lt_sales_order[ vbeln = '0000000031' ] ).
*  WRITE:'1'.
*ENDIF.

"4. 获取index


*DATA(idx) = line_index( lt_sales_order[ vbeln = '0000000031' ] ).
*LOOP AT lt_sales_order into data(ls_sales_order1).
*
*ENDLOOP.

"5. 将C类型转换为xstring


*DATA text TYPE i VALUE 10.
*DATA(xstr) = cl_abap_codepage=>convert_to( source = CONV string( text ) ).

"6. 利用value向结构体赋值


* TYPES:  BEGIN OF ty_columns1, "Simple structure
*                     cols1 TYPE i,
*                     cols2 TYPE i,
*                   END OF ty_columns1.
* TYPES:  BEGIN OF ty_columns2,  "Nested structure
*                     coln1 TYPE i,
*                     coln2 TYPE ty_columns1,
*                   END OF ty_columns2.
*DATA: struc_nest TYPE ty_columns2.
*struc_nest = VALUE #( coln1 = 1 coln2-cols1 = 1 coln2-cols2 = 2 ).

"7. 利用value向表赋值


*TYPES t_itab TYPE TABLE OF i WITH EMPTY KEY.
*DATA itab TYPE t_itab.
*itab = VALUE #( ( 10 ) ( 1 ) ( 2 ) ).

"8. 利用value向表赋自定义范围值


*DATA itab TYPE RANGE OF i.
*
*itab = VALUE #( sign = 'I'  option = 'BT' ( low = 1  high = 10 )
*( low = 21 high = 30 )
*( low = 41 high = 50 )
*option = 'GE' ( low = 61 )  ).

"9. 将旧表(gt_ships)中的值根据条件(ls_ship–city)赋值到目标表(gt_citys)中


*DATA(gt_citys) = VALUE #( FOR ls_ship IN gt_ships ( ls_ship–city ) ).

"9.1 俩条件


*DATA(gt_citys) = VALUE ty_citys( FOR ls_ship IN gt_ships
*  WHERE ( route = 'R0001' ) ( ls_ship–city ) ).

"10. 循环执行col1 = j col2 = j + 1 col3 = j + 2,当j>40的时候停止循环


*DATA(gt_itab) = VALUE #( FOR j = 11 THEN j + 10 UNTIL j > 40
*      ( col1 = j col2 = j + 1 col3 = j + 2  )
*).

"11. 循环表gt_itab到结构体wa中 当F1 = 'XYZ'时 x加1 i为lv_lines的type


*DATA(lv_lines) = REDUCE i( INIT x = 0 FOR wa IN gt_itab
*  WHERE ( F1 = 'XYZ' ) NEXT x = x + 1 ).

"12. 循环表itab到结构体wa中 一共多少条 就累加多少次 求总条数


*DATA(lv_sum) = REDUCE i( INIT x = 0 FOR wa IN itab NEXT x = x + wa ).

"13. reduce中可以加until for迭代 相当于java或js中的for循环


"循环将n赋值给text然后再输出
*TYPES outref TYPE REF TO if_demo_output.
*DATA(output) = REDUCE outref( INIT out  = cl_demo_output=>new( )
*                              text = `Count up:`
*                              FOR n = 1 UNTIL n > 11
*                              NEXT out = out->write( text )
*                              text = |{ n }| ).
*output->display( ).

"14. 将ls_line1的内容移动到ls_line2,其中有一个匹配的列名。在没有初始化ls_line2的列。


*ls_line2 = CORRESPONDING #( ls_line1 ).

"15. 这将使用ls_line2的现有内容作为基础,并覆盖ls_line1中匹配的列。


*ls_line2 = CORRESPONDING #( BASE ( ls_line2 ) ls_line1 ).

"16. 将创建第三个新结构(ls_line3),它基于ls_line2,但是通过匹配覆盖了它


*DATA(ls_line3) = CORRESPONDING line2( BASE ( ls_line2 ) ls_line1 ).

"17. 映射允许您映射具有不同名称组件的字段,以符合数据传输的条件。


*   … MAPPING  t1 = s1 t2 = s2

"18. EXCEPT允许列出必须从数据传输中排除的字段


*… EXCEPT  {t1 t2 …}

"19. 字符串的宽度 布局方式(居中 居左 局右) 还有通过0来布局


*WRITE / |{ 'Left'     WIDTH = 20 ALIGN = LEFT   PAD = '0' }|.
*WRITE / |{ 'Centre'   WIDTH = 20 ALIGN = CENTER PAD = '0' }|.
*WRITE / |{ 'Right'    WIDTH = 20 ALIGN = RIGHT  PAD = '0' }|.

"20. 不改变大小写


*WRITE / |{ 'Text' CASE = (cl_abap_format=>c_raw) }|.
"变大写
*WRITE / |{ 'text' CASE = (cl_abap_format=>c_upper) }|.
"变小写
*WRITE / |{ 'TEXT' CASE = (cl_abap_format=>c_lower) }|.

"21. 去前导零


*DATA(lv_vbeln) = '0000012345'.
*WRITE / |{ lv_vbeln  ALPHA = OUT }|.

"22. 加前导零


*DATA(lv_vbeln1) = '0000012345000000'.
*WRITE / |{ lv_vbeln  ALPHA = IN }|.

"23. 转换时间格式


*WRITE / |{ sy-datum DATE = ISO }|. "2019-7-23
*WRITE / |{ sy-datum DATE = USER }|. "23.07.2019
*WRITE / |{ sy-datum }|. "20190723
"语言环境的格式化设置
*WRITE / |{ sy-datum DATE = ENVIRONMENT }|.

"24. 根据group by条件遍历,符合条件的自动归为一组,然后再遍历group 打印输出


*TYPES: BEGIN OF ty_employee,
*  name TYPE char30,
*  role    TYPE char30,
*  age    TYPE i,
*END OF ty_employee,
*ty_employee_t TYPE STANDARD TABLE OF ty_employee WITH KEY name.
*DATA(gt_employee) = VALUE ty_employee_t(
*( name = 'John'     role = 'ABAP guru'       age = 34 )
*( name = 'Alice'     role = 'FI Consultant'   age = 42 )
*( name = 'Barry'    role = 'ABAP guru'       age = 54 )
*( name = 'Mary'     role = 'FI Consultant'   age = 37 )
*( name = 'Arthur'   role = 'ABAP guru'       age = 34 )
*( name = 'Mandy'  role = 'SD Consultant'  age = 64 ) ).
*DATA: gv_tot_age TYPE i,
*      gv_avg_age TYPE decfloat34.
*"Loop with grouping on Role
*LOOP AT gt_employee INTO DATA(ls_employee)
*  GROUP BY ( role  = ls_employee-role
*                     size  = GROUP SIZE
*                     index = GROUP INDEX )
*  ASCENDING
*  ASSIGNING FIELD-SYMBOL(<group>).
*  CLEAR: gv_tot_age.
*  "Output info at group level
*  WRITE: / |Group: { <group>-index } Role: { <group>-role WIDTH = 15 }| & | Number in this role: { <group>-size }|.
*   "Loop at members of the group
*   LOOP AT GROUP <group> ASSIGNING FIELD-SYMBOL(<ls_member>).
*      gv_tot_age = gv_tot_age + <ls_member>-age.
*      WRITE: /13 <ls_member>-name.
*   ENDLOOP.
*   "Average age
*   gv_avg_age = gv_tot_age / <group>-size.
*   WRITE: / |Average age: { gv_avg_age }|.
*   SKIP.
*ENDLOOP.
"将C类型转换为xstring
DATA text TYPE i value 10.
DATA(xstr) = cl_abap_codepage=>convert_to( source = CONV string( text ) ).

"25. 根据key vbeln='0000000031' 读出表一条数据到表结构体中


TRY.
 DATA(ls_sales_order) = lt_sales_order[ vbeln = '0000000031' ].
*Success part
  CATCH cx_sy_itab_line_not_found.
*Failed part
ENDTRY.

"26. 根据index查出表中的一条数据


TRY.
 DATA(ls_sales_order2) = lt_sales_order[ 1 ].
*Success part
  CATCH cx_sy_itab_line_not_found.
*Failed part
ENDTRY.

"27. 定义字符串


DATA(lv_string) = 'My' && 'TEST' && 'DATA'.
DATA(lv_string_1) = |MY TEST DATA|.
DATA(lv_string_3) = 'DATA'.
DATA(lv_string2) = |MY TEST { lv_string_3 }|.

"28. 把表里的字符串连成一行,如果想用空格格开,要用``包裹


DATA: lt_table TYPE TABLE OF char100 WITH EMPTY KEY.
DATA: lv_string4 TYPE string.
APPEND 'THIS' TO lt_table.
APPEND 'IS' TO lt_table.
APPEND 'A' TO lt_table.
APPEND 'TEST' TO lt_table.
lv_string4 = concat_lines_of( table = lt_table sep = ` ` ) .

"29. 反转字符串


lv_string = reverse( lv_string ).

"30. 从左截取两位字符


DATA(lv_result_shift_1) = shift_left( val = 'ABCDEF' places = 2 ).

"31. 从左截取两位字符放在最后


DATA(lv_result_shift_2) = shift_left( val = 'ABCDEF' circular = 2 ).

"32. 从左截取sub的值,sub中的值必须从A开始,必须挨着:比如ABC 不可以AC


DATA(lv_result_shift_3) = shift_left( val = '000000000101010' sub = '0' ).
DATA(lv_result_shift_4) = shift_left( val = 'ABCEDF' sub = 'AB' ).

"33. 去前导零


DATA lv_string_11 TYPE char30 VALUE '00000000133123'.
SHIFT lv_string_11 LEFT DELETING LEADING '0'.

"34. 字符串截取


DATA(lv_result_sub_1) = substring( val = 'ABCDEFGH' off = 3 len = 4 )."从第三位开始,截取4位      DEFG
DATA(lv_result_sub_2) = substring_from( val = 'ABCDEFGH' sub = 'DEF')."从DEF开始截取直到最后     DEFGH
DATA(lv_result_sub_3) = substring_after( val = 'ABCDEFGH' sub = 'DEF')."从DEF开始截取DEF后面的   GH
DATA(lv_result_sub_4) = substring_before( val = 'ABCDEFGH' sub = 'DEF')."从DEF开始截取DEF前面的  ABC
DATA(lv_result_sub_5) = substring_to( val = 'ABCDEFGH' sub = 'D')."从左开始截取到D包括D          ABCD
 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值