2020.01.11 【ABAP随笔】SM30常见增强操作

Wesley13
• 阅读 933

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

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

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

 2020.01.11 【ABAP随笔】SM30常见增强操作

 2020.01.11 【ABAP随笔】SM30常见增强操作

 2020.01.11 【ABAP随笔】SM30常见增强操作

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

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

函数组名称为ZVJXZHU_FG_01

 2020.01.11 【ABAP随笔】SM30常见增强操作

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

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

 2020.01.11 【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.

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

 2020.01.11 【ABAP随笔】SM30常见增强操作

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

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

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

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

 2020.01.11 【ABAP随笔】SM30常见增强操作

 进入维护视图ZVJXZHU_01点关系:

 2020.01.11 【ABAP随笔】SM30常见增强操作

 2020.01.11 【ABAP随笔】SM30常见增强操作 

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

 2020.01.11 【ABAP随笔】SM30常见增强操作

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

 2020.01.11 【ABAP随笔】SM30常见增强操作

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

 2020.01.11 【ABAP随笔】SM30常见增强操作

 2020.01.11 【ABAP随笔】SM30常见增强操作

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

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

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

 2020.01.11 【ABAP随笔】SM30常见增强操作

2020.01.11 【ABAP随笔】SM30常见增强操作2020.01.11 【ABAP随笔】SM30常见增强操作

 2020.01.11 【ABAP随笔】SM30常见增强操作

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

 2020.01.11 【ABAP随笔】SM30常见增强操作

2020.01.11 【ABAP随笔】SM30常见增强操作

执行SM30效果如下图所示:

 2020.01.11 【ABAP随笔】SM30常见增强操作

3.    自动编号功能

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

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

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

 2020.01.11 【ABAP随笔】SM30常见增强操作

点击事件:

 2020.01.11 【ABAP随笔】SM30常见增强操作

弹出消息,无需理会

 2020.01.11 【ABAP随笔】SM30常见增强操作

点击新条目,然后

 2020.01.11 【ABAP随笔】SM30常见增强操作

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

 2020.01.11 【ABAP随笔】SM30常见增强操作

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

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

 2020.01.11 【ABAP随笔】SM30常见增强操作

2020.01.11 【ABAP随笔】SM30常见增强操作

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
sql注入
反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这