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:将其他币种转为本位币.

转载于:https://www.cnblogs.com/hwak/archive/2009/08/07/1541232.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值