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

1.    自动带出描述类型(更新回数据库)

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

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

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

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

函数组名称为ZVJXZHU_FG_01

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

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

然后代码部分为在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.

在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进去维护的效果就是:

2.   
自动带出描述(不更新数据库,仅显示)

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

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

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

进入维护视图ZVJXZHU_01点关系:

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

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

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

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

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

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

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

执行SM30效果如下图所示:

3.   
自动编号功能

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

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

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

点击事件:

弹出消息,无需理会

点击新条目,然后

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

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

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


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加上流水号码。

原文地址:https://www.cnblogs.com/jxzhu/p/12178811.html

时间: 2024-12-25 18:53:49

2020.01.11 【ABAP随笔】SM30常见增强操作-自动带描述等的相关文章

Daily Recording 2020/01/11 (关键词:ARP,计算机网络基础)

Daily Recording Wang yuan can January 11, 2020 @雨人网安 日报 日报开始 今天是周六,持续六天的高强度学习迎来了“伟大的休息日”,今天的学习内容相对轻松,刚开始Bai在讲计算机网络基础的时候希望通过小视频的方式让我们来了解,后面越看越跑题了,原子弹制造.高铁运作流程.飞机票出票流程......,就这样,我们在bilibili看一上午有趣的小视频.下午Bai带着我们阅读了一个关于“内网渗透”的博文,讲的是博主如何渗透进蹭自己家wifi的人的电脑,后面

[記事]2020/01 計畫

咕咕,產出文章真的好難 在此提醒 現在時間: 2020/01/11 12:50 2020 的第 1 個月已經過去快要一半啦 2020/01 月規劃 & 展望 邊做邊補充,希望 2 月來看可以打很多勾 3 FOCUS [ ] 最後一周的複習,堅持下去 [ ] 提高組 3 sessions [ ] 專注把其他小小.生活.細節處做好 Todo General [ ] 2019 檢討與檢視與整理 [ ] 2020 New Year resolutions Algos [ ] 線段樹入門 [ ] BIT

接口2014年6月11日01:11:37

1 [1]C#中的接口和类有什么异同. 2 3 不同点: 4 不能直接实例化接口. 5 接口不包含方法的实现. 6 接口可以多继承,类只能单继承. 7 类定义可在不同的源文件之间进行拆分(partial). 8 9 相同点: 10 接口.类和结构都可以从多个接口继承. 11 接口类似于抽象基类:继承接口的任何非抽象类型都必须实现接口的所有成员. 12 接口和类都可以包含事件.索引器.方法和属性(属性本质上是两个方法). 13 14 基础知识:接口只能定义方法(只能定义行为,不能定义实现也就是字段

11.1.1 重用常见的代码块

一个最好的编程实践,就是避免在多个地方重复相同的代码.如果有两个类似程序,就值得考虑把它们合并成一个:新的程序需要有新的参数,描述代码按照不同于原来的路径. 在函数式编程中,我们有一个强大的武器:函数值作为参数值使用的能力,这使得函数或者方法的参数化更容易.为了演示,假设我们有一个关于城市的信息数据库,我们要用数据生成几份报表. 我们先写一个加载数据的函数.为了使示例简单,我们不考虑使用数据库:当然,你可以自己去做,只要使用标准的.NET 数据库API,可顺利地使用F#.这里,我们就使用下面的函

2020/01/10日报

日报内容详情: 日期:2020/01/10 前言: 今天洗漱完,本来是准备走路去上课的,但是走到外面一看,天气阴霾,下起了小雨,让人感觉是很不舒适,计划也赶不上变化啊,只好做公交去上课了.好了,不多说废话,开始今天的学习记录. 学习记录 上午: 开始的时候就下载了两个漏洞扫描软件,NESSUS和Acunetix,这两个软件都是开源的,Nessus使用的是vm镜像版的,这个软件安装时真的慢,感觉电脑都有点卡了,当然这应该是我电脑太破了,已经在暗示我换一台了. 终于安装好了,要开始使用操作了,因为我

Windows下常用的100个CMD指令以及常见的操作

Windows下常用的100个CMD指令以及常见的操作 常用的100个CMD指令 gpedit.msc-–组策略 2. sndrec32---录音机 3. Nslookup---IP地址侦测器 ,是一个 监测网络中 DNS 服务器是否能正确实现域名解析的命令行工具. 它在 Windows NT/2000/XP 中均可使用 , 但在 Windows 98 中却没有集成这一个工具. 4. explorer---打开资源管理器 5. logoff---注销命令 6. shutdown---60秒倒计时

jquery api 常见 事件操作

change.html 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 2 <html> 3 <head> 4 <title>ready.html</title> 5 <meta http-equiv="content-type" content="text/html; charset=UTF-8"

java常见文件操作

收集整理的java常见文件操作,方便平时使用: //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if (!myFolderPath.exists()) { myFolderPath.mkdir(); } } catch (Exception e) { System.out.println("新建目录操作出错"); e.printStackTrace(); } //2.创建文件 //impor

C语言常见字符串操作函数总结

1. bcmp 原型:extern int bcmp(const void *s1, const void *s2, int n); 用法:#include <string.h> 功能:比较字符串s1和s2的前n个字节是否相等 说明:相等返回0,否则返回非0值 2. bcopy 原型:extern void bcopy(const void *src, const void *dest, int n); 用法:#include <string.h> 功能:将字符串src的前n个字节