2012-02-14 3 views
1

У меня возникла проблема в SSRS Отчеты об амортизации основных средств, которые представляют собой расчет стоимости амортизации? я расчет по этой формуле ((ACQUISITIONPRICE/период амортизации) * Амортизация Остаются), но значение неверно, давайте рассмотрим пример,Динамика AX 2009: Расчет амортизации основных средств

AssetID, ASSETGROUP, NAME, ПОЖИЗНЕННАЯ, LIFETIMEREST, ACQUISITIONPRICE

BLDRNV53, Строительство R, гидроизоляционные РАБОТА, 60, -57.370

Расчет в запросе SQL:

SELECT  ASSETTABLE.ASSETID, ASSETTABLE.ASSETGROUP, ASSETTABLE.NAME, (ASSETBOOK.LIFETIMEREST * (ASSETBOOK.ACQUISITIONPRICE/ASSETBOOK.LIFETIME)) as AccDep 
FROM   ASSETBOOK INNER JOIN 
         ASSETTABLE ON ASSETBOOK.ASSETID = ASSETTABLE.ASSETID AND ASSETBOOK.DATAAREAID = ASSETTABLE.DATAAREAID 
WHERE  (ASSETBOOK.DEPRECIATION = 1) AND ASSETBOOK.STATUS = 1 

Пример: ((370/60) * -57) = -351.5 Но системный отчет вычисляет значение -350.550, существует разница в 0,95, и все значения амортизации имеют небольшую разницу, подобную этой.

Пожалуйста, помогите

+0

Выполняется ли расчет в запросе базы данных или используется выражение в отчете? Пожалуйста, укажите код для запроса или выражения – Bryan

+0

В базе данных Запрос: –

ответ

0

Что уравнение отсутствует является Fixed Assets Scrape значение, которое +1,000 для актива в данном примере, так что уравнение является (((Acquisition Price - Scrape Value)/Depreciation Period) * Depreciation Remain)

давайте заполнить его с номерами: (((370 - 1)/60) * -57) = -350.550

все Спасибо за вашу помощь

2

Я не понимаю, где значение -350.550 откуда. Я не смог воспроизвести его в своих тестах.

Моя рекомендация - обеспечить, чтобы тип данных столбца для ACQUISITIONPRICE точно представлял тип данных, хранящихся в базе данных. Учитывая имя, я предполагаю, что сохраненное значение представляет собой некоторый тип валюты. Тип данных decimal, вероятно, является хорошим выбором, что-то вроде DECIMAL (10,2). Увеличьте точность по мере необходимости, чтобы удовлетворить ваши требования.

Выполнение всех необходимых вычислений до значения округления, только округлые, если необходимо, в слое представления.

Sample T-SQL следует продемонстрировать влияние различных типов данных на ваш результат:

-- create temporary table, columns with integer datatype 
IF OBJECT_ID('tempdb.dbo.#Asset') IS NOT NULL 
    DROP TABLE #Asset; 
CREATE TABLE #Asset (
    LifetimeRest INTEGER NOT NULL, 
    AcquisitionPrice INTEGER NOT NULL, 
    Lifetime INTEGER NOT NULL 
); 

-- load sample data 
INSERT INTO #Asset VALUES (-57, 370, 60); 

-- result is -342 with integer datatype and no conversion 
SELECT 
    IntegerCalculation = LifetimeRest * (AcquisitionPrice/Lifetime) 
FROM #Asset; 

-- result is -351.500000 is with dynamic decimal conversion 
SELECT 
    DynamicDecimalCalculation = LifetimeRest * 
           (CAST(AcquisitionPrice AS DECIMAL)/Lifetime) 
FROM #Asset; 

-- change price datatype to decimal with consistent precision and scale 
ALTER TABLE #Asset ALTER COLUMN AcquisitionPrice DECIMAL(10, 2); 

-- result is -351.4999620 with static decimal precision and scale, 
-- and no on the fly conversion 
SELECT 
    StaticDecimalCalculation = LifetimeRest * (AcquisitionPrice/Lifetime) 
FROM #Asset; 

-- cleanup 
IF OBJECT_ID('tempdb.dbo.#Asset') IS NOT NULL 
    DROP TABLE #Asset; 
+0

-350.550 входит в отчет об основных средствах баланса Morphex в AX 2009, он вычисляет с помощью класса под названием AssetSumCalc, который я не могу отменить enginner, что он делает. Но на основании вашего ответа разница не равна -350.500, вы ответите мне о округлении, но не об этой большой разнице «0.95», спасибо за помощь :) –

Смежные вопросы