ABAP面试

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

report

内表

创建内表

1、第一种方式

先定义types ,然后再type table of 定义内表

types : begin of <typ_name>,
end of <typ_name>.
dara : <itab> type table of <typ_name>.

4、第四种方法

引用标准表创建内表

data : <i_tab> type table of mara .

5、第五种方法,

引用标准表并且添加自定义字段创建内表

data : begin of <itab>,
include structure mara.
data : clr type char4,
end of <itab>.
获取内表行数

通过describe获得内表行数。

describe table <itab> line n.
不用modify直接更新内表

LOOP AT ASSIGNING FIELD SYMBOL

loop at gt_alv assigning field-symbol(<fs_output>).
fs_output-waers = ls_prcd_elements-waers.
endloop.

选择屏幕

屏幕元素创建
1、select-options

对象名称for参考对象,定义范围选择条件

select-options : s_bukrs for bukrs.

​ 生成一个含有4个字段的内表: sign option low high

ranges : s_bukrs for bukrs.

sign : 标志位 值为I或者E 意义为option运算符是否取反,I表示包含,E表示排除

option: 运算符 如果high不为空,这可以使用bt(between and) 或者nb(not between)。

2、parameters

对象名称 type/ like 对象名称,定义单选条件。

屏幕输入域显示参数控制

obligatory : 必输

no-display: 显示控制

no-extension : 多行输入控制

as CheckBox : 创建复选框

visible length vlen : 显示控制长度

parameters 对象名 as listbox visible length vlen 创建下拉列表

3、输入值的控制

default : 默认值

lower case 允许输入小写字母(sap 屏幕会默认把输入后的字母转换为大写)

matchcode object search_help : 为屏幕对象加上指定的F4帮助对象. se11 定义搜索帮助对象

memory id : 定义select-option 内存参数,可以讲屏幕对象输入的值保存到指定的内在参数中,通过get parameter 方法直接从内存读取该对象的值。

4、选择屏幕事件流

load-of-program 程序执行时,自动触发该事件

initialization 该事件在屏幕未显示前执行,初始化程序

at selection-screen output 选择屏幕PBO事件,显示选择屏幕之前触发

at selection-screen 选择屏幕PAI事件,在选择屏幕上点击执行后触发。

start-of-selection 数据选择行开始

end-of-selection数据选择行结束

top-of-page 页眉控制

end-of-page 页脚控制

at line-selection 行选择控制,用户选择或者双击某行是触发

at user-command 用户交互控制,用户选择某个GUI功能是触发

5、选择屏幕动态展示

拿冲销和过账举例子

先设置过账和冲销两个单选按钮 RADIOBUTTON r1 / r2 按钮需要分配user-command 属性

然后给需要动态显示的项设置不同的组 MODIF ID md1/md2

在选择屏幕的pbo事件中 判断screen-group1 = ‘md1’ screen-active = ‘0’. 就把md1下所有项都隐藏掉了

IF r_cancel = 'X'.
    LOOP AT SCREEN.
      IF screen-group1 = 'MD1'.
        screen-active = '0'.
      ENDIF.
      MODIFY SCREEN.
    ENDLOOP.
  ELSEIF r_run = 'X'.
    LOOP AT SCREEN.
      IF screen-group1 = 'MD2' .
        screen-active = '0'.
      ENDIF.
      MODIFY SCREEN.
    ENDLOOP.
  ENDIF.
6、选择屏幕两个按钮同一行显示

comment xx(Y): 、 这条语句的作用是讲该语句后面的第一个screen element 定位在这一行的XX位置,长度为y

selection-screen begin of line.
	selection-screen comment(10) for field but1.
	selection-screen comment(15) for field but1.
selection-screen end of line。	

opensql

inner 和left,right 是且与或的关系

1、不要使用select * ,会占用大量abap 内存

2、 不要使用select distinct 使用 sort + delete adjacent duplicates

3、不要使用嵌套select 。。。 endselect。

4、确定只查询一条数据时,应用select single

5、需要统计时,可以使用sql+聚合函数

6、尽可能的使用abap sort 排序 不使用order by

7、使用二分法查询内表数据速度

read table  itab  with key  binary search.
for all entries in

1、in 条件所在内表不能为空(空值相当于没有任何条件,会取出所有数据)

