‎2007 Mar 13 9:12 AM
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,
‎2007 Mar 13 9:16 AM
are you not maintianing the Rate for this ?
2.
check the fixed point arithmetic .
vijay.
‎2007 Mar 13 9:16 AM
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
‎2007 Mar 13 9:19 AM
‎2007 Mar 13 9:18 AM
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
‎2007 Mar 13 11:02 AM
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.
‎2007 Mar 13 2:33 PM
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