Posted: Mon Feb 25, 2008 1:47 pm Post subject: Convert Test String to Currency Value
Code:
report zexp_txt2curr no standard page heading.
***********************************************************
* Convert String to Currency
*
* This is freeware. Please read the terms of use.
* Written by Urs Rohner, Rohner IT Consulting & Engineering
*
* Contact Author: Urs Rohner
*
* Comments
* When writing interface programs in Abap that have to read external
* data from network or files, I often encountered the following
* problem: There is no standard function within R/3 (or at least I did
* not find one), that allows conversion of a text string into a
* standard amount with a given currency.
* Simply moving the character field into the amount field does not
* work since the internal representation of amounts are dependent on
* the currency customizing, i.e. the number of digits after the
* decimal point.
*
* The following FORM allows this:function
* (amount[curr],currency[cuky],returncode[sbyt]) <---
* f (amount[char],currency[char],language[char])
*
* the return code will be set to a non-zero value in case of an
* conversion error.
*
*
* History
* Vers Date Own Remark
* ---- ------------------ --- ----------------------------------
* 1.00 16th January 2001 rnr Initial version
* 1.10 30th May 2001 rnr Added tags and additional comments
* 1.20 12th October 2001 rnr Error found in SAP's FRACT compute.
*
***********************************************************
* Type Declarations
types:
txp_rc like sy-subrc.
* Method: m_txt_2_amount>
* Convert text to amount with given currency
define m_txt_2_amount>.
perform m_txt_2_amount using &1 &2 'E' &3 &4 &5.
end-of-definition.
form m_txt_2_amount using
value(_t) " amount as string
value(_c) " untyped currency
value(_l) " external value presentation
_a " amount
_w " currency
_r like sy-subrc. " return code
data:
d_ type i, " decimals
s_ type i, " shift
f_(16) type p decimals 5,
v_(16) type p decimals 5.
clear _r.
if not _c is initial.
" try to find currency
select single waers from tcurc into _w where waers eq _c.
if sy-subrc is initial.
" get number of decimals
select single currdec from tcurx into d_ where currkey eq _w.
if sy-subrc is initial.
s_ = 2 - d_.
else.
d_ = 2. s_ = 0.
endif.
" try to convert string to float
catch system-exceptions conversion_errors = 1.
" set locale language _l.
f_ = _t.
" set locale language space.
endcatch.
if sy-subrc is initial.
v_ = f_ * 10 ** d_.
v_ = frac( v_ ).
if v_ ne 0.
_r = 5. " too much digits after decimal point
else.
catch system-exceptions conversion_errors = 1.
_a = f_ / 10 ** s_.
endcatch.
if not sy-subrc is initial.
_r = 4. " value is out of range
endif.
endif.
else.
_r = 3. " text is not a number
endif.
else.
_r = 2. " unknown currency code
endif.
else.
_r = 1. " currency not defined
endif.
endform.
* Globals
data:
r type txp_rc,
c like bkpf-waers,
v like bseg-wrbtr.
* Selection Screen
parameters:
t(20) type c default '100',
w like coep-twaer default 'BEF'.
* P A I ( )
start-of-selection.
m_txt_2_amount> t w v c r.
if r is initial.
set locale language 'D'.
write: v currency c, c.
else.
write: 'Error'(001), r.
endif.
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG. SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG. Every effort is made to ensure content integrity. Use information on this site at your own risk.