[转载](转)制作 BDC 时容易忽视的数据格式问题_SAP刘梦_新浪博客

首先向强哥致敬

最近有一些开发的业务无法用 BAPI 实现数据更新,只得用 BDC 方式,在使用中发现了日期格式出错的现象,分析后发现这是由于赋值时数据格式不同造成的。

现象:通过 BDC 制作的更新程序,大部分用户执行正确,但是某个用户的日期出现严重偏离,本来是 2009 年 11 月 24 日的凭证,他生成后变成了 1124 年 09 月 20 日,从他的 GUI 界面上看显示为 20.09.1124,这很明显是由于用户个人参数中日期格式设置不一致造成的。但是我们赋值的时候是通过 ABAP 程序中的变量赋值的,又不是外部文件上传,怎么也会出现这种情况呢?

原因在于,BDC 执行前要生成一个屏幕信息填充表,这个表里的字段名和值字段都是字符类型。在生成这个表时,我用的是包含程序 BDCRECXX(类似程序还有 BDCRECXY)中的子程序 BDC_FIELD,它在给 BDC 数据表的值字段赋值时使用了 BDCDATA-FVAL = FVAL. 的方式。这样,类型为 d 的字段赋值到 BDCDATA-FVAL 中后就是 20091124 这样的 8 个字符形式。到了该用户执行 BDC 过程时,系统将 20091124 这个字符串填写到他的日期字段中,由于他的日期格式设置为 DD.MM.YYYY,系统就拆分字符串为 20.09.1124,这是个合法的日期,自然也就能继续执行下去,但实际从业务逻辑上理解,这个日期就是错误的了。

解决这个问题有两种方法:

一种是调用函数模块 CONVERT_DATE_TO_EXTERNAL,把内部日期转换成字符串类型的外部日期,这时内部日期 20091124 会被正确的转换为外部显示格式 24.11.2009,再赋值给 BDC 的值字段就可以正确解释执行了。

另一种是利用 SAP 中的 WRITE … TO … 语句,它可以将一个变量按照用户设置中的格式输出到一个字符变量中,然后再把这个字符变量传输给 BDC 的值字段,也能达到跟调用函数相同的效果。

跟用户格式相关的还有金额字段,但是由于我们习惯的金额格式都是逗号做千位分隔符、句号做小数点,因此实际使用中还没遇到过错误,但从国际化考虑,还是应该在制作 BDC 的时候考虑到这些因素。

 

-----2010年02月03日-----

今天帮别人解决了一个问题,同样出在不同类型数据的赋值上。

他的源字段是一个数值类型,目标字段是一个字符类型,赋值后,从调试中看到字符类型字段里始终为空,百思不得其解。后来我想到,由于字符类型字段长度过长(255),而数值类型赋值到字符类型时默认使用了右对齐,造成实际内容在字符串的右端,从调试器中看不到,赋值到屏幕上也被截断了。

这个问题跟上面一样可以用两种方法解决:

target = source.
CONDENSE target.

WRITE source TO target LEFT-JUSTIFIED.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值