SAP ABAP
文章平均质量分 71
ABAP开发
stone0823
财务、SAP以及编程
展开
-
Functional ALV系列 (10) - 将填充FieldCatalog封装成函数
在前面的博文中,已经讲了封装的思路和实现,主要是利用 cl_salv_data_descr=>read_structdescr () 方法来实现。在这里,贴出代码方便大家参考。原创 2024-06-09 21:42:15 · 329 阅读 · 0 评论 -
Functional ALV系列 (09) - 双击跳转到另外一个ALV
在查看数据的时候,不总是只有一个界面,为了让用户更方便地查看数据,需要根据当前的数据跳转到另外的界面中,比如查看明细等。本文演示 ALV 比较实用的功能:双击 ALV 单元格跳转到另外一个 ALV 中。要实现的业务场景:报表首先显示航空公司信息,当用户点击航空公司 ID 所在字段的时候,跳转查看航空公司的航班信息。原创 2024-06-09 21:30:04 · 711 阅读 · 0 评论 -
如何对SAP数据库表进行增删改查操作(3)
本次来看看如何在不用编码的方式来修改 SAP 表中的数据,主要解决临时性修改的需求。原创 2022-09-12 22:17:31 · 1421 阅读 · 0 评论 -
面向对象 ALV (01) - 使用入门
SAP 提供的 cl_gui_alv_grid 是 SAP 第二代 ALV 框架,也被称作 ALV Grid。ALV Grid 是基于面向对象的技术实现的,主要的类是 cl_gui_alv_grid。本篇介绍 cl_gui_alv_grid 的基本使用方法。原创 2021-09-03 16:29:55 · 1888 阅读 · 0 评论 -
Functional ALV系列 (08) - Data Changed 事件
ALV 的 data changed 事件在离开单元格时触发,比如回车,tab 键等。利用 data changed 事件可以实现诸如校验,自动填充字段等功能。本文演示 data changed 事件的用法,实现对 ALV 界面编辑的数据自动保存到数据库,并且对 cityto 字段进行校验两个小的功能。首先编写一个可以运行的 alv 程序,并且将 data changed 事件加入到关联到 ALV:1) 声明 event 相关的变量data:gt_fieldcattypeslis_t_fi...原创 2021-07-07 10:46:20 · 1497 阅读 · 0 评论 -
Functional ALV系列 (07) - 事件处理
在处理 ALV 事件的时候,可以使用 reuse_alv_grid_display 的 it_events 参数。it_events 参数是一个内表,数据类型是 slis_t_event,每一行的数据类型为 slis_alv_event。仍然以上一篇将 ALV 导出到 Excel 为例,如果用 it_events 参数,方法如下:在 ALV 显示之前,将相关事件加入到 event 内表中:然后在 reuse_alv_grid_display 参数中设置 it_events 参数:完整代码:re原创 2021-07-02 12:04:03 · 852 阅读 · 2 评论 -
Functional ALV系列 (06) - 数据导出至Excel
ALV 数据导出至 Excel,其实就是将 ALV 对应的内表数据导出至 Excel。大家常见的 GUI_DOWNLOAD 导出,其实是将内表导出为文本文件,所以每次打开的时候提示文件格式不相符错误。本文提供基于 cl_salv_export_tool_xls 类实现导出的方法。为了方便调用,我将导出功能写在一个子例程中:form frm_export_excel using p_itab type standard table. data: file_length type i. data: l原创 2021-06-29 17:24:31 · 1633 阅读 · 0 评论 -
ABAP - 显示进度条
执行较长任务的时候,进度条能改善用户在等待时候的体验。在 ABAP 中显示进度条,是调用 SAPGUI_PROGRESS_INDICATOR 函数,示例如下:report z_progress_bar_demo.perform do_sth_to_kill_time.write : 'progress bar demo.'.*&---------------------------------------------------------------------**&原创 2021-06-17 14:28:22 · 1238 阅读 · 0 评论 -
Functional ALV系列 (05) - ALV 作为数据编辑界面
本篇介绍如何将 ALV 作为数据编辑界面来使用。关于 ALV 作为编辑界面的方法,我在 如何对SAP数据库表进行增删改查操作 这篇博文里已有详细说明,本文不再重复过程。本篇的目的是继续深入,讲解 ALV 作为界面的要点,并且提供一个通用的 ALV 编辑和保存数据的程序。FALV 作为编辑界面的要点编写一个能运行的用 ALV 显示数据的程序从 SAPLKKBL 拷贝 standard 工具栏到本程序,命名为 zstandard在工具栏中添加一个 Save 按钮设置 ALV 可编辑在程序中添加用于原创 2021-06-17 14:02:18 · 784 阅读 · 1 评论 -
ABAP - 锁对象及使用方法
数据库锁是指为防止多人同时操作数据库导致数据不一致而采取的一种机制,简单来说,就是当有人加锁并且保存数据的时候,其他人就进不去或者只能浏览数据,不能修改。SAP ABAP 语言的锁是在语言层面设计的一种锁机制,它是一种逻辑锁,独立于数据库锁。SAP 帮助 给出了一个例子:在 SAP 示例数据订票系统中,为了避免订票过度,通过 E_Booking 锁对象来对两个数据库表 SFLIGHT (航班表) 和 SBOOK (订票信息表) 进行加锁和释放。创建锁对象假设我们需要对数据表 spfli 添加锁,操作步原创 2021-06-15 15:13:10 · 5553 阅读 · 2 评论 -
Functional ALV系列 (04) - 自定义工具栏
调用函数生成 ALV,显示的时候已经具备了默认的工具栏。在很多情况下,需要自定义工具栏,比如增加与用户交互的功能,也可能希望移除某个按钮。自定义工具栏有三个步骤:用 SE41从程序 SAPLKKBL 拷贝 GUI Status,将 STANDARD_FULLSCREEN, 拷贝到程序中, GUI Status 名为 ZStandard将 REUSE_ALV_GRID_DISPLAY 的 i_callback_pf_status_set 参数设置为某个子例程,在子例程中设置工具栏将 REUSE_A原创 2021-05-24 10:35:38 · 638 阅读 · 5 评论 -
Functional ALV系列 (03) -双击ALV事件
本篇通过两个例子讲解双击 ALV 的单元格事件用法。第一个例子是双击跳转到 SAP 标准事务码,第二个例子是双击单元格显示明细界面。双击单元格执行事务码操作假设 ALV 显示的是物料编码的清单,双击物料编码字段,执行 MM03 操作,跳转到物料主数据的界面。首先编写如下代码:为了能处理双击事件,我们需要定义用于该报表的 GUI status,一般从其它程序中拷贝。常用的是从 SAPLKKBL 程序中拷贝。操作方法如下图所示:点击「Status」按钮将 standard_fullscreen 拷贝原创 2021-05-20 09:51:37 · 2374 阅读 · 1 评论 -
Functional ALV系列 (02) - 如何填充 Field Catalog
填充 field catalog 是 使用 ALV 显示数据的一个必须内容。本篇说明如何填充 field catalog。接着上一篇的示例。手工填充这种方法在开发人员中应用的最广泛,手工为每一个需要输出的 ALV 填充 field catalog 。下面的示例说明了这种方法:因为代码的重复,常见的方式是将填充 field catalog 的代码放在一个子例程或者宏定义中:子例程的代码请自行参考上一篇博文。自动填充自动填充的方法在上一篇已经讲解过。因为自动填充的灵活性比较高,我把它写在一个专门原创 2021-05-18 14:50:30 · 558 阅读 · 0 评论 -
Functional ALV系列 (01) - ALV开发入门
SAP 的 ALV 全称是 SAP List Viewer,是 SAP 用于显示行列表格化数据的主要方式,从 SAP 推出的技术来看,大体有如下几种函数生成 ALV,调用 REUSE_ALV*相关的函数ALV Grid 控件框架:SAP 提供 cl_gui_alv_grid 类,以面向对象的方式实现SALV: SAP 另外一种面向对象的实现,与 ALV Grid 比较起来,简化了开发的复杂程度。但不支持 ALV 编辑Function Module based ALV 是较早出现的开发技术。使用原创 2021-05-17 15:31:45 · 449 阅读 · 1 评论 -
如何在ABAP中使用集(Sets)
合理地使用集,能有效避免硬编码,增加程序的可维护性和灵活性。本文以实现资产负债表为例,讲解 Set 的用法以及 ABAP 中如何获取 Set 的值。维护集合 (Set)在 SAP 中,通过下面的事务码维护集GS01: 创建集GS02: 修改集GS03: 显示集GS04: 删除集SAP 支持 4 种类型的集:基本集(basic set):在集中保存单一维度的值。比如以报表项为基础建立基本集,每一个报表项由会计科目的范围组成。在创建 Set 的时候,需要指定参照的数据库表和字段。回车原创 2021-05-08 15:22:33 · 5136 阅读 · 0 评论 -
ABAP 获取期间第一天和最后一天的日期
根据期间获取第一天和最后一天的日期,可以使用本篇演示的两个函数,避免字符串拼接的方式。FIRST_DAY_IN_PERIOD_GET: 获取某期间第一天的日期,依据公司代码的期间变式LAST_DAY_IN_PERIOD_GET: 获取某期间最后一天的日期,依据公司代码的期间变式report z_day_fm_test.data: year like t009b-bdatj, " year per_variant like t009b-periv, " fis原创 2021-04-23 14:01:03 · 2885 阅读 · 0 评论 -
如何通过ABAP获取会计科目的字段状态?
SAP FI 基于科目的字段状态,在配置的时候有两个事务码: OBC4 基于字段状态组,OB41 基于过账码,两者共同作用来确定凭证输入的时候字段是否为必须输入,是否为隐藏。有些场景,可能需要通过编程获取会计科目的字段状态,比如自开发了一个程序来输入会计凭证。本篇博文介绍 SAP 对字段状态的存储机制,提供通过 ABAP 代码来获取字段状态码的方法。我们先看看界面 OBC4 的设置:OBC4 界面设置的结果存储在 T004F 表中,但并不是以直观的方式来存储。不妨看一下(相关表我都将数据放到 Exce原创 2021-03-24 17:10:36 · 1485 阅读 · 1 评论 -
ABAP - 文件对话框
在 selection screen 中,经常要用到文件相关的对话框,比如选择本地文件上传,将数据从 iternal table 下载到本地等,为了增加程序的友好性,需要用到文件相关的对话框。本篇博客对使用对话框的常见方法进行汇总总结,以供参考。如果不用文件对话框,最简单的方法是定义一个 localfile 类型的参数( parameter)。下面的代码演示了这种方法。用户可以在选择屏幕中,手工输入文件的 full path:KD_GET_FILENAME_ON_F4为了增加程序的友好性,我们对原创 2021-03-17 23:45:05 · 1523 阅读 · 0 评论 -
ABAP - 在报表中使用模板文件
在制作报表的时候,经常需要基于 Excel 的模板文件来编制。可以把 Excel 模板文件上传到应用程序服务器上。本篇博文演示如何将文件上传,在 ABAP 代码中从 application server 下载到本地,并且通过 OLE 操作本地文件。上传模板文件通过事务码 SMW0 上传本地的文件。在初始界面中,选择 「Binary Data for …」,然后点击 「Find」按钮:进入下一屏幕,在 Package 字段输入开发包,选择开发包方便以后对文件的查找。按 F8 执行,点击「创建」按钮原创 2021-03-17 15:08:02 · 1115 阅读 · 0 评论 -
ABAP 面向对象程序设计 (05)- 接口
ABAP 面向对象编程范式的接口同其它语言类似,主要的作用是规定类的方法和属性名称。举一个例子,我们在银行有账号,有储蓄卡的账号,也有信用卡的账号。储蓄账号和信用卡账号的共同点是都有取款 (withdraw) 、存款 (deposit) 和余额 (balance)。在设计的时候可以先创建一个 account 接口,然后对于储蓄卡账号和信用卡账号都实现该接口。只有定义,没有实现没有 modifier,也就是说接口没有 public, pr.原创 2020-11-26 22:00:33 · 905 阅读 · 0 评论 -
快速掌握SAP BDC数据导入
对于有任何语言编程经验的人员来说,BDC 方式导入数据不失为一种不错的选择。BDC 可以将操作过程录制的记录自动生成 ABAP 代码,并且可以基于自动生成的代码进行优化,加上诸如数据校验,数据导入日志等功能。本篇以创建固定资产 AS01 事务码为例,讲解如何有效利用 BDC 进行数据导入。原创 2020-11-25 20:09:32 · 2883 阅读 · 0 评论 -
LSMW录屏方式批导数据的要点
LSMW 支持 Batch Input/Direct Input、录屏、BAPI 和 iDoc 四种导入方式,录屏无疑是相对简单的一种方式。本博客试图从简化 LSMW 的理解和应用角度,说明 LSMW 通过录屏导入数据的一些要点。LSMW 的特点之一是步骤比较多,乍一看这么多步骤,容易产生畏难的情绪,网上很多 LSMW 的教程,也往往不解释逻辑,只说每一步怎么操作,也容易看的云里雾里。其实,如果我们把 LSMW 所有这些操作步骤分成三个大的方面,就容易多了。以创建固定资产的事务码 AS01 为例,完成第一原创 2020-11-24 20:12:50 · 2467 阅读 · 0 评论 -
ABAP 面向对象程序设计 (04)- 继承
ABAP 语言在实现面向对象的继承上总体与其它语言类似,区别主要是语法。本篇从语法的角度介绍 ABAP 如何实现继承。ABAP 继承要点:object 类是所有类的祖先,object 是一个空的抽象类,没有任何属性和方法子类继承父类所有 public 和 protected 的属性和方法ABAP 只支持单继承支持子类对方法进行改写 (override),使用 redefinition 关键字本篇将创建一个父类 lcl_vehicle 和一个子类 lcl_car,lcl_car 继承自 lcl原创 2020-09-20 23:42:19 · 1130 阅读 · 0 评论 -
saplink的安装和使用
saplink 用于在不同的 SAP 系统之间传输开发物件和 DDIC 对象,它和其下一代产品 abapGit 都已经在 Github 上开源,如果是 Netweaver 702 之后的产品,建议使用 abapGit,之前的版本只能使用 saplink。saplink 存在较多 bug,项目已经没有开发者维护,如果不能驾驭 saplink,不要在项目中用 saplink 来传输开发物件。本文介绍 saplink 的安装和基本使用方法。原创 2020-08-25 21:32:27 · 3617 阅读 · 0 评论 -
ABAP 面向对象程序设计 (03)- 对象的创建
本篇博文介绍创建对象的一些知识点。包括构造方法的运用,单例模式等原创 2020-07-26 22:52:44 · 2510 阅读 · 0 评论 -
厌倦了SE11/SE16N? 告诉你如何在Excel中查看SAP的表数据
SAP 提供 SE11 / SE16 / SE16N 查看表数据,SE11 首先进入的是表结构界面。如果表设置了表维护生成器 (Table maintenance generator),可以使用事务码 SM30 查看和维护表数据。以上这些方法查看表数据,有一个共同的问题:SAP的数据展示界面,基于 SAP List Viewer 或者 ALV Control ,能对数据做排序、筛选、Number 字段求和等常规操作,但复杂的加工处理不得不借助于 Excel 。这些界面的数据,可以导出到 Excel,但格式还原创 2020-07-20 21:27:25 · 3702 阅读 · 0 评论 -
ABAP 面向对象程序设计 (02)- 属性和方法
ABAP 中的类,最主要的组件有属性 (attributes) 和方法 (methods) , 构造方法 (constructor) 是一类特殊的方法,在创建对象实例时,构造方法自动运行。可以从两个角度来看属性和方法,第一个角度是从可见性的角度,属性和方法可分为 public, protected 和 private。因为在程序中定义的 local class,智能在本程序中使用,所以下面的规则主要是针对 global class 而言。local class 的范围局限在程序内部。public 属性原创 2020-07-18 17:59:18 · 3737 阅读 · 0 评论 -
ABAP 面向对象程序设计 (01) - 类和对象
SAP 公司于 1999 年发布了面向对象的 ABAP,但在 ABAP 开发圈子中并不普及,实际开发中更多的是面向过程的开发方式。本文简单介绍 ABAP 面向对象开发的过程,重点是如下 ABAP 的语法:如何定义一个类如何创建对象的实例 (object instance)如何调用对象的方法ABAP 支持 local class 和 global class , local class 通过事务码 SE38 / SE80 创建,只能在本程序中使用;global class 通过事务码 SE24 来原创 2020-07-12 23:59:39 · 4104 阅读 · 1 评论 -
如何对SAP数据库表进行增删改查操作(2)?
本篇接着上一篇博文,继续讲解如何在 SAP 系统外部,方便的对 SAP 的数据库表进行增删改查操作。推荐的方式:SAP 暴露 OData 服务供外部调用SAP 暴露 Restful Service 供外部调用总的来说,OData 是比较新的 Restful Service 规范,在 SAP 端编写代码相对容易,但早期版本可能不支持。Restful Service 较早的版本是可以实现的。关于 OData 使用对 Netweaver 版本要求,请参考我另外一篇博文:SAPUI5 (34) - OD原创 2020-06-30 23:42:19 · 877 阅读 · 2 评论 -
如何对SAP数据库表进行增删改查操作
本文介绍如何对SAP数据库表进行增删改查操作,尤其是如何提供编辑的界面。现在有一个 zemployee 表,表的字段如下:通过ABAP 代码进行 CRUD 操作INSERT 语句对 database table 的记录进行插入操作。语法如下:INSERT dbtab from wa/itab. 如果至少有一笔记录插入成功,sy-subrc = 0,如果至少有一笔记录插入失败, sy-subrc =4,比如可能由于 primary key 重复。DATA: gs_emp LIKE zemploy原创 2020-06-28 23:36:30 · 3416 阅读 · 0 评论 -
ABAP DOI详解(3)
这一篇解决上一篇的几个遗留问题:如何根据屏幕大小让Excel自适应Excel单个单元格写入设置Excel属性错误处理原创 2016-12-22 21:04:43 · 3932 阅读 · 0 评论 -
ABAP DOI详解(2)
调用Excel模板文件来实现SAP DOI。这一篇,我们就来操作Excel模板文件,excel文档放在dialog screen中显示。原创 2016-12-19 16:20:37 · 10317 阅读 · 3 评论 -
ABAP DOI详解(1)
DOI是SAP提供的解决与Office集成的开发技术。早期SAP用于解决Office集成,使用的是OLE技术。DOI是SAP提供的OLE的替代品,用面向对象的方法实现,比OLE易于操作,性能提高。原创 2016-12-16 14:42:12 · 12713 阅读 · 2 评论 -
使用Eclipse开发ABAP程序
Eclipse环境开发ABAP程序原创 2015-09-11 14:53:44 · 17044 阅读 · 2 评论