美文网首页简友广场SAP
SAP小技巧 BAPI增强数字类型字段的处理

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

作者: syjf1976_abap | 来源:发表于2021-06-01 13:49 被阅读0次

点击蓝字 关注我们

前言

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

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

  • 文本型: 包含日期,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


相关文章

网友评论

    本文标题:SAP小技巧 BAPI增强数字类型字段的处理

    本文链接:https://www.haomeiwen.com/subject/globsltx.html