abap 维护表的时候怎么让他自己带出字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了abap 维护表的时候怎么让他自己带出字段相关的知识,希望对你有一定的参考价值。

在sap开发的过程中,经常需要自定义数据表,对于简单的数据表,我们可以通过sap的表维护工具生成维护代码,并建立自定义的TCODE来维护其数据。具体步骤如下:
一、建立自定义表(TCODE :SE11)
1 在“Delivery and Maintenance”Tab屏幕设置“Data Browser/Table view Maint.”属性为“允许通过标准表格维护工具维护”
2 设计表格字段
3 设置表格技术设置,菜单:转到-》技术设置
4 保存激活。
二、生成维护代码
生成维护代码代码有两个途径:
1、se11界面的菜单:实用程序-》Table Maintenance Generator其实这里就是调用SE54
2、通过TCODE: SE54
三、建立自定义CODE(TCODE:SE93)
有三种方法来建立自己的TCODE来维护自定义表;
1 通过SM30维护
进入TCODE:SE93建立新TCODE,tcode类型选择为:“Transaction with parameters(parameter transaction)”;事务栏输入“SM30”;选中“跳过起始屏幕”;选中“Inherit GUI attribute”;输入默认字段:VIEWNAME = '自定义的表名' 和UPDATE = 'X';保存激活即可;
2 通过RS_TABLE_LIST_CREATE函数建立新程序来建立TCODE
新程序代码如下

report   zjwec026   .
   call function 'RS_TABLE_LIST_CREATE'
          exporting
               action      = 'ANLE'
               table_name = 'ZJW_CC_GZJSQ'
               generation_forced = ' '.
3通过View_Maintenance_Call 函数建立新程序来建立TCODE,代码可以参见SAP的标准程序RFT042D_CALL
代码如下
report   rft042d_call.
call function 'VIEW_MAINTENANCE_CALL'
      exporting
           action          = 'S'
           view_name       = 'V_T042D'.

参考技术A 维护表结构还是数据?不大明白你的问题

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

 技术图片

 

技术图片

以上是关于abap 维护表的时候怎么让他自己带出字段的主要内容,如果未能解决你的问题,请参考以下文章

ABAP ,SM30里如何输入物料号自动带出物料描述

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

ABAP文本表查找

abap怎么把字段类型不一样的一个内表的数据填充到另外一个内表中。

ABAP 通过字段找表程序

abap 开发之创建表维护生成器