[SAP ABAP开发技术总结]数据输入输出转换、小数位/单位/货币格式化

本文详细介绍了SAP ABAP中数据格式化和转换的各个方面,包括数据输入输出转换、数量小位数格式化、单位换算和货币格式化。在输出时,数据会自动根据转换规则转换,而在输入时,系统会根据数据元素的转换规则进行转换。此外,还讨论了手动转换和单位转换函数UNIT_CONVERSION_SIMPLE的使用,以及货币格式化函数WRITE CURRENCY的应用,强调了正确处理日元等特殊货币的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

15.         数据格式化、转换

15.1.     数据输入输出转换

15.1.1.           输出时自动转换

如果某个变量参照的数据元素所对应的Domain具有转换规则,那么在输出时(如Write输出、ALV展示、文本框中显示),最后显示的结果会自动发生转换,如参照 ekpo-meins 表字段的变量赋值时就会发生转换,因为 ekpo-meins 所对应的元素Doamin设置了转换规则:

image143

所以,在显示输出这样的数据时要注意,如果要显示原始数据,则不能参照该表字段来定义变量,而是自己定义

DATA:i_meins LIKE ekpo-meins,
     i_meins2
TYPE c LENGTH 3.
START-OF-SELECTION.
 
SELECT meins meins FROM ekpo INTO (i_meins,i_meins2) WHERE ebeln = '4500012164'.
   
"输出时, i_meins会自动发生转换,但 i_meins2 不会
   
WRITE: i_meins,i_meins2.
 
ENDSELECT.
 
SKIP.

 
DATA: i_meins3 LIKE ekpo-meins.
 
"注:这里只能是内部单位ST,而不是PC,因为Write时是输出转换(即->的转换)
  i_meins3
= 'ST'.
  "只要是参考过 ekpo-meins 的变量,Write输出时自动转换
 
WRITE:/ i_meins3.

image144

调试过程中发现都是原始数据,自动转换发生在Write输出时

image145

15.1.2.           输入时自动转换

输出时会发生自动转换,那么,在输入时,如从选择屏幕上录入的数据是参照带有规则转换的Domain的数据元素创建的选择屏幕字段时,从界面录入到ABAP程序中时,会自动按照转换规则进行转换,如下面从界面上输入的是 PC (外部格式的单位),但录入到ABAP程序中时,自动转换为ST(内部格式的部位),但再次Write输出时,又将 ST转换为PC输出(从内部转换为外部格式):

image146

15.1.3.           通过转换规则输入输出函数手动转换

除了上面通过借助于参照带有转换规则的表字段进行自动转换外,实质上可以通过转换规则对应的输入输出函数进行手动转换,如VBAK-vbeln的转换规则:

image147

CONVERSION_EXIT_ALPHA_INPUT:输入转换,前面补齐零

此函数将字符类型的变量转换成SAP数据库中内部格式数据,如定单号vbeln的类型为 Char 10,如果输入的vbeln6位,则会在前面补4个零(注:该函数的转换规则为:如果含有其他非数字,则不会补零,只有全部是数字时才补,这可以通过VBELN查看到),Number类型的不需要,因为在ABAP程序中N类型不足时长度时默认就会在前面补零(如 POSNR),而且Number类型的默认值就是全为零,而C类型不足时会以后面全补空格

CONVERSION_EXIT_ALPHA_OUTPUT:输出转换,去掉前导零

DATA: vbeln TYPE vbak-vbeln.
DATA: str TYPE string VALUE '600000'.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
 
EXPORTING input  = str
 
IMPORTING output = vbeln.

"自动输出转换,输出最初始数据,但程序内部已发生变化
WRITE: / vbeln."600000

image148

15.2.     数量小位数格式化

WRITE <f> UNIT <u>.

该语句根据Unit <u>来设置<f>的小数位数(保留小数点多少位,或精确到小数点后多少位),<u><f>的单位。<u>必须要在T006中进行过配置,并且<u>的值(单位KEY值)就是T006-MSEHI字段值,而T006-DECAN字段值决定<f>显示的小数位数,如果<u>在表T006没有找到,将会忽略该UNIT选项

该选项的使用限制如下:

?     <f>必须是P类型

?     如果<f>本身的小数位比<u>所配置的小数位时,系统会忽略该选项

?    如果<f>本身的小数位比<u>所配置的要时,并且多余的小数位全部是零时会被截断;如果多余的小数部分不是零时也会直接忽略该选项

从上面的限制条件来看,该格式化输出只针对<f>的小数位超过了其单位<u>设置的小数位,且超过的小数要全是零才会起作用(去掉多余的零),如果<f>的小数位短于<u>设置的小数位,也不会再补后输出

image149

"必须是P类型
DATA: p1 TYPE p LENGTH 8 DECIMALS 2.
p1
= '1.10'.
"如果<f>本身的小数位比<u>所配置的小数位小时,系统会忽略该选项
WRITE:/ p1 UNIT 'D10'."1.10
DATA: p3 TYPE p LENGTH 8.
p3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值