045、维护生成器SE11/SE16有一次在客户现场业务顾问火急火燎地喊我“新配的审批策略表测试环境根本录不进去数据生产怎么办”我远程过去他正对着SE16敲完表名指着工具栏恨恨地说“你看新增按钮是灰的连个提示都没有。”我说“你表没有维护生成器SE16本来就是数据浏览器不是数据录入器。”他愣了一下“那我平时用SE16也能改数据啊”——对那个叫SE16N跟SE16不是一回事而且SE16N乱改数据是要出事的。真正规范的做法是在SE11里把这张表“维护生成器”生成好然后通过SM30或SE16里的“维护”按钮去录数。先说清楚一件事SE11是数据字典是定义表结构的地方SE16是数据浏览器主要用来看数据。SAP没打算让你直接拿SE16往表里噌噌插记录。你见过有人拿Windows记事本改数据库吗维护生成器就是SAP给配置表专门做的一个“录入界面生成工具”它在SE11里对表结构做一次包装自动生成一套维护程序包括动态程序、屏幕、功能模块之后就能在SM30里用一个人畜无害的表格界面去增删改查。这个过程就是所谓的“维护生成器”。生成步骤我直接写给你看。进SE11输入表名点击“修改”把表结构和字段都维护好、激活。然后注意菜单栏上“实用程序”这个菜单里面有一项叫“表维护生成器”在旧版本里可能叫“维护程序”或者“环境”下也有入口。点进去之后系统会让你填维护模式。这里有个常见选项“一步”和“两步”。一步的意思是把屏幕和逻辑放在一个对话框程序里两步是拆成两个程序。别纠结你又不是搞底层框架选“一步”就够用了。权限对象那里可以随便填一个也可以留空但如果你是给客户做项目最好跟权限顾问对一下不然控制不了谁有这个表维护权限。维护类型选“标准”除非你知道“特殊”是什么意思。点“生成”然后系统会提示你分配一个包开发类。如果你之前把表创建在本地对象里到了这一步会直接卡住——本地对象生成不了维护程序。你得先把表放到一个包里去。这里踩过坑我以前图省事把开发用的表全放在本地结果要生成维护器时傻眼了又回去改包还牵扯出传输请求的问题。老老实实建个包哪怕是$TMP也要有个东西兜着。生成完之后系统会告诉你维护视图叫啥名字功能模块叫啥屏幕号是多少。这些东西你就心里有数不用背。重点是如果你的表字段后面又加了一列或改了一个字段类型维护生成器不会自动跟着变。你必须在SE11里重新激活表然后再次进入“表维护生成器”点“重新生成”或者“调整”。否则你进了SM30会发现列对不上或者系统直接报“字段与维护屏幕不一致”。听起来很低级但很多人就卡在这儿。那么怎么进这个维护界面三种模式。最传统的是SM30直接事务码输入表名回车就进去了。SM30是维护生成器的正主前面生成的程序就是被SM30调用的。第二种在SE16里输入表名然后点“维护”按钮。注意如果你没有生成维护生成器这个按钮是没反应的或者就是前面新同事遇到的“新增按钮是灰的”。第三种从SE11的表格“显示”界面点“维护”按钮效果一样。我推荐业务用户直接用SM30好记而且SM30维护完会提示“是否更新”那一步千万别漏。有一回我自己写了个测试代码也想调维护生成器去看看数据。直接用CALL TRANSACTION SM30结果连表名都不知道怎么传。倒腾半天才明白维护生成器最终关联的是一个“维护视图”它跟表名不是一个东西。你传表名它肯定说找不到维护视图。正确姿势是用标准函数模块VIEW_MAINTENANCE_CALL。看下面这段我把关键行写了注释别跟我似的在这上面浪费一下午CALL FUNCTION VIEW_MAINTENANCE_CALL EXPORTING ACTION U U就是更新可以增删改S是只显示 VIEW_NAME ZTAB_V 这里必须是维护视图名不是表名 TABLES dba_sellist lt_sel. 可选可以按条件筛选要维护的记录 * 如果报“视图不存在”去SE11的表维护生成器里看一眼真正的视图名这里踩过坑我一开始把VIEW_NAME填成表名函数直接报“视图ZTAB不存在”。后来发现维护生成器生成的视图名一般在表名基础上变了一种命名规则具体是什么你得看生成器界面里显示的“维护视图”字段。还有一种情况如果你用CALL TRANSACTION SM30倒是可以传表名但是要带着选择画面一起玩麻烦得很。用函数模块干净利落。最后给你几句实在话。第一配置表务必要生成维护生成器不要偷懒直接拿SE16N乱捅那是给技术顾问在紧急情况做手术用的不是给业务录数用的。哪天你改坏一条关键数据对账对到天荒地老。第二表结构改了记得重新生成维护器这是习惯问题不是能力问题。第三如果维护生成器生成的界面字段顺序很别扭回到SE11的“表维护生成器”里点“维护屏幕上的字段”可以拖拽调整字段顺序还能设置表格控制属性。第四涉及大数据量的表别直接让用户通过维护器去翻那会卡死。用VIEW_MAINTENANCE_CALL带上选择条件一次只给一部分数据。平时做项目遇到“新增按钮是灰的”这种问题先别急着SAP_ALL乱试问一句“你生成维护生成器了吗”能省下半小时。