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

作者:ABAP技巧与实战 约 7 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发

原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)

**点击蓝字** 关注我们

前言

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

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

• 文本型: 包含日期,NUMC等实际是文本的类型

• 数字型: 包含整数,数量,金额等非文本的类型.

添加的方式有两种

• 通过系统预留的结构增强

• 通过附加字段增强

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

• 屏幕增强: 增强的字段允许在标准屏幕上创建/修改/显示.随单据的保存存入标准表

• BAPI增强: 增强的字段通过BAPI EXTENSION段传入BAPI函数,最终写入标准表.

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

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

一个矛盾

标准单据中增强字段如果是字符型,一切好说. 如果是数字型, 为了解决BAPI传递的问题(BAPI-

EXTENSION是只能传递字符型内容),一般开发往往会把数字型强制定义成文本型.

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

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

SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图

BAPI中的EXTENSION

解决办法思路

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

增强字段定义

以采购订单为例

_**01** _

**数据定义**

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

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

SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图

_**02** _

**嵌套定义增强字段**

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

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

SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图

金额字段的内容

SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图

_**03** _

**文本类型结构**

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

SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图

_**04** _

**标记结构**

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

SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图

最终定义的结构

最终的定义包含三组结构

• 原始字段组

• 金额字符化组

• 标记组

**原始字段**

• **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

SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图

调整标准结构

需要修改的标准结构

SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图

代码增强部分

最后,调整一下BAPI处理增强段的逻辑.

程序 L2012F23 中的增强点 move_extensionin_02

在该增强点创建是一个实施: 替换标准传递的结构.

SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图

BAPI增强段传递的方式优化

BAPI增强段赋值时,使用下面的语句把结构整体赋值到结构的某些字段中.

pt_ext+30(960) = bapi_te_mepoitem.

同时,可以考虑使用统一的函数赋值标记段

Z_BAPI_FILL_X

SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图

总结

本文以PO为例, 讲解了增强字段的优化处理方式.尤其是数量金额类的增强字段.

其它的单据比如销售订单,采购申请等与PO的处理类似.

应用本文的处理方式, 增强的数字类型字段可以通过BAPI传递内容. 存入表中的数字类型字段定义中. 后续新增字段时, 只需要修改特定的结构新增字段即可.

因为EXTENSION结构总长度960的限制, 单个表增强字段总长度如果超过960, 将无法通过EXTENSION段传递.

此时只能考虑其它传递方式(比如在调用BAPI函数调用之前EXPORT到内存ID. 在BAPI中处理EXTENSION段的地方,IMPORT 内存ID.

赋值到相应表增强字段中.

** THE **

** END **

**约定**

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.

( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.

越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )

SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图

**公众号 : syjf1976_abap**

**ABAP开发技巧**

**微信号 : 392077**

**公众号主群加入受限, 请扫码加入副群后,向管理员申请加入主群**

SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
SAP 小技巧 BAPI 增强数字类型字段的处理 - 封面图
ABAP技巧与实战

关于作者:ABAP技巧与实战

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「SAP小技巧BAPI增强数字类型字段的处理.md」整理生成,仅用于内部技术分享与学习交流。