点击蓝字 关注我们
一
前言
标准单据表都允许通过增强添加字段.
添加的字段类型有两种可能
-
文本型: 包含日期,NUMC等实际是文本的类型
-
数字型: 包含整数,数量,金额等非文本的类型.
添加的方式有两种
-
通过系统预留的结构增强
-
通过附加字段增强
一般情况下,标准单据增强字段需要完成以下方面的增强
-
屏幕增强: 增强的字段允许在标准屏幕上创建/修改/显示.随单据的保存存入标准表
-
BAPI增强: 增强的字段通过BAPI EXTENSION段传入BAPI函数,最终写入标准表.
本文主要介绍怎么解决数字型字段在BAPI中的传递.
为了说明清楚问题, 后文以采购订单行项目增强字段为例.
二
一个矛盾
标准单据中增强字段如果是字符型,一切好说. 如果是数字型, 为了解决BAPI传递的问题(BAPI-EXTENSION是只能传递字符型内容),一般开发往往会把数字型强制定义成文本型.
这种数字定义成文本可能带来的问题:表字段类型与业务实际类型不一致,可能引起一系列的存储,计算问题.
比如:如果数据不小心存入了A01之类的字符. 实际运算时因为无法转换成数字, 可能会引起程序DUMP.

BAPI中的EXTENSION
三
解决办法思路
表按数字类型定义, 同时定义一个同名的文本字段,在BAPI传递时使用文本字段类型. 在BAPI增强段处理的时候,同名字段赋值到表字段中.
四
增强字段定义
以采购订单为例
01
数据定义
采购订单行项目表有增强的结构 CI_EKPODB. 增强的字段最好放入该结构中.以便使用系统预定义好的一些内容.
如果充分了解了增强字段的处理逻辑, 使用附加字段方式增强也可以.

02
嵌套定义增强字段
把增强字段整体放入一个结构,以便后续复用该结构
该结构中再嵌入其它结构(其中常规字段是字符型的字段, 数量/金额字段分开放或者集中放到一个结构中)

金额字段的内容

03
文本类型结构
再定义一组结构(数量/金额字段使用文本类型),其中 ZSEKPO_ATTR复用


04
标记结构
标记结构中的字段类型CHAR长度都是1 . (有些单据字符类型必须用数据元素 CHAR1定义,比如销售订单中会检测字符类型是CHAR1 ).

五
最终定义的结构
最终的定义包含三组结构
-
原始字段组
-
金额字符化组
-
标记组
原始字段
-
ZSEKPO EKPO 附加结构
-
ZSEKPO_ATTR EKPO 附加结构-常规字段
-
ZSEKPO_JE EKPO 附加结构-金额字段
-
ZSEKPO_QTY EKPO 附加结构-数量字段
金额字符化
-
ZSEKPO_C EKPO 附加结构-BAPI金额字段(CHAR)
-
ZSEKPO_ATTR EKPO 附加结构-常规字段
-
ZSEKPO_JE_C EKPO 附加结构-金额字段(CHAR)
-
ZSEKPO_QTY_C EKPO 附加结构-数量字段(CHAR)
标记
-
ZSEKPOX 采购订单行项目增强
-
ZSEKPO_ATTRX EKPO 附加结构-常规字段FLAG
-
ZSEKPO_JEX EKPO 附加结构-金额字段
-
ZSEKPO_QTY_CX EKPO 附加结构-数量字段(FLAG)
六
应用在标准结构
定义好的字段应用在标准结构中
CI_EKPODB
ZCI_EKPODB
CI_EKPODBX



七
调整标准结构
需要修改的标准结构


八
代码增强部分
最后,调整一下BAPI处理增强段的逻辑.
程序 L2012F23 中的增强点 move_extensionin_02
在该增强点创建是一个实施: 替换标准传递的结构.


九
BAPI增强段传递的方式优化
BAPI增强段赋值时,使用下面的语句把结构整体赋值到结构的某些字段中.
pt_ext+30(960) = bapi_te_mepoitem.
同时,可以考虑使用统一的函数赋值标记段
Z_BAPI_FILL_X

十
总结
本文以PO为例, 讲解了增强字段的优化处理方式.尤其是数量金额类的增强字段.
其它的单据比如销售订单,采购申请等与PO的处理类似.
应用本文的处理方式, 增强的数字类型字段可以通过BAPI传递内容. 存入表中的数字类型字段定义中. 后续新增字段时, 只需要修改特定的结构新增字段即可.
因为EXTENSION结构总长度960的限制, 单个表增强字段总长度如果超过960, 将无法通过EXTENSION段传递.
此时只能考虑其它传递方式(比如在调用BAPI函数调用之前EXPORT到内存ID. 在BAPI中处理EXTENSION段的地方,IMPORT 内存ID. 赋值到相应表增强字段中.
THE
END
网友评论