2、in条件内表数据大于5000时不建议使用,一定要使用尽量每次使用3000,循环方式

3、该语句会自动去重,相当于distinct ,使用时尽量带出主键

alv

alv 是 abap list view 是abap报表显示工具,它把内表中的内容以设定的格式显示出来,并且可以添加自定义的功能,比如打印出来

alv 分为两种 function alv 和oo alv

function alv

reuse_alv_grid_displary 网格展示 (常用)

reuse_alv_list_displary 列表展示

类型池slis

fieldcat 字段设置

gs_field type slis_t_fieldcat_alv

wa_field type slis_fieldcat_alv

常用的field设置

wa_field-fieldname :内表字段名称

​ seltext : 展示名称 (seltext_l 长 seltext_m 中 seltext_s 短)

​ du-sum : 总计列值

​ edit : 可编辑

​ just : 对齐 R L C

​ emphasize 设置列颜色 使用4位字符代表颜色

​ 首位C(color)

​ 二位1-7数字代表颜色 3黄色,5绿色 6红色

​ 三位 1/0 代表反转颜色启用

​ 四位 1/0 增强颜色启用

设置单元格颜色

内标准含有字段

color TYPE LVC_S_scol.

设置某单元格可编辑

FIELD_STYLE TYPE LVC_T_STYL, " 为结果内表添加设置编辑状态所需的字段

DATA STYLELIN TYPE LVC_S_STYL.

STYLELIN-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. " 循环内表设置为不可编辑状态

DATA: BEGIN OF ITAB OCCURS 0,
      ZQRFH_ICON TYPE STRING,

      ZLDATE TYPE ZLDATE,

      ZLUSR TYPE ZLUSR,

      K TYPE STRING,

      FIELD_STYLE TYPE LVC_T_STYL, " 为内表添加设置编辑状态所需的字段  

      END OF ITAB.

S_FIELDCAT-FIELDNAME = 'ZBQFS'. " 设置列可编辑

S_FIELDCAT-EDIT = 'X'.

APPEND S_FIELDCAT TO T_FIELDCAT.

DATA STYLELIN TYPE LVC_S_STYL.

LOOP AT ITAB.

    IF ITAB-ZXMDM = 'D' OR ITAB-ZXMDM = 'F' OR ITAB-ZXMDM = 'H'.

      STYLELIN-FIELDNAME = 'ZBQFS'. " 需要编辑的列名

      STYLELIN-STYLE = CL_GUI_ALV_GRID=>MC_STYLE_DISABLED. " 设置为不可编辑状态

      APPEND STYLELIN TO ITAB-FIELD_STYLE.

      CLEAR STYLELIN.

      MODIFY ITAB.

    ENDIF.

endloop.
layout 布局控制

gs_layout type slis_layout_alv

常用layout设置

gs_layout-colwidth_optimize = ‘X’ 自动设置列宽

​ coltab_fieldname = ‘CELLCOLOR’ 设置某个字段值显示颜色

​ info_fieldname = ‘CLR’ 设置行显示颜色 ,CLR为结果内表里的字段

​ zebra = ‘X’ 设置斑马线条显示颜色

​ box_fieldname = ‘XH’ alv 选中行 ,XH为结果内表里的字段

call function ’REUSE_ALV_GRID_DISPLAY‘

exporting

	i_callback_program = g_repid

​ is_layout = gs_layout

​ it_fieldcat = gs_fieldcat

​ it_sort = lt_sort : 排序

	i_save = ’A‘  生成布局

​ i_callback_pf_status_set = ‘FRM_ALV_PF_STATUS’ : gui状态

​ i_callback_user_command = ‘FRM_ALV_USER_COMMAND’ : 用户pai事件

tables

​ t_outtab = it_out[]

it_sort-fieldname = ‘’ 设置需要排序的字段名

it_sort-up = ‘X’ 设置升序

或者

it_sort-down = ‘X’ 设置降序

如何做到单击跳转事务

1、首先在fieldcat中设置hotspot = ’X‘

2、然后再user_command事件中加入

case r_ucomm

wuth ‘&IC1’

​ set parameter id ‘GJR’ p_gjahr. 设置参数

​ call transaction ‘MM03’ and skip firsy screen.调用mm03事务码

