ABAP总结-常用语法(自用,持续更新...)

语法

SUBMIT

DATA: ls_data   TYPE REF TO data,
        lt_result TYPE TABLE OF zmm61result,
        ls_result type zmm61result.
  FIELD-SYMBOLS: <lt_data> TYPE table,
                 <l_data>  TYPE data.

  "屏蔽ALV GRID的显示
  cl_salv_bs_runtime_info=>set(
    display = ''
    metadata  = ''
    data = 'X' ) .

  SUBMIT zrmm0061
            " VIA SELECTION-SCREEN   "显示被调用的选择屏幕。如不使用该条目,选择屏幕过程(selection screen processing)将会在后台发生。
              WITH s_matnr IN s_matnr
              WITH s_werks IN s_werks
              WITH s_bukrs IN s_bukrs
              AND RETURN.

  TRY .
      cl_salv_bs_runtime_info=>get_data_ref( importing r_data  = ls_data  ) .
      ASSIGN ls_data->* TO <lt_data> .

    CATCH cx_salv_bs_sc_runtime_info .
      MESSAGE  'UNABLE TO RETRIEVE ALV DATA'  TYPE  'E' .
  ENDTRY .

  cl_salv_bs_runtime_info=>clear_all( ) .

  LOOP AT <lt_data> ASSIGNING <l_data> .
    MOVE-CORRESPONDING <l_data> TO ls_result .
    APPEND ls_result TO lt_result .
  ENDLOOP .

设定DEBUG断点

IF sy-uname = 'XXX'.
    BREAK-POINT.
ENDIF.

LOOP分组循环

LOOP AT lt_result ASSIGNING FIELD-SYMBOL(<fs_key_mit>)
    GROUP BY ( werks = <fs_key_mit>-werks
               matnr = <fs_key_mit>-matnr
               kunnr = <fs_key_mit>-kunnr )
    ASSIGNING FIELD-SYMBOL(<ft_mit>).
	LOOP AT GROUP <ft_mit> ASSIGNING FIELD-SYMBOL(<fs_mit>).
	ENDLOOP.
ENDLOOP.

LINE_EXISTS内表是否存在某值

line_exists( lt_t001k[ bukrs = '1100' ] )

删除内表重复数据

注意:要先排序。

SORT gt_matpr BY kalnr.
DELETE ADJACENT DUPLICATES FROM gt_matpr COMPARING kalnr.

在内表新增一行

APPEND INITIAL LINE TO gt_t13 ASSIGNING FIELD-SYMBOL(<fs_013>).
<fs_013> = VALUE #( BUKRS = 'XXX' PLANT = 'XXX' ).
<fs_013>-BUKRS = 'XXX'.
<fs_013>-PLANT = 'XXX'.

Range对象新增数据

DATA lt_compcode TYPE RANGE OF t001-bukrs.
APPEND VALUE #( sign = 'I' option = 'EQ' low = lv_bukrs ) TO lt_compcode.

WHEN COND

WHEN后面还可以使用OR、AND语法

LV_TYPE = COND #( WHEN lv_flag = '1' THEN '8' 
                  WHEN lv_flag = '2' THEN '5' ELSE '4')

生成GUID

根据GUID所需位数选择接收参数。

CALL FUNCTION 'GUID_CREATE'
   IMPORTING
*     EV_GUID_16       =
     ev_guid_22       = LV_GUID
*     EV_GUID_32       =
            .

将一个内表数据赋值到另一内表

按栏位名进行匹配赋值

MOVE-CORRESPONDING gt_t11[] TO lt_t11[].

按栏位顺序赋值,此方式推荐两个内表结构完全一致时使用

APPEND LINES OF gt_t11 to lt_t11.

字符串拼接

使用&&加‘|’方式

l_cond = |P~LOSFX = 'X' AND P~KALKA = 'Z1' AND |
            && |K~KALKA = 'Z1' AND FEH_STA = 'FR' |.

使用CONCATENATE

CONCATENATE gv_cond ' and caufv~auart IN @p_auart ' INTO gv_cond.

最简单的ALV开发

FORM form_alv_display .
  DATA: it_fields TYPE lvc_t_fcat,
        ls_layout TYPE lvc_s_layo.

  ls_layout-cwidth_opt = 'X'.
  PERFORM set_catalog CHANGING it_fields.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      i_callback_program = sy-repid
      is_layout_lvc      = ls_layout
      it_fieldcat_lvc    = it_fields
    TABLES
      t_outtab           = gt_usmm[]
    EXCEPTIONS
      program_error      = 1
      OTHERS             = 2.
ENDFORM.

FORM set_catalog CHANGING pt_fieldcat TYPE lvc_t_fcat.
  DATA ls_fieldcat TYPE lvc_s_fcat.

  DEFINE add_field.
    CLEAR ls_fieldcat.
    ls_fieldcat-fieldname = &1.
    ls_fieldcat-coltext = &2.
    APPEND ls_fieldcat TO pt_fieldcat.
  END-OF-DEFINITION.

  add_field 'APP'    'APP.' .
  add_field 'APP_NAME'    'APP. Name' .
  add_field 'UNIT' 'Unit' .
  add_field 'UNIT_NAME'  'Unit Name' .
  add_field 'DATE_FROM'  'FROM' .
  add_field 'DATE_TO' 'TO' .
  add_field 'INSTANCE_COUNT'    'Instance Count' .
  add_field 'MULTIPLIER'    'Multiplier' .
  add_field 'RESULT' 'Result' .

ENDFORM.

添加/删除前导零

添加前导零

lv_aufnr = |{ '001234567890' ALPHA = IN WIDTH = 12 }|.

删除前导零

lv_aufnr2 = |{ '001234567890' ALPHA = OUT WIDTH = 10 }|.

快速Show内表

cl_demo_output=>display( 内表 ).

去除前后空格

CONDENSE LV_STR NO-GAPS.

快速对比两个内表差异

传入的两个内表必须结构一致,key_length是作为key栏位的长度加总,比如这里我用werks,lgort,matnr三个栏位作为key值,那他们的总长度为48,所以key_length就传48即可,if_sorted表示传入的内表是否有按照key值排序,排序过的内表比对更快。
lt_del产出的是gt_mard_data内表里有但是gt_data内表里没有的数据
lt_add产出的是gt_mard_data内表里没有但是gt_data内表里有的数据
lt_mod产出的是两个内表都有的,但是除key值外其他栏位不一致的数据

DATA: lt_add   TYPE TABLE OF ty_data,
        lt_del   TYPE TABLE OF ty_data,
        lt_mod   TYPE TABLE OF ty_data,
        lt_nochg TYPE TABLE OF ty_data.

  CALL FUNCTION 'CTVB_COMPARE_TABLES'
    EXPORTING
      table_old  = gt_mard_data
      table_new  = gt_data
      key_length = '48'  "werks+lgort+matnr key值长度48
      if_sorted  = 'X'
    IMPORTING
      table_del  = lt_del
      table_add  = lt_add
      table_mod  = lt_mod
*     no_changes = lt_nochg
    .
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: ABAP调用函数是指在ABAP程序中调用一个函数模块。函数模块是一段可重用的代码,可以在不同的程序中被调用。在ABAP中,可以使用CALL FUNCTION语句来调用函数模块。调用函数模块时,需要指定函数模块的名称和输入参数。函数模块执行完毕后,可以返回输出参数和返回值。ABAP调用函数模块是一种常见的编程技巧,可以提高程序的可重用性和效率。 ### 回答2: 1. 什么是 ABAP Call Function? ABAP Call Function 是一种在 ABAP 程序中调用函数模块的方法。通过这种方法,可以在 ABAP 程序中调用SAP 中的函数模块来实现各种功能,比如数据读取、数据保存、数据更新等。 2. ABAP Call Function 的语法是什么? ABAP Call Function 的语法如下: <脚本语言> CALL FUNCTION <function_name> [DESTINATION <string>] [EXPORTING <parameter>] [IMPORTING <parameter>] [CHANGING <parameter>] [TABLES <parameter>] [EXCEPTIONS <exception>]. 3. ABAP Call Function 中的参数类型有哪些? ABAP Call Function 中的参数类型有: - EXPORTING:用于传递输入参数,传递的是一个单一值(Scalar)或者是一个结构体(Structure) - IMPORTING:用于传递输出参数,传递的是一个单一值(Scalar)或者是一个结构体(Structure) - CHANGING:用于传递双向参数,传递的是一个单一值(Scalar)或者是一个结构体(Structure) - TABLES:用于传递表格参数,传递的是一个内部表格(Internal Table) 4. ABAP Call Function 的执行顺序是什么? ABAP Call Function 的执行顺序如下: 1) 初始化变量; 2) 设置输入参数,进行必要的数据类型转换; 3) 调用函数模块; 4) 从输出参数中获取返回值; 5) 检测异常并进行错误处理; 6) 销毁变量。 5. ABAP Call Function 的优点是什么? - 提高程序的重用性和可维护性; - 减少程序的维护成本; - 减少开发人员对于底层实现的依赖程度; - 提高程序的可靠性。 总之,ABAP Call Function 在 SAP 系统中具有重要的作用,在编写 ABAP 程序时,开发人员需要熟悉 ABAP Call Function 的使用方法,以便在必要时快速、准确地实现所需功能。 ### 回答3: ABAP Call Function 是 SAP 中的一个功能模块,是在 ABAP 程序中调用远程函数的一种常见方式。用户可以直接通过函数调用来获取必要的数据或进行必要的操作,比如在 ABAP 程序中读取/写入数据、调用其他应用程序中的函数等。下面我们将详细介绍 ABAP Call Function 的三个主要部分: 1. 函数调用的头部信息: ABAP Call Function 的头部信息中包含了需要调用的函数名称,以及输入/输出参数的描述。用户需要在程序中先明确需要调用的函数名称,然后通过使用 SAP 的 Function Builder 工具来查看函数的输入/输出参数描述。可以将这些参数描述写入到函数调用的头部信息中,以告诉 SAP 系统如何执行函数调用。 2. 输入/输出参数: 函数调用的输入参数指向 ABAP 程序中的变量或常量。这些参数可以作为函数调用的输入值,在调用结束后也可以作为输出参数返回值。需要注意的是,函数调用的每个输入参数都需要指定相应数据对象的类型以及长度。 函数调用的输出参数被定义为返回变量,也就是调用函数后输出的结果。输出参数的类型和长度也需要与函数调用的函数定义匹配,以确保函数调用后可以得到正确的返回值。 3. 函数调用相关的其他信息: 函数调用还有一些其他的信息,比如错误信息、返回代码等等。在使用 ABAP Call Function 进行函数调用时,需要了解有哪些函数返回的信息是至关重要的,需要在程序中格外关注。 总之,ABAP Call Function 是 SAP 系统中非常重要的一个部分,用户在使用 ABAP 程序中调用需要在 SAP 中运行的函数时,就需要着重考虑如何使用 ABAP Call Function 进行函数调用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值