AXAPTA汇率问题
系统中使用3种货币,USD,CNY,JPY.本位币是CNY,现在要求生成报表,金额都换算成USD.
咋一看,问题很简单,采用currency中的mothod就可以取汇率,转换等等。。。但这里所取得的汇率是cache中的内容,如果用户在打开系统后,另外的用户修改了汇率,那最新的汇率用currency中的方法取得话就存在问题了。
我写了一个mothod。但别人说有问题,是不是小数点的问题呢?
exchrate formatUSDExchangeRate(CurrencyCode _TradeCurrencyCode,fromdate _exchangedate)
{
ExchRates ExchRates;
CurrencyCode TargetCurrencyCode;
CurrencyCode StdCurrencyCode;
exchrate USDexchrate;
exchrate StdExchRate;
exchrate StdCurrencyRate;
;
TargetCurrencyCode = 'USD';
StdCurrencyCode = Companyinfo::find().CurrencyCode;
SELECT firstonly ExchRates
ORDER BY FromDate desc
WHERE ExchRates.CurrencyCode == StdCurrencyCode
&& ExchRates.FromDate <=_exchangedate
;
StdCurrencyRate = ExchRates.ExchRate;
if (TargetCurrencyCode ==_TradeCurrencyCode)
{
USDexchrate = 1;
}
else
if (StdCurrencyCode == _TradeCurrencyCode)
{
SELECT firstonly ExchRates
ORDER BY FromDate desc
WHERE ExchRates.CurrencyCode == TargetCurrencyCode
&& ExchRates.FromDate <=_exchangedate
;
USDexchrate = StdCurrencyRate/ExchRates.ExchRate;
}
else
{
SELECT firstonly ExchRates
ORDER BY FromDate desc
WHERE ExchRates.CurrencyCode == _TradeCurrencyCode
&& ExchRates.FromDate <=_exchangedate
;
USDexchrate = ExchRates.ExchRate/StdCurrencyRate;
SELECT firstonly ExchRates
ORDER BY FromDate desc
WHERE ExchRates.CurrencyCode == TargetCurrencyCode
&& ExchRates.FromDate <=_exchangedate
;
USDexchrate = USDexchrate *StdCurrencyRate/ExchRates.ExchRate;
}
return USDexchrate;
}
这样的话,真实的汇率就可以得出了.但拿给经理一看,经理说,有问题,这样做固然简单,但没有用currency中的方法,以后维护起来麻烦.
经修改,代码如下:
exchrate GETJPYExchangeRate(currencycode _EXCHCurrencyCode,fromdate _exchangedate)
{
ExchRates ExchRates;
;
SELECT firstonly ExchRates
ORDER BY FromDate desc
WHERE ExchRates.CurrencyCode == _EXCHCurrencyCode
&& ExchRates.FromDate <=_exchangedate
;
return ExchRates.ExchRate;
}
用下述方法调用
Currency::curAmount(Currency::MSTAmount(packingTrans.inventQty * salesLine.SalesPrice,salesline.CurrencyCode,tmpdate,unknownnoyes::Unknown,
element.GETExchangeRate('JPY',exchdate)),TargetCurrencyCode,tmpDate,UNKNOWNNOYES::Unknown,
ELEMENT.GETExchangeRate('USD',exchdate) );
Currency::curAmount:将本位币转换为待转换的币种
Currency::MSTAmount:将其他币种转为本位币.