ABAP 随笔 SM30常见增强操作自动带描述等

作者:SAPTAB 约 7 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

原创 Tab Zhu [ SAP TAB ](javascript:void\(0\);)

**点击蓝字关注我们**

富强 民主 文明 和谐

自由 平等 公正 法制

爱国 敬业 诚信 友善

_**SM30

** _

**常见增强操作**

**不念过** **去**

**START**

**不畏将来**

我们使用的是在SM30中自动带出销售订单类型的描述

首先我们创建一张表和一个维护视图(维护视图的好处就是可以方便增加字段),维护视图中维护标记为R标识字段不可输入

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

然后需求就是根据填入的销售订单号,去TVAKT中抓取描述,给context字段

我们根据维护视图创建表维护生成器

函数组名称为ZVJXZHU_FG_01

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

接着进入到函数组ZVJXZHU_FG_01界面下:

为了防止维护程序的时候出现空的VBELN,所有我们进入到9000屏幕布局页面将VBELN和POSNR设置为必输,双击vbeln列,将input设置为required。

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

然后代码部分为在9000屏幕的代码下增加:双击创建

PROCESS BEFORE OUTPUT.

MODULE LISTE_INITIALISIEREN.

LOOP AT EXTRACT WITH CONTROL

TCTRL_ZVJXZHU_01 CURSOR NEXTLINE.

MODULE LISTE_SHOW_LISTE.

ENDLOOP.

MODULE mod_set_sort.

*

PROCESS AFTER INPUT.

MODULE LISTE_EXIT_COMMAND AT EXIT-COMMAND.

MODULE LISTE_BEFORE_LOOP.

LOOP AT EXTRACT.

MODULE LISTE_INIT_WORKAREA.

CHAIN.

FIELD ZVJXZHU_01-VBELN .

FIELD ZVJXZHU_01-PONSR .

FIELD ZVJXZHU_01-CONTEXT .

FIELD ZVJXZHU_01-ID .

MODULE SET_UPDATE_FLAG ON CHAIN-REQUEST.

ENDCHAIN.

FIELD VIM_MARKED MODULE LISTE_MARK_CHECKBOX.

CHAIN.

FIELD ZVJXZHU_01-VBELN .

FIELD ZVJXZHU_01-PONSR .

"add Customization requirements

MODULE customize_update.

"add Customization requirements

MODULE LISTE_UPDATE_LISTE.

ENDCHAIN. ENDLOOP.

MODULE LISTE_AFTER_LOOP.

---

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

在include 程序中增加代码:(注意这个和下面通过事件写的自动流水号不同,这个自动带入描述时每次都会执行)

LZVJXZHU_FG_01I01

---

MODULE customize_update INPUT.

CLEAR gv_auart.

IF zvjxzhu_01-vbeln IS NOT INITIAL. SELECT SINGLE auart INTO gv_auart

FROM vbak WHERE vbeln = zvjxzhu_01-vbeln.

IF sy-subrc EQ 0. SELECT SINGLE bezei INTO zvjxzhu_01-context

FROM tvakt

WHERE auart = gv_auart AND spras = sy-langu

.

ELSE."未找到订单

zvjxzhu_01-context = '订单不存在'.

ENDIF. ENDIF.
ENDMODULE.

我们看下SM30进去维护的效果就是:

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

## (1) 利用数据库自带的外键,用维护视图来带出所需要的字段

我们这里就带出一下订单日期好了。

首先必须在ZTJXZHU_01中给vbeln设置外键:VBAK-VBELN

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

进入维护视图ZVJXZHU_01点关系:

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

然后在视图字段上增加字段:

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

我们重新生成一下表维护生成器(重新生成之后,9000屏幕上的代码会被刷新,所以需要重新加一下代码,要是代码比较多就最好体现备份一下)

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

效果如下当你输入一个订单时,会自动带出其创建日期,同时因为设置了外键,当你输入VBELN不存在于VBAK时,不允许输入。

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

## (2) 直接修改屏幕-给屏幕加一列,然后自己在PBO中写代码获取所需的值。

我们就以订单类型来举个例子:

进入9000屏幕布局:分别把文本和输入框拖到指定位置(因为我的SAP有语言包确实问题所以暂时命名为1234,到元素清单中可以修改)

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

在9000屏幕的PBO中增加代码:

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

执行SM30效果如下图所示:

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

这个是昨天ABAP群里小伙伴的一个需求,每次增加条目时给条目一个流水号码,当前最大号码+1 (有删除先不管)

我们通过表维护生成器事件来实现这个功能

首先我们使用上面定义的ID来作为流水号码,进入视图的表维护生成器界面(点修改进入):

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

点击事件

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

弹出消息,无需理会

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

点击新条目,然后

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

我们使用05维护事件,还有其他的维护事件可以使用,大家可以自己去尝试

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

增加子例程FRM_AUTO_NUM,然后点击编辑器(下图红框),创建form

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

只有才创建新条目才会调用

FORM frm_auto_num.

DATA lt_zvjxzhu TYPE TABLE OF zvjxzhu_01.

MOVE-CORRESPONDING total[] TO lt_zvjxzhu.

IF lt_zvjxzhu[] IS NOT INITIAL.

SORT lt_zvjxzhu BY id DESCENDING.“取ID最大值

READ TABLE lt_zvjxzhu INTO DATA(ls_zvjxzhu) INDEX 1. IF sy-subrc EQ 0. zvjxzhu_01-id = ls_zvjxzhu-id + 1.” ID最大值+1 ENDIF.

ELSE.

zvjxzhu_01-id = 1.

ENDIF. ENDFORM.

---

这个事件就写好了,在创建新条目的时候,会自动给ID加上流水号码。

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

**不念过** **去**

**END**

**不畏将来**

ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图
ABAP 随笔 SM30常见增强操作自动带描述等 - 封面图

**SAP ABAP TAB** ****

微信号 : TAB_JXZHU

后台回复’ABAP‘领取学习资料哈

长按二维码关注我们

SAPTAB

关于作者:SAPTAB

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「ABAP随笔SM30常见增强操作自动带描述等.md」整理生成,仅用于内部技术分享与学习交流。