GUI状态栏

隐藏gui状态栏按钮: excluding

DATA : lt_exfcode TYPE TABLE OF sy-ucomm.

  IF p_aqkcsq <> 'X'.
    append 'SAVE' to lt_exfcode.
  ENDIF.
  SET PF-STATUS 'STANDARD' EXCLUDING lt_exfcode.

dialog

对话框事件和逻辑流

调用时首先触发PBO->子屏幕PBO,然后显示屏幕,在屏幕上点击按钮后,触发PAI事件->子屏幕PAI,触发结束后又会执行PBO->子屏幕PBO

字段输入事件

ON INPUT:指定某子工程只在给定字段具有非初始化值时才被调用。

ON REQUEST:当屏幕中文本输入字段的值发生变化

会触发该程序所定义的子程序。该事件适合于屏幕中所有字段值的变化时检查更新。

CHAIN-INPUT | CHAIN-REQUEST :该语法可以同时控制屏幕中多个字段的输入事件。

屏幕退出事件

module exit at exit-command。

leave to screen 0.

常用标准T-CODE

me21n : 创建采购订单

me22n : 更改采购订单

me23n : 查看采购订单

me41 : 创建询价

mir4 : 查看发票信息

mm03 : 查看物料主数据

cs03 : 查看bom

mb52 : 批量查询库存

mb51 : 查看物料移动记录

mb03 : 查询物料凭证

常用bapi

bapi_po_create1

: 创建采购订单

bapi_po_change

: 更改采购订单

bapi_goodsmvt_creaate :

物料移动,创建物料凭证

call function 'BAPI_GOODSMVT_CREATE'

exporting
	goodsmvt_header = '' 抬头
	goodsmvt_code = ''   移动货物代码
importing
	goodsmvt_headret = ''  返回包含凭证编号和凭证日期的结构
table
	goodsmvt_items = ''  明细数据
	return = '' 返回值

GOODSMVT_CODE就控制了对应哪个事物码的功能,下面给出该参数的值和对应的事务码:

01 MB01 : 采购订单收货
02 MB31 : 订单收货
03 MB1A : 发货过账
04 MB1B : 转移过账
05 MB1C : 投料
06 MB11 :
07 MB04

数据存放在表T158G 中。

BAPI_TRANSACTION_ROLLBACK
BAPI_TRANSACTION_COMMIT
BAPI_MATERIAL_SAVEDATA 创建物料主数据
BAPI_SALESORDER_CREATEFROMDAT2

创建销售订单

LOGIC_SWITCH-PRICING = ‘G'

A 复制价格组件和重新确定等级
B 执行新的定价
C 复制手工定价因素且重新确定其它因素
D 复制不变的定价因素
E 采用价格组件和固定值
F 复制价格元素,调整价值与固定
G 复制不变定价因素且重定税款
H 重新确定运费条件
J 重新确定确认的采购净价格/价值(KNTYP=D)
K 采纳价格组件和重新确定税收
M 复制价格要素,转换值
N 传输定价组件未更改, 新成本
O 重新确定变式条件(KNTYP=0)
Q 重新确定计算条件(KNTYP=Q)
R 应用价格部分和奖金条件
U 重新确定贵重金属条件(KNTYP=U)
S 装运&借方 (IBU HiTec)

常用表

1、MARA: 常规物料数据

2、MARC: 物料的工厂数据

3、MAKT: 物料描述

9、LFA1: 供应商主数据(一般数据)

10、LFB1: 供应商主数据(公司代码)

23、KNA1: 客户主数据(一般数据)

24、KNB1: 客户主数据(公司代码)

14、EKKO: 采购订单抬头

15、EKPO: 采购订单行项目

16、MKPF:物料凭证抬头

17、MSEG : 物料凭证行项目

BDC录屏

CALL TRANSACTION ‘ME41’ USING bdcdata

* OPTIONS FROM BDCOPT

​ MESSAGES INTO bdcmsg

​ UPDATE ‘S’

​ MODE lv_mode. .MODE ‘N’ . "显示模式:A ;N 后台 ;E

增强

常用增强:出口 userexit badi ,隐式增强 ;前两种可以用程序找,也可以找到程序对应的包,然后包里搜索;隐式增强就是触发事件,需要debug在标准程序里找地方加代码

