Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Currency Conversion

Former Member
0 Likes
719

Hi All,

I am using FM : CONVERT_TO_LOCAL_CURRENCY to convert from USD to Thailand local cueerncy.

CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'

EXPORTING

client = sy-mandt

date = sy-datum

foreign_amount = 19000.00

foreign_currency = USD

local_currency = THB

IMPORTING

local_amount = l_curr1

==========================

The exoected result is 633544.51

But I am getting the result as 633.54451

Any clue?

regards,

6 REPLIES 6
Read only

Former Member
0 Likes
673

are you not maintianing the Rate for this ?

2.

check the fixed point arithmetic .

vijay.

Read only

Former Member
0 Likes
673

Hi,

Also you have to pass TYPE_OF_RATE paramter which is default 'M'.

if you have any specific type, enquire with FI consultant and use that type and check.

Regards,

Anji

Read only

0 Likes
673

Type of Rate is "M" which is default and I am using hte sme.

Read only

ashok_kumar24
Contributor
0 Likes
673

Hi Sachin,

Good!!! Check the following example code.

----


REPORT Z.

data: w_dec1 like tcurx-currdec,

w_amt like ekpo-netwr,

w_rate like tcurr-ukurs,

w_fact1 like tcurr-ffact,

w_fact2 like tcurr-ffact.

parameters:

p_curr1 like tcurc-waers default 'JPY',

p_amt1 like ekpo-netwr default '7895',

p_curr2 like tcurc-waers default 'SGD',

pdate like sy-datum default '20030311'.

end-of-selection.

write:

/ 'Entered:',

/ ' from currency:', p_amt1 currency p_curr1, p_curr1, '<-', p_amt1,

/ ' to currency :', p_curr2,

/ ' on :', pdate.

CALL FUNCTION 'FWOS_CURRENCY_DECIMALS_READ'

EXPORTING

I_CURRENCY = p_curr1

IMPORTING

E_DECIMALS = w_dec1

EXCEPTIONS

I_CURRENCY_INITIAL = 1

OTHERS = 2.

IF SY-SUBRC <> 0.

w_dec1 = 2.

ENDIF.

p_amt1 = p_amt1 * 10 ** ( w_dec1 - 2 ).

write:

/ 'after adjusting using currency decimals:',

/ ' from currency', p_amt1 currency p_curr1, p_curr1,

'<-', p_amt1, '(', w_dec1, ')'.

CALL FUNCTION 'CONVERT_TO_FOREIGN_CURRENCY'

EXPORTING

  • CLIENT = SY-MANDT

DATE = pdate

FOREIGN_CURRENCY = p_curr2

LOCAL_AMOUNT = p_amt1

LOCAL_CURRENCY = p_curr1

  • RATE = 0

  • TYPE_OF_RATE = 'M'

  • READ_TCURR = 'X'

IMPORTING

EXCHANGE_RATE = w_rate

FOREIGN_AMOUNT = w_amt

FOREIGN_FACTOR = w_fact1

LOCAL_FACTOR = w_fact2

  • EXCHANGE_RATEX =

  • DERIVED_RATE_TYPE =

  • FIXED_RATE =

EXCEPTIONS

NO_RATE_FOUND = 1

OVERFLOW = 2

NO_FACTORS_FOUND = 3

NO_SPREAD_FOUND = 4

DERIVED_2_TIMES = 5

OTHERS = 6.

IF SY-SUBRC <> 0.

write: / 'Conversion to for.curr. failed:',

p_curr1, '->', p_curr2, 'err.code=', sy-subrc.

ELSE.

write: / 'to For.curr:', p_amt1 currency p_curr1, p_curr1, '->',

w_amt currency p_curr2, p_curr2,

'(', w_rate, ')', w_fact1, w_fact2.

ENDIF.

CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'

EXPORTING

  • CLIENT = SY-MANDT

DATE = pdate

FOREIGN_AMOUNT = p_amt1

FOREIGN_CURRENCY = p_curr1

LOCAL_CURRENCY = p_curr2

  • RATE = 0

  • TYPE_OF_RATE = 'M'

  • READ_TCURR = 'X'

IMPORTING

EXCHANGE_RATE = w_rate

FOREIGN_FACTOR = w_fact1

LOCAL_AMOUNT = w_amt

LOCAL_FACTOR = w_fact2

  • EXCHANGE_RATEX =

  • FIXED_RATE =

  • DERIVED_RATE_TYPE =

