Click here for English Version
有时候我们需要为VF01/VF02/VF03增加自定义选项卡来满足用户需求,并且在这个选项卡上维护一些自定义字段的值,在这份文档中我们以金税发票为例。
发票凭证选项卡没有屏幕增强和用户出口,SAP标准只有业务加载项 (BADI_SD_CUST_HEAD, BADI_SD_CUST_ITEM) 可用,但是这两个业务加载项仅供SAP内部使用。
本文基于SAP ERP 6.0 EHP7 IDES,NetWeaver 7.42,并且在SAP S4/HANA 1511(S4Core 100 SP03), NetWeaver 7.49同步验证。
本文使用的SAP GUI是750 Patch 1。
当我们尝试创建BADI_SD_CUST_HEAD或BADI_SD_CUST_ITEM的业务加载项实施时,会看到错误消息"业务加载项定义BADI_SD_CUST_xxxx仅供SAP内部使用"。
检查业务加载项定义,大数据需要学习什么,我们发现这些业务加载项被标记为"SAP内部",所以我们不能使用这个业务加载项来增加我们自己的数据。
5.1 参考
SAP Note 864944 有详细说明,SAP只打算让这些业务加载项用在单独的SAP行业解决方案中。
5.2 调查分析
本文以发票凭证的抬头选项卡为例,计划增加金税发票号和金税发票生成日期两个字段,消费返利新模式,并且相关数据应当存储在VBRK的附加结构中。
从SE93找到VF03对应的主程序是SAPMV60A (VF01/VF02也是同一个),在资源库浏览器中检查程序SAPMV60A的屏幕,发现屏幕6001/6101可能是相关的。
从所用位置可以看出BADI_SD_CUST_HEAD被用在函数模块GET_HANDLE_SD_CUST_HEAD中,这个函数模块的使用位置有4个命中。
同时我们检查屏幕逻辑流(以6001为例),模块CUST_HEAD_ACTIVATE调用的CUST_HEAD_ACTIVATE中使用到函数模块GET_HANDLE_SD_CUST_HEAD。
从IF_EX_BADI_SD_CUST_HEAD~ACTIVATE_TAB_PAGE的导航目标我们可以看到SAP标准有一个业务加载项实施CL_IM_WB2_IVGUI_LAYOUT_H,我们可以通过SE19查看WB2_IVGUI_LAYOUT_H。
结论就是业务加载项定义BADI_SD_CUST_HEAD的实施WB2_IVGUI_LAYOUT_H是为全球贸易这个行业解决方案实现的,存储在WB2B_CORE这个包中。
照此完整来看,为发票凭证增加自定义选项卡的业务加载项实施正是与屏幕6001和6101有关,既然这个业务加载项不允许我们自己来实施,我们可以尝试在屏幕6001和6101中注入类似的代码来达成目标。
5.3 验证
我们来调试找出所有的关键点。
业务加载项实施WB2_IVGUI_LAYOUT_H中有4个方法,我们为每一个方法设置断点,然后找一个发票凭证用VF02来修改。
当我们转到抬头选项卡,大数据应用前景,会碰到第一个断点ACTIVATE_TAB_PAGE。
当我们转到"全球贸易管理"选项卡,会碰到第二个断点TRANSFER_DATA_TO_SUBSCREEN,这个选项卡就是有业务加载项WB2_IVGUI_LAYOUT_H增强出来的。
当我们输入数据或点击屏幕上的按钮,会碰到第三个断点PASS_FCODE_TO_SUBSCREEN,然后碰到第四个断点TRANSFER_DATA_FROM_SUBSCREEN。
使用调试器的"返回 (F7)"我们可以验证这四个断点都是跟屏幕6001和6101有关的,这就验证了之前的结论。
以上是基于SAP ERP 6.0 EHP7 IDES,但是基本上在生产环境我们不会有"全球贸易管理"这个选项卡,让我们来找出根本原因。
检查WB2_IVGUI_LAYOUT_H->ACTIVATE_TAB_PAGE中的代码并追溯,最终找到控制点来自TWGTA–WB2_ADDON_ACTIVE。
表TWGTA是通过视图V_TWGTA维护的,配置路径是SPRO–>后勤 – 常规–>全球贸易管理–>激活组件,找到配置选项"增强设置"–>"附加激活"。
当这个选项设置为"2 所有凭证激活",我们可以在发票凭证抬头看到增强的"全球贸易管理"选项卡。
尝试设置成"未激活"
这样"全球贸易管理"选项卡就不见了。
这个选项属于"SAP企业扩展全球贸易"这个行业解决方案,包含在独立的EA-GLTRADE组件中,从S4/HANA 1503开始被合并到S4CORE中。
这个选项在不同SAP版本中的默认值不同,具体如下:
6.1 副作用
因为SAP只预留了一个屏幕对发票凭证抬头进行增强,52返现网,所以我们为发票凭证增加我们自定义的选项卡之前需要注意检查"全球贸易管理"的有效性。
如下解决方案基于我们未启用"全球贸易管理"的前提,如果希望启用"全球贸易管理"的情况下增加自定义的数据,可以考虑在业务加载项WB2_IVGUI_LAYOUT_H中处理,本文不再赘述,积分返现,参考主程序SAPLWB2B_SCREEN_HANDLING。
6.2 附加结构
要显示在自定义选项卡中的数据,我们将定义ZZ字段附加到VBRK中,以便这些数据能够自动存储在VBRK里。为了避免冲突,所有的名称应当以两个Z打头,因为有些标准字段的名称是以一个Z打头的。
创建数据元素ZGTINO,描述、数据类型、字段标签如下:
创建数据元素ZGTIDT,描述、数据类型、字段标签如下:
显示表VBRK,转到附加结构,并点击创建附加,填写附加名称"ZZVBRK_APPEND_GTI",结构名称应当以"ZZ"打头。
填入组件"ZZGTI_NUM"和"ZZGTI_DAT",用先前创建的数据元素作为组件类型,确保组件名称也是以"ZZ"打头。
6.3 创建处理程序
主程序SAPMV60A中的所有包含文件都是以MV60AF打头的,所以我们创建一个独立的程序ZMV60AF_CUST_HEAD来存放所有的处理代码。
转到资源库浏览器,创建屏幕6001,确保屏幕类型设置为"子屏幕"。