一代增强

基于源代码的增强

第一代增强基于源代码,是SAP系统提供一个空代码的子过程,在这个子过程中用户可以添加自己的代码。

这类增强需要修改SAP标准代码,他们发布时都是空的,集中在一些文件名倒数第二个字符为Z的包含过程中,由于实在标准程序中,所以所有程序的全局数据都可以使用,而且系统升级时会被覆盖掉。所以一般不用此类增强。

查找一代增强的方法

1、在主程序中查找倒数第二个字符为Z的包含程序

2、在程序中搜索userexit_开头的子程序

二代增强

基于函数模块的增强

用增强管理smod和增强编辑cmod 维护。在标准程序中,使用call customer-function 'XXX’调用函数模块,

查找二代增强的方法

所以可以通过在程序中搜索customer-function来查找二代增强,第二代增强函数名构成是exit_ 程序名_‘XXX’ (XXX是call function中的编号)。

针对数据表的增强出口是“CL”打头的结构,这些结构将以.include结构的形式包含到相应的数据表中,用户可以通过向这些结构中添加字段从而达到对数据表字段的增加。

第二代增强主要包括四类:

函数增强:E.Ehancement Exits(函数增强) : 这些出口以exit_程序名 _‘编号’ ,可以在se37中查看,也可以在数据字典TFDIR中查询Exit_开头的函数。

GUI增强:C.GUI codes : 用于区域菜单和工具栏菜单的增强

屏幕增强 : S.Subscreens : 用于子屏幕设计增强

表结构增强 : include structure : 用于表结构的增强

按照用途分类:

功能模块出口(Function Module exits) : 在SAP标准事务中添加业务逻辑,一般用于验证标准事务中的字段

屏幕出口(Screen Exits) : 定义自己的子屏幕或激活屏蔽标准事务中的菜单项

关键字出口(keyword exits) : 在

三代增强 badi

se18 创建及维护badi对象

se19 维护badi实例,badi功能的实现

1、先创建增强点

2、在增强点元素定义标签创建badi

3、然后在菜单中的“接口" 创建接口 ,并且维护方法和参数。

4、然后就可以创建BADI实施

调用方法

method  baid~方法名.
endmethod.

创建的badi可以在程序中直接调用

badi1 type ref to zbadi_test_F01. 参照接口对象
badi2 type ref of zbadi_test001_class. 参照实施类.

查找badi的方法

通过SE24,输入CL_EXITHANDLER,然后在方法GET_INSTANCE中设置断点,然后运行事务代码判断 exit_name的值

四代增强

RFC函数

1、任何一个abap程序都可以调用一个远程调用函数,使用语句:CALL FUNCTION …DESTINATION. sm59 创建abap链接

无论是in update task 还是in background task的函数。

都是遇到了commit work语句之后才调用的,

如果没有commit work,

函数不会被触发。

防止重复调用

未有答案

调用日志

未有答案

RFC通讯模式

DESTINATION

同步通信
异步通信

smartform ----0331:面试

模板与table的区别

1、table可以动态添加行,数据输出时会根据列宽自动换行,可以固定列宽,但是默认情况下控制不了行高,如果想要模板一样固定行高,需要将table的无换页属性打钩

2、模板是静态的,固定列宽,行高,当输出数据过长时会自动截断,通常用于静态表单开发,模板与loop嵌套使用,可以实现固定行高,列宽的表单表单开发。

模板分页如何操作

首先创建一个loop循环

然后创建一个可选逻辑流,用于判断变量值是否需要分页,判断条件结果为true

smartform打断点

可以在程序行里面输入 断点语句 break-point

webservice

公司结构 FI SD MM PP basia

内存

EXPORT p1 FROM ekko-submi TO MEMORY ID ‘ZXRMM04’.放入内存

IMport p1 from ekko-submi from memory id ‘’ 从内存中读取

程序优化

优化程序性能的基本原则

1、减少对数据库的访问

访问数据库会消耗非常多的时间,频繁的访问数据库,对程序性能的影响是显而易见的。

2、减少循环次数

循环会增加CPU的负载。虽然每次循环执行的时间比较短,但是随着循环的次数增加,累计的处理时间就很长

3、减少网络往返传输的数据量

网络传输也很明显的影响程序的执行时间。数据量越大,网络延迟的时间就会很明显

优化程序性能的方法

1、确定影响程序性能的主要原因

要解决问题,就要先确定问题出在哪里

2、通过内表处理减少对数据库的访问

​ 2.1、使用select。。。into table 一次性的把要处理的数据读入到内表中进行处理

​ 2.2、如果表字段很多的情况下,尽量不要使用select * 返回所以字段值,只返回指定的字段值,

​ 尽量避免CORRESPONDING。因为CORRESPONDING存在系统内部存在隐式操作,影响性能。

  • 检查元素名称匹配;
  • 检查元素类型匹配;
  • 元素类型转换。

​ 2.3、尽量在where语句中使用索引字段限定数据的范围,索引字段按顺序排列。

  • where 语句中尽量使用 = 、IN
  • 控制使用>、<、>=、<=、between and
  • 避免使用<> 、 like、not like

​ 2.4、如果要取一批数据的最大值,最小值,平均数、总数,可以使用select+聚合函数来取值,而不是将数据取到内表中再进行处理。

​ 2.5、如果确定返回只有一条记录,使用select single 或者select 。。up to 1 rows读取记录

​ 2.6、使用for all entries 减少批量条件下对数据库的访问次数,条件内表需要根据结合条件排序并删除重复数据,并判断不能为空。

​ 2.7、需要排序是,不要使用order by进行排序,应当用sort操作内表排序

​ 2.8、更新\插入\删除数据表数据时,尽量使用内表一次更新。

双LOOP循环优化

指针

此方法 标准程序可以获得任何字段

ASSIGN (‘(SAPMV45A)VBAK-AUART’) TO <LS_AUART>. "获取订单类型

总结

记录 提升 有问题还请大姑们指出

  • 14
    点赞
  • 99
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些常见的SAP ABAP面试题,但并不会提供答案,因为这些问题需要您自己思考和回答。以下是一些可能会被问到的SAP ABAP面试题: 1. SAP ABAP是什么? 2. 如何在SAP ABAP中定义变量? 3. 什么是函数模块? 4. 如何在SAP ABAP中处理异常? 5. 如何在SAP ABAP中进行调试? 6. 什么是内表?如何定义内表? 7. 如何在SAP ABAP中处理日期和时间? 8. 如何在SAP ABAP中处理字符串? 9. 如何在SAP ABAP中使用SELECT语句? 10. 如何在SAP ABAP中使用LOOP语句? 11. 如何在SAP ABAP中使用IF语句? 12. 如何在SAP ABAP中使用CASE语句? 13. 如何在SAP ABAP中使用BREAK-POINT语句? 14. 如何在SAP ABAP中使用MESSAGE语句? 15. 如何在SAP ABAP中使用CATCH语句? 16. 什么是数据字典?如何定义数据字典对象? 17. 如何在SAP ABAP中使用ABAP OO? 18. 如何在SAP ABAP中使用ALV报表? 19. 如何在SAP ABAP中使用BAPI? 20. 如何在SAP ABAP中使用RFC? 21. 如何在SAP ABAP中使用IDoc? 22. 如何在SAP ABAP中使用ALE? 23. 如何在SAP ABAP中使用EDI? 24. 如何在SAP ABAP中使用BDC? 25. 如何在SAP ABAP中使用LSMW? 26. 如何在SAP ABAP中使用用户退出? 27. 如何在SAP ABAP中使用BADI? 28. 如何在SAP ABAP中使用Enhancement Spot? 29. 如何在SAP ABAP中使用Enhancement Section? 30. 如何在SAP ABAP中使用Function Exit? 31. 如何在SAP ABAP中使用事件? 32. 如何在SAP ABAP中使用ABAP List Viewer(ALV)? 33. 如何在SAP ABAP中使用SAP Query? 34. 如何在SAP ABAP中使用Smart Forms? 35. 如何在SAP ABAP中使用Adobe Forms? 36. 如何在SAP ABAP中使用BSP? 37. 如何在SAP ABAP中使用Web Dynpro? 38. 如何在SAP ABAP中使用SAPUI5? 39. 如何在SAP ABAP中使用Fiori Launchpad? 40. 如何在SAP ABAP中使用SAP HANA?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值