EXCEPTIONS

NO_RATE_FOUND = 1

OVERFLOW = 2

NO_FACTORS_FOUND = 3

NO_SPREAD_FOUND = 4

DERIVED_2_TIMES = 5

OTHERS = 6.

IF SY-SUBRC <> 0.

write: / 'Conversion to loc.curr. failed:',

p_curr1, '->', p_curr2, 'err.code=', sy-subrc.

ELSE.

write: / 'to Loc.curr:', p_amt1 currency p_curr1, p_curr1, '->',

w_amt currency p_curr2, p_curr2,

'(', w_rate, ')', w_fact1, w_fact2.

ENDIF.

write / 'End Of Report'.

----


Good Luck and reward points for the same.

Thanks

AK

Read only

Former Member
0 Likes
673

Hi,

Instead of using CONVERT_TO_LOCAL_CURRENCY use the function module

CALL FUNCTION 'READ_EXCHANGE_RATE'

Your problem will be solved

Please refer below code which might help you to solve your problem :

DATA: gd_fcurr TYPE tcurr-fcurr,

gd_tcurr TYPE tcurr-tcurr,

gd_date TYPE sy-datum,

gd_value TYPE p decimals 2,

gd_value1 TYPE p decimals 2.

gd_fcurr = 'EUR'.

gd_tcurr = 'DKK'.

gd_date = sy-datum.

gd_value = 1.

*gd_fcurr = 'USD'.

gd_tcurr = 'DKK'.

gd_date = sy-datum.

gd_value1 = '469365.31'.

PERFORM currency_conversion USING gd_fcurr

gd_tcurr

gd_date

CHANGING gd_value gd_value1.

write:/ gd_value, gd_value1.

  • Convert value to Currency value

*&----


*& Form currency_conversion

*&----


  • text

*----


  • -->P_GD_FCURR text

  • -->P_GD_TCURR text

  • -->P_GD_DATE text

  • <--P_GD_VALUE text

*----


FORM currency_conversion USING p_fcurr

p_tcurr

p_date

CHANGING p_value p_value1.

DATA: t_er TYPE tcurr-ukurs,

t_ff TYPE tcurr-ffact,

t_lf TYPE tcurr-tfact,

t_vfd TYPE datum,

ld_erate(12) TYPE c.

CALL FUNCTION 'READ_EXCHANGE_RATE'

EXPORTING

  • CLIENT = SY-MANDT

date = p_date

foreign_currency = p_fcurr

local_currency = p_tcurr

TYPE_OF_RATE = 'M'

  • EXACT_DATE = ' '

IMPORTING

exchange_rate = t_er

foreign_factor = t_ff

local_factor = t_lf

valid_from_date = t_vfd

  • DERIVED_RATE_TYPE =

  • FIXED_RATE =

  • OLDEST_RATE_FROM =

EXCEPTIONS

no_rate_found = 1

no_factors_found = 2

no_spread_found = 3

derived_2_times = 4

overflow = 5

zero_rate = 6

OTHERS = 7

.

IF sy-subrc EQ 0.

ld_erate = t_er / ( t_ff / t_lf ).

p_value = p_value * ld_erate.

p_value1 = p_value1 * ld_erate.

ENDIF.

ENDFORM. " currency_conversion

Award point if it is useful to you.

Read only

Former Member
0 Likes
673

Hi,

CALL FUNCTION 'CONVERT_TO_LOCAL_CURRENCY'

EXPORTING

  • CLIENT = SY-MANDT

DATE =

FOREIGN_AMOUNT =

FOREIGN_CURRENCY =

LOCAL_CURRENCY =

  • RATE = 0

  • TYPE_OF_RATE = 'M'

  • READ_TCURR = 'X'

  • IMPORTING

  • EXCHANGE_RATE =

  • FOREIGN_FACTOR =

  • LOCAL_AMOUNT =

  • LOCAL_FACTOR =

  • EXCHANGE_RATEX =

  • FIXED_RATE =

  • DERIVED_RATE_TYPE =

  • EXCEPTIONS

  • NO_RATE_FOUND = 1

  • OVERFLOW = 2

  • NO_FACTORS_FOUND = 3

  • NO_SPREAD_FOUND = 4

  • DERIVED_2_TIMES = 5

  • OTHERS = 6

.

IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

uhave to give the rate and type of rate also which is not given initially.

Hope will be helpfull to u

Regards,

S.Ravi