S4语法整理

1. VALUE type( ... ),DATA(WA)

临时定义类型并且赋值给构造

  TYPES:
    BEGIN OF TY_TAB,
     ZCHAR1 TYPE C LENGTH 10,
     ZCHAR2 TYPE C LENGTH 10,
     ZCHAR3 TYPE C LENGTH 10,
     ZCHAR4 TYPE C LENGTH 10,
    END OF TY_TAB.


  DATA(WA) = VALUE TY_TAB( ZCHAR1 = '1' ZCHAR2 = '2' ZCHAR3 = '3' ZCHAR4 = '4' ).

  CL_DEMO_OUTPUT=>DISPLAY( WA ).

表赋值

  DATA:
    LT_TAB TYPE TT_TAB.

  LT_TAB = VALUE #( ( ZCHAR1 = '1' ZCHAR2 = '1' ZCHAR3 = '3' ZCHAR4 = '4' )
                    ( ZCHAR1 = '1' ZCHAR2 = '1' ZCHAR3 = '3' ZCHAR4 = '4' )
                    ( ZCHAR1 = '1' ZCHAR2 = '1' ZCHAR3 = '3' ZCHAR4 = '4' )
                    ( ZCHAR1 = '1' ZCHAR2 = '1' ZCHAR3 = '3' ZCHAR4 = '4' )
                    ZCHAR1 = '1' ( ZCHAR2 = '2' ZCHAR3 = '6' ZCHAR4 = '6' )
                                 ( ZCHAR2 = '2' ZCHAR3 = '7' ZCHAR4 = '7' )
                    ZCHAR1 = '1' ZCHAR2 = '3' ( ZCHAR3 = '6' ZCHAR4 = '6' )
                                              ( ZCHAR3 = '7' ZCHAR4 = '7' )
                    ZCHAR1 = '1' ZCHAR2 = '4' ( ZCHAR3 = '6' ZCHAR4 = '6' )
                                              ( ZCHAR3 = '7' ZCHAR4 = '7' )

                  ).

  CL_DEMO_OUTPUT=>DISPLAY( LT_TAB ).

测试发现 括号的变量可以变少,但是不能变少之后再变多

内表追加数据

 

内表操作指定行赋值(不会改变系统变量SY-TABIX的值)


  DATA(WA1) = LT_TAB[ 5 ].

  CL_DEMO_OUTPUT=>DISPLAY( WA1 ).

字符拼接

指针:

  ASSIGN COMPONENT L_I OF STRUCTURE WA1 TO FIELD-SYMBOL(<FS_TS>).
  
  ASSIGN LT_TAB[ 5 ] TO FIELD-SYMBOL(<FS>).

  READ TABLE LT_TAB ASSIGNING FIELD-SYMBOL(<FS_READ>) WITH  KEY ZCHAR1 = '3'.

内表数据读取(读取不到会抛异常,所以以下两种方法执行避免一种DUMP)

  TRY .
    DATA(WA3) = LT_TAB1[ ZCHAR1 = '1'  ].

  CATCH CX_SY_ITAB_LINE_NOT_FOUND INTO DATA(oref)  .

    DATA(STR11) = oref->GET_TEXT( ).

    WRITE:/ STR11.
  ENDTRY.


  IF line_exists( LT_TAB1[ ZCHAR1 = '1'  ] ).

    DATA(WA2) = LT_TAB1[ ZCHAR1 = '1'  ].

  ENDIF.

1.MOVE-CORRESPONDING

表或者字段之间相同字段赋值

*  MOVE-CORRESPONDING LT_TAB TO LT_TAB1.

  LT_TAB1 = CORRESPONDING #( LT_TAB ).

  CL_DEMO_OUTPUT=>DISPLAY( LT_TAB1 ).

2.FOR 写法及相关应用

TYPES:
  BEGIN OF LINE,
    COL1 TYPE I,
    COL2 TYPE I,
    COL3 TYPE I,
  END OF LINE,

  ITAB TYPE STANDARD TABLE OF LINE WITH EMPTY KEY.

  DATA(ITAB) = VALUE ITAB(

    FOR J = 11 THEN J * 10 UNTIL J > 4000
      ( COL1 = J COL2 = J + 1 COL3 = J + 2 )

   ).

*  返回一个值
  DATA(TOTAL) = REDUCE I( INIT RES = 0 FOR WA IN ITAB WHERE ( COL1 < 1000 ) NEXT  RES = RES + WA-COL1 ).

