Показать сообщение отдельно
Старый 16.06.2017, 05:29   #1  
Pandasama is offline
Pandasama
Участник
 
449 / 133 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
TransactionReversal_Asset - то ли фича, то ли баг
Наткнулся на, на мой взгляд, явный баг стандарнтого кода в Ax2012R3
(возможно это уже пропатчено было где-то)

(C)TransactionReversal_Asset.canReverse_AnyTransType (и в куче других похожих методов этого класса аналогичная ситуация), строка 77

X++:
AssetTrans assetTransAll;
TransactionReversalTrans reversalTrans;

select RecId, AssetId, BookId, TransType from assetTransAll
    where
        assetTransAll.AssetId == _assetTransMain.AssetId
        && assetTransAll.BookId == _assetTransMain.BookId
        && assetTransAll.RecId != _assetRecId
        && assetTransAll.TransDate >= assetTransDateDerogatoryTrans
        && ((assetTransAll.TransType == AssetTransType::Depreciation)
            || (assetTransAll.TransType == AssetTransType::BonusDepreciation)
            || (assetTransAll.TransType == AssetTransType::ExtraordinaryDepreciation))
    notexists join
        reversalTrans
    where
        reversalTrans.RefRecId == assetTransAll.RecId
        && (reversalTrans.Reversed == true);
при этом в TransactionReversalTrans связь с другими таблицами по RefTableId + RefRecId

получаем ситуацию, когда для AssetTrans реверса не существует, но есть реверс для записи другой таблицы с тем же RecId - и предупреждение не срабатывает, т.к. считае что у AssetTrans есть реверс.

Функционал такой: на форме Asset Trans (не русской) (Fixed Assets - Common - Fixed Assets - Fixed Assets, Books / Value models - Transactions) при выборе транзакции и нажатии Reverse transaction срабатывает предупреждение "Depreciation exist for XXXX, YYYY for this transaction date or later. The transaction that you selected might have affected the calculated depreciation. If you proceed, depreciation is not recalculated." если есть более поздняя не реверсированная AssetTrans.
Соответственно, в нашем случае - проверка не срабатывала, т.к. считала более поздние проводки реверсированные.