在SAP 中如何允许输入负数

前因:有一个Table 需要建立对应的SM30 维护表,但在建立完成后,只要一进入SM30 立刻Short dump 关闭出错。主要的错误信息如下:

Runtime Errors         DYNPRO_FIELD_CONVERSION


There was a conversion error in the output of fields to the screen.


The formats of the ABAP output field and the screen field may not match.


Some field types require more space on the screen than in the ABAP
program. For example, a date output field on the screen requires two
more characters than the corresponding field in the ABAP program. When
the date is displayed on the screen, an error occurs resulting in this
error message.

              Screen name.............. "SAPLZPP1"
              Screen number............ 0012
              Screen field............. "ZVMIWIP-LOST_GARMT"
              Error text............... "FX015: Sign lost."


原因查找:经过分析,发现原因是由于此表中已经有一些记录,而且有一条记录的字段 LOST_GARMT 的值为负数,故怀疑问题就出在这个负数上。

解决过程:

初步解决:首先要将此负数记录删除,如果一切如当初所想,应该SM30 应恢复正常,可以正常维护表。真实最终也确实如此。

但中间有个小插曲,由于此Table 不仅仅有Table ,还有一个同名的View ,结果在使用se16时,系统不允许修改,只能显示;无奈之下,只好用 se37 建了一个简单的function, 用来删除此记录,最终成功。


新的要求:初步解决之后,也算是初步完成了,但实际上并没有找到问题的根源,为什么会出错?知道是因为负数,但为什么不能保存负数?再加上用户之后又要求允许输入负数,于是继续探索。


最终解决:

终于发现第一可能的原因,字段类型!此类型是否允许负数? 可用以下方法检查确认,参看以下图片,注意其中的 Sign 的 Check box , 如打上勾,则说明允许负数,否则不允许(如不允许,则需要修改Data Element 后再试)。正常情况下,如果Data Element 或 Domain 的描述中包含 "with sign" 或 “with +/- sign” ,就表示支持负数。


但,问题又出来了,我确认我这个字段是 int4 ,本身是支持负数的。那为什么会在SM30 中出错呢?

第二个也是最关键的问题出现的,SAP 对Dialog 输入画面是特别控制的,虽然你的类型支持负数,但在Screen 的Control 中并没有指明支持,则一样会出错。如何在Control 中允许负数呢?很简单,但也很特别,需要在Text 属性中最后一位输入“V”,如: __________V; 而且最关键的,对那些使用 SE54 由系统自动建立起来的Screen ,如果没有进行类似设定,一样会出错。而由 SM30 处理的Dialog Screen 一般均由SE54 自动建立。结果就是我们必须手工修改 SE54 建立的Screen ,以确保其中需的字段Control 允许负数的输入。



处理以上两种情况之后,问题终于彻底解决!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值