关于SE16H,你需要知道的事

您所在的位置:网站首页 湖人比赛结束了吗今天比赛结果查询表 关于SE16H,你需要知道的事

关于SE16H,你需要知道的事

2024-07-09 12:39| 来源: 网络整理| 查看: 265

0 分享至

用微信扫码二维码

分享至好友和朋友圈

文 | SAP油瓶哥

前言

最近看了一些文章介绍SE16H这个新的表查询工具,也想自己来测试下SE16H能做什么,跟传统的SE16, SE16N比起来有什么优势。

适用版本

有文章里提到SE16H是在S/4 HANA中才有的,事实上并非如此,即使没有使用S/4 HANA,在ECC6环境下,这个事务码也是可以用的,在TADIR表中可以看到SE16H于2011年就已经包含在组件SAP_APPL中了 (Release 606)。

新功能

1

数据库连接 | Database connection

这个是SE16H的新字段,通过该字段,可以在ERP系统中查看SAH HANA数据库的表内容而无需使用SAP HANA Studio。

看了下 SAP NOTE 1636416 对这个字段的解释:

在“数据库连接”字段,可以通过搜索帮助(F4)选择可用的的数据库连接

系统使用选中的数据库连接进行访问

当一个数据库连接被选中时,“Table”字段的搜索帮助会显示SAP HANA中可用的表和视图

SE16H仅能检查到数据库的物理连接,SAP HANA中创建的表的定义必须与SAP ERP数据字典定义一致,如果有不一致(比如字段名),SE16H会DUMP。 使用SE16H访问SAP HANA仅适用于1:1复制的表。所有其他的表(比如仅在SAP HANA中新创)必须使用SAP HANA studio进行访问。

如果不填写"数据库连接",SE16H将访问ERP系统的常规数据库,这种情况下,运行时间可能会较长。

也就是说要发挥出SE16H的全部威力,还是要运行在HANA数据库上的。

这个字段的功能,我在现有环境下没有测试成功。

按下F4我可以看到一个数据库连接 HANA_DEV。

但选中后会提示:

应该是说备选的数据库连接这里是不能使用的。因为没有其他合适的数据库连接可以使用,关于这个字段的用法和效果,只有以后再探索了。

2

组查询 | GROUP

和SE16N比起来,SE16H多了一个可以按组去查询的功能。

比如我们可以按会计科目组,成本中心组,内部订单组来查询表数据。

组(或者说集)可以在GS01中进行定义。

比如我定义了一个公司代码的组ZBUKRS。

当我输入ZBUKRS在查询栏里时,就相当于输入了我在组里定义的3个公司代码。

Note 1666911 提供了一个程序RKSE16H_CREATE_SET,这个程序可以方便的将成本中心组,订单组转换成对象编号组,这将大大方便CO模块的一些表查询,比如COEP,我们甚至可以把不同控制范围下的成本中心组,订单组创建在一个对象编号组里。

3

快速计数 | GROUP

SE16H在选择界面一共有两个列叫Group, 这个Group是可以用来按所选字段计数的。

比如我们点击"Number of Entries"得知BSEG表中一共有695,124条数据,但如果我们想知道各个公司代码下分别有多少条数据,就只要勾选上Company code这行的Group, 然后执行:

就可以直观的看到每个公司代码的凭证行项目数:(有没有联想到TAANA?)

再进一步,如果想知道每个公司代码每年的凭证行项目数怎么做呢? 只要再勾上Fiscal这行的Group就搞定了:

是不是非常方便呢?

4

合计 | TOTAL

TOTAL这一列最好配合着GROUP(计数)来使用,当勾上相应的合计字段后,系统就会额外返回对应的合计值。

比如我想知道5010这个公司代码下2016,2017年的会计凭证行项目本币金额和记账货币金额的合计分别是多少:

公司代码填上5010,为Company code和Fiscal year勾上Group。

再为Amount in LC 和 Amount 勾上 Total。

我们就会得到:

假如我们没有勾选Group,效果就是这样:

注意:如果数据量过大,TOTAL后值可能会溢出。

5

排序 | SORT

回到GROUP(计数)的例子,我们看到系统返回的清单是默认升序的:

如果我们给Company code和Fiscal year勾上Sort, 为Company code选择Sort type DES(降序),Fiscal year的Sort type留空。

清单就变成了这样:

需要说明的是SORT需要配合GROUP(计数)来使用。如果仅勾选了SORT,系统也是会帮你把GROUP勾选上的。

6

顺序 | Sequence

还是继续上面的例子,我们看到清单显示的次序是先公司代码,再会计年度,如果我们为Company code和Fiscal year维护上次序号。

我们就会得到这样的清单:

可以看到列顺序变为了先会计年度,再公司代码。

Sequence可以用来控制输出清单中列的次序,比如你一共要输出6个字段,你可以给这6个字段分别填写Sequence值(范围1-99),系统就会按照Sequence值从小到大依次输出。

Sequence不需要配合Group(计数)来使用。

7

最大值,最小值,平均值 | Aggregate

Aggregate仅对数字型字段有效,可用来返回最大/最小/平均值,建议最好配合Group(分组统计)来使用。

注意:Aggregate,Total还有Group(分组统计)这三者对每一个字段来说只能选用一项,如果勾选了任意两者或以上,系统会提示:

8

结果清单钻取 | Drilldown options in the results list

下钻功能的菜单只有在勾选了Group(分组统计)执行后才会出现,比如COEP表,我们按Controlling area和 Year分组统计,右击任一行会看到Drilldown的选项。

说下这几个的区别:

Drilldown/List: 钻取整个清单,不新开窗口

Drilldown/Row: 钻取选中的行,不新开窗口

Dridown/List/New Mode/Value Entry: 钻取整个清单,新开窗口,返回至选择界面

Drilldown/Row/New Mode: 钻取选中的行,新开窗口显示结果清单

Drilldown/Row/New Mode/Value Entry: 钻取选中行数据,新开窗口,返回至选择界面

比如我们选择Drilldown/List把Cost element加到钻取清单中:

清单会变成这样:

这几个的区别自己试一下就会明白。

另外通过菜单Extras > Change settings,可以把结果清单界面的双击功能修改为上面5种钻取效果中的一种。

9

跨表查询 | Outer Join definition

这个是SE16H最吸引我的新功能,也是我花费时间最多去测试的功能。本来想着按照 Abdellah Khebbar 和 Mohamed Talaat 的博文,应该很快就能把功能测通,可我花了3个多小时,反复试验每个按钮,发现不对啊,为什么我输出的行数比我期望的多?又回过头去把NOTE 1636416 看了好多遍后,我发现他们文章中的截图都是有误导性的!也是说照着他们的方法来操作,根本得不到想要的结果。

其实我早就该发现这个的啊,看他们最后的清单截图就应该能发现问题的。

先说Abdellah Khebbar的例子,这位大哥举的是BSEG和BKPF联合查询的例子,很常见,也很实用啊,这样就不用像以前一样,下载完BSEG后,再去vlookup添加BKPF会计凭证头部信息了,可是你这个截图,不对啊,你明明BSEG只需要输出6行记录,但你的图里是12行啊亲。。我相信你的本意是想达到在原来6行行项目信息的基础上添加上头部信息,哎,真是被你这个Layout给搞晕了,我竟然一开始没发现这个问题。

好,再看下Mohamed Talaat这位大哥的,嗯,用的是LFB1和LFA1跨表查询的例子,输入公司代码去把供应商的名称地址信息一起拉出来,也很常见啊,可是,你配的这个图是在搞笑的吗……第一列全是同一个Vendor? 而你匹配到的又是什么鬼?

你们两位大哥在发表博客前,真的有好好测试嘛……

吐槽完毕,下面来跟大家分享下正确的打开方式,首先介绍下Outer Join definition,NOTE中说了好多点,我稍微总结下:

这个功能可以用来实现跨表查询,(比如去读取文本表里的描述);

不建议一次去处理很多数据(会DUMP的);

对Outer Join definition的显示和定义分别有授权检查;

命名上注意不能是数字开头,字母和/开头都可以;

Outer Join definition是一个workbench object, 也是可以用来传输的;

建议每次修改完Outer Join definition,保存后重新进下SE16H,达到清除之前缓存的目的,如果不退出SE16H直接执行,可能会出现奇怪的现象(例如新添加需要输出的字段显示不正确,或者干脆就DUMP)。

下面我们用一个例子来一步步说明如何实现跨表查询,就用BSEG和BKPF跨表查询的例子。

首先Table处填上BSEG,然后点下面的按钮进入Outer Join definition的定义界面:

填上Outer Join definition的名字和描述,点新建按钮继续:

副表名字那里填上BKPF, 勾上Grouping(如果不勾会严重影响运行性能,甚至DUMP),点开Output:

填上期望从BKPF表里输出的字段:

双击BKPF表名,然后点击新建或插入行按钮(一个是向下插入一行,一个是向上插入):

这里就是最关键的一步了,要定义主副表间如何关联起来,正确的做法是用Reference,让公司代码,凭证编号,会计年度这些主键跟BSEG进行关联。如果不这么做,仅仅在这里进行一些常量的限制或不做限制,那就会出现你最后输出的清单条目数比你期望的多的情况!或者你最后出来的清单,每行信息根本对不上。

解释下这里几个Method的用法:

REFERENCE: 参照, 用于参考其他表的字段值。

CONSTANT:常量,注意要填写未转换的值。

STRING:字符串,可以配合后面的Offset, length来对字符串进行截断处理。

SYSTEMVAR: 系统变量,可以引用SYST结构中的字段VARIABLE: 复杂变量,可以使用SE16N_OJ_GET_OBJECT_FROM_OBJNR变量将Object number转换为成本中心号或内部订单号。

点击新建按钮保存下Outer Join definition,下面我们执行下看看效果吧。

这里以查询一张凭证号为例:

接下来我们更进一步,如果我想要在清单里加上成本中心的描述该怎么操作呢?

首先把CSKT添加为第2张副表,然后我们只需要为CSKT再定义关联方式就可以了:

如果我们为CSKT仅维护像如下的一行关联:

最后的结果:

会发现多输出了两行,原因在于CSKT表里对于成本中心的描述维护了两种语言,我们需要对此做出限制:

我们给副表关联关系增加一行语言的限制,只输出中文描述,注意这里用到了常量。

结果:

原来填写常量值时,需要填写CSKT表中未转换的值。

大功告成:

小结

SE16H确实是一个强悍的工具,从某种程度上说,可以代替我们熟悉的SE16、SE16N、SQVI、SQ01、TAANA了。

然而由于它不是真正的做DATA JOIN, 所以如果一次跨表查询大量的数据,不是非常推荐,很容易报性能瓶颈DUMP,还有就是每次修改完Outer join connection后要记得退出重进SE16H这点也比较麻烦。

SAP NOTE给出的典型应用场景是:

比较ERP数据库和HANA数据库一致性

跨控制范围的表查询

参考文章 | SAP NOTE

https://www.linkedin.com/pulse/you-used-use-se16se16n-sqvi-try-se16h-abdellah-khebbari-/

https://blogs.sap.com/2017/12/18/sap-s4-hana-offering-se16h-versus-se11se16nsqvi/

http://sfcn.mohamedtalaat.com/index.php/8-new-sap-s4hana-se16h-forget-about-se16n-se11-sqvi

https://zhuanlan.zhihu.com/p/32260546

SAP NOTE 1636416

SAP NOTE 1666911

关于作者

Inwehub用户名:李乐平,一枚财务出身的油腻的中年SAP从业大叔,3年财务经验,8年SAP甲方经验,现任某服装行业上市公司SAP项目经理。

推荐阅读

《替代SE16N的超强悍SE16H》

《来,聊个5块钱的APO》

《3分钟判断SAP顾问水平》

《每个顾问都该有的底层逻辑,这15张图告诉你》

《在云上使用ABAP》

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

/阅读下一篇/ 返回网易首页 下载网易新闻客户端


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3