Показать сообщение отдельно
Старый 11.08.2014, 18:55   #1  
ksenia is offline
ksenia
Участник
Аватар для ksenia
 
291 / 28 (1) +++
Регистрация: 11.10.2003
Адрес: Москва
Периодическая переоценка в AX2012 - грубая ошибка или глубоко зарытый смысл?
Коллеги, АХ2012:
Представим себе ситуацию: Есть проводка по поставщику, открытая, по ней начислена нереализованная курсовая разница на 30.06.2014, метод учета курсовой разницы - стандарт.
Делаю повторную переоценку на 31.07.2014, система формирует ваучер по переоценке 31.07.2014, в котором сторнирует предыдущую переоценку и начислет новую.
И вот в сторно предыдущей переоценке я замечаю какой-то совершенно левый счет (совершенно не тот, по которому была проведена исходная переоценка, которую система и пытается сторнировать).
Начинаем выяснять почему и наталкиваемся на вот такой код в классе CustVendExchAdjPostingEngine:
X++:
if (lastReportingCurrencyAdjustmentEstimation != 0)
            {
                previousReportingCurrencyAdjustmentLedgerPostingType = this.getLedgerPostingType(
                    lastReportingCurrencyAdjustmentEstimation,
                    false);

                if (previousReportingCurrencyAdjustmentLedgerPostingType == LedgerPostingType::ExchRateGain)
                {
                    select firstOnly LedgerDimension from generalJournalAccountEntry
                        where generalJournalAccountEntry.createdTransactionId == previousCreatedTransactionId
                            && generalJournalAccountEntry.PostingType == LedgerPostingType::ExchRateGain
                            && generalJournalAccountEntry.ReportingCurrencyAmount < 0
                        exists join generalJournalEntry
                            where generalJournalEntry.RecId == generalJournalAccountEntry.GeneralJournalEntry
                                && generalJournalEntry.AccountingDate == lastExchAdjDate;
                }
                else
                {
                    select firstOnly LedgerDimension from generalJournalAccountEntry
                        where generalJournalAccountEntry.createdTransactionId == previousCreatedTransactionId
                            && generalJournalAccountEntry.PostingType == LedgerPostingType::ExchRateLoss
                            && generalJournalAccountEntry.ReportingCurrencyAmount > 0
                        exists join generalJournalEntry
                            where generalJournalEntry.RecId == generalJournalAccountEntry.GeneralJournalEntry
                                && generalJournalEntry.AccountingDate == lastExchAdjDate;
                }

                previousReportingCurrencyAdjustmentLedgerDimension = generalJournalAccountEntry.LedgerDimension;
            }
Т.е. система для определения LedgerDimension, с которым пойдет сторнировка предыдущей нереализованной КР берет первую попавшуюся проводку из всей предыдущей переоценки! Да там может быть какой угодно счет, потому что может встретиться другая валюта с другими настройками счета для курсовой разницы. Почему нет фильтрации по ваучеру предыдущей переоценки?
Это что? Грубая ошибка или глубокий смысл? Объясните мне, пожалуйста
Спасибо!