* 返回一个结构
  DATA(RESULT) = REDUCE LINE( INIT RES1 = VALUE LINE( COL2 = 0 COL3 = 9999999 )

                FOR WA IN ITAB WHERE ( COL1 IS NOT INITIAL )
                NEXT RES1-COL1 = RES1-COL1 + 1
                     RES1-COL2 = NMAX( VAL1 = RES1-COL1 VAL2 = WA-COL2  )
                     RES1-COL3 = NMIN( VAL1 = RES1-COL1 VAL2 = WA-COL3  )
   ).


  CL_DEMO_OUTPUT=>DISPLAY( ITAB ).


  CL_DEMO_OUTPUT=>DISPLAY( TOTAL ).

  CL_DEMO_OUTPUT=>DISPLAY( RESULT ).

内表中满足条件的数据放到另一内表

  DATA(ITAB2) = VALUE ITAB( FOR WA IN ITAB WHERE ( COL1 < 1000 )

                  (  COL1 = WA-COL1   COL2 = WA-COL2  COL3 = WA-COL3 )
     ).

   CL_DEMO_OUTPUT=>DISPLAY( ITAB2 ).

LOOP GROUP BY

  TYPES:
    BEGIN OF TY_LINE,
      C1 TYPE C LENGTH 20,
      C2 TYPE C LENGTH 20,
      C3 TYPE C LENGTH 20,
      C4 TYPE I ,
    END OF TY_LINE,

    ITAB TYPE STANDARD TABLE OF TY_LINE WITH EMPTY KEY.

  DATA(ITAB) = VALUE ITAB(
       C1 = 'A' ( C2 = 'A' C3 = 'A' C4 = 1 )
                ( C2 = 'B' C3 = 'B' C4 = 2 )
                ( C2 = 'C' C3 = 'C' C4 = 3 )
       C1 = 'B' ( C2 = 'A' C3 = 'A' C4 = 1 )
                ( C2 = 'B' C3 = 'B' C4 = 2 )
                ( C2 = 'C' C3 = 'C' C4 = 3 )
       C1 = 'C' ( C2 = 'A' C3 = 'A' C4 = 1 )
                ( C2 = 'B' C3 = 'B' C4 = 2 )
                ( C2 = 'C' C3 = 'C' C4 = 3 )
    ) .


  DATA(ITAB3) = VALUE ITAB( ).

  LOOP AT ITAB INTO DATA(WA) GROUP BY WA-C1.

    DATA(ITAB1) = VALUE ITAB( ).

    LOOP AT GROUP WA INTO DATA(WA1).  "遍历分组后得结果机


       ITAB1  = VALUE ITAB( BASE ITAB1 ( WA1 ) ).  "将结果集追加进表 BASE得用法

    ENDLOOP.

*   对分组后得数据进行累加
    DATA(SUM) = REDUCE I( INIT RES = 0 FOR WA2 IN ITAB1

                               NEXT RES = RES + WA2-C4
                      ) .

    IF ITAB1 IS NOT INITIAL.
      DATA(LS_ITAB) = ITAB1[ 1 ].

      LS_ITAB-C4 = SUM.

      ITAB3 = VALUE ITAB( BASE ITAB3 ( LS_ITAB ) ).
    ENDIF.


  ENDLOOP.

  CL_DEMO_OUTPUT=>DISPLAY( ITAB3 ).

自定义分组

  DATA(MEMBERS) = VALUE ITAB( ).
  
  LOOP AT ITAB ASSIGNING FIELD-SYMBOL(<FS_AB>)
    GROUP BY COND  STRING(
        WHEN <FS_AB>-C1 = 'A' THEN |START|
        WHEN <FS_AB>-C1 = 'B' THEN |MIDDLE|
        ELSE |END|
        )
    INTO DATA(GROUP).

    IF GROUP = 'START'.
      MEMBERS = VALUE #( FOR G1 IN GROUP GROUP ( G1 ) ).
    ENDIF.

  ENDLOOP.

  CL_DEMO_OUTPUT=>DISPLAY( MEMBERS ).

FILTER过滤器的试用(需要排序表或者哈希表)

EXCEPT如果不指定则表示满足条件的找出来,如果指定则表示不满足条件的找出来

  DATA(ITAB5) = FILTER ITAB1( ITBA4 IN MEMBERS1
                             WHERE C1 = C1
                         ).

  CL_DEMO_OUTPUT=>DISPLAY( ITAB5 ).
  DATA(ITAB6) = FILTER ITAB1( ITBA4
                             WHERE C1 = CONV #( 'C' )
                         ).

  CL_DEMO_OUTPUT=>DISPLAY( ITAB6 ).

 

S/4对象创建

    DATA(OREF) = NEW  CL_TOOLS_LOCAL( ).

     OREF->H_TOOLS_BT_DATES_001(


        EXPORTING U_BEGDA = '20181011' U_ENDDA = '20181101'

        IMPORTING E_DAY = DATA(L_DAY1)
     ).

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: ABAP是一种用于SAP系统开发的编程语言,它是一种高级语言,用于在SAP环境中编写业务逻辑。ABAP语法ABAP程序的书写规则,用于定义数据对象、变量、函数、方法等,以实现所需的功能。 ABAP的关键语法包括:数据类型定义、变量声明、语句结构、逻辑控制、循环结构、函数和方法定义等。通过这些语法,开发人员可以对数据进行处理、进行条件判断、循环操作以及定义自定义的功能模块。 ABAP语法中的数据类型定义包括:整数、浮点数、字符串、日期、时间等。开发人员可以根据需要选择合适的数据类型来定义变量,并进行数据操作。变量声明可以通过关键字"DATA"或"FIELD-SYMBOLS"进行,这些关键字可以指定变量的数据类型、长度、可见性等属性。 在ABAP语法中,还有一些重要的语句结构。例如,条件语句(IF...ELSE...ENDIF)用于根据条件选择不同的执行路径;循环语句(DO...END...WHILE)用于多次执行同一段代码;选择语句(CASE...WHEN...ENDCASE)用于根据不同的条件选择执行不同的代码块。 除此之外,ABAP语法还支持函数和方法的定义。函数是一段独立的代码块,可以接受输入参数并返回结果;方法则是与对象关联的代码块,用于对特定对象进行操作。 总之,ABAP语法是开发ABAP程序的基础,它提供了丰富的功能和灵活的语言结构,使得开发人员可以根据需要编写复杂的业务逻辑,并在SAP系统中实现各种功能。通过熟悉ABAP语法,开发人员可以高效地进行开发工作,并实现各种业务需求。 ### 回答2: ABAP(Advanced Business Application Programming)是一种用于SAP系统的编程语言,它最初是为SAP R/3系统开发的。随着SAP系统的升级和改进,ABAP也进行了相应的发展,现今最版本是ABAP S/4HANA。 ABAP S/4HANA是在SAP S/4HANA平台上使用的ABAP版本,它与传统的ABAP有一些重要的区别。首先,ABAP S/4HANA采用了的数据模型,即S/4HANA物料管理(Material Ledger)和简化数据模型(SIMM)等,这些模型使用了的内部数据技术,提高了数据处理性能和效率。 其次,ABAP S/4HANA引入了ABAP编程范式,例如ABAP CDS(Core Data Services)。ABAP CDS提供了一种声明式的编程方式,用于定义和处理数据模型、服务和视图。这种的编程范式可以更好地支持SAP S/4HANA中的功能,并且使开发人员能够更轻松地创建和维护ABAP应用程序。 此外,ABAP S/4HANA还引入了更多的功能和特性,以优化开发和运行ABAP应用程序的性能。例如,它引入了ABAP Managed Database Procedures(AMDP),用于在数据库中执行复杂的计算和处理。它还提供了更好的集成工具,如ABAP Test Cockpit和ABAP Development Tools,用于支持开发和测试过程。 总结而言,ABAP S/4HANA是ABAP语言在SAP S/4HANA平台上的最版本,它引入了的数据模型、编程范式和功能,以更好地支持SAP S/4HANA系统,并提高开发和运行ABAP应用程序的性能。 ### 回答3: ABAP是一种高级业务应用程序编程语言,用于开发SAP软件解决方案。ABAP语法包括各种关键字、数据类型、操作符、语句和类等。 首先,在ABAP语法中,我们使用不同的关键字来声明变量、常量和数据类型。例如,使用“DATA”关键字来声明一个变量,使用“CONSTANTS”关键字来声明一个常量,并使用不同的数据类型(例如整数、字符、日期等)来定义变量或常量。这些关键字和数据类型使开发者能够方便地处理数据和进行计算。 其次,在ABAP语法中,我们可以使用各种操作符来进行数学、逻辑和比较操作。例如,加号“+”用于加法运算,减号“-”用于减法运算,等号“=”用于比较操作等。这些操作符帮助我们在编写程序时进行各种运算和判断。 然后,在ABAP语法中,我们使用各种语句来实现不同的功能。例如,我们可以使用“IF”语句来实现条件判断,根据条件的结果执行不同的操作。我们还可以使用“DO”语句来实现循环操作,重复执行一段代码。此外,还有其他语句,例如“CASE”语句、 “LOOP”语句等,用于不同的编程需求。 最后,在ABAP语法中,我们还可以创建和使用类来组织和管理代码。类是一种封装了数据和方法的数据结构,可以实现面向对象的编程。通过创建类和使用类的方法,我们可以更好地管理代码,并实现可重用的功能。 综上所述,ABAP是一种用于开发SAP软件解决方案的编程语言,它有着丰富的语法规则,包括关键字、数据类型、操作符、语句和类等。了解和掌握ABAP语法对于开发高效、可靠的SAP应用程序至关重要。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随记随心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值