简友广场SAP

SAP小技巧 BAPI增强数字类型字段的处理

2021-06-01  本文已影响0人  syjf1976_abap

点击蓝字 关注我们

前言

标准单据表都允许通过增强添加字段.

添加的字段类型有两种可能

添加的方式有两种

一般情况下,标准单据增强字段需要完成以下方面的增强

本文主要介绍怎么解决数字型字段在BAPI中的传递.

为了说明清楚问题, 后文以采购订单行项目增强字段为例.

一个矛盾

标准单据中增强字段如果是字符型,一切好说. 如果是数字型, 为了解决BAPI传递的问题(BAPI-EXTENSION是只能传递字符型内容),一般开发往往会把数字型强制定义成文本型.

这种数字定义成文本可能带来的问题:表字段类型与业务实际类型不一致,可能引起一系列的存储,计算问题.

比如:如果数据不小心存入了A01之类的字符. 实际运算时因为无法转换成数字, 可能会引起程序DUMP.

BAPI中的EXTENSION

解决办法思路

表按数字类型定义, 同时定义一个同名的文本字段,在BAPI传递时使用文本字段类型. 在BAPI增强段处理的时候,同名字段赋值到表字段中.

增强字段定义

以采购订单为例

01

数据定义

采购订单行项目表有增强的结构 CI_EKPODB. 增强的字段最好放入该结构中.以便使用系统预定义好的一些内容.

如果充分了解了增强字段的处理逻辑, 使用附加字段方式增强也可以.

02

嵌套定义增强字段

把增强字段整体放入一个结构,以便后续复用该结构

该结构中再嵌入其它结构(其中常规字段是字符型的字段, 数量/金额字段分开放或者集中放到一个结构中)

金额字段的内容

03

文本类型结构

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

04

标记结构

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

最终定义的结构

最终的定义包含三组结构

原始字段

金额字符化

标记

应用在标准结构

定义好的字段应用在标准结构中

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


上一篇 下一篇

猜你喜欢

热点阅读