|  | 
|  05.09.2011, 11:49 | #1 | 
| Участник | Ошибка налогового регистра по курсовым разницам 
			
			AX 2009 RU7 Некорректно формируются строки налогового регистра по курсовым разницам если в один период подает следующий набор операций: 1. Операция курсовой разницы 2. Сторно 1-й операции 3. Отдельная операция курсовой разницы с суммой равной 2-й В такой или аналогичной ситуации процедура свертки строк может подхватить операцию 2 и 3 и удалить их из регистра вместо 1 и 2. Class / RTax25RegCalc_ExchangeAdj / selectCustVendTrans X++: ...
    void collapseMap()
    {
        container       con;
        int             j;
        MapIterator     it = new MapIterator(collapse);
        CustVendTrans   transCorrect, transDirect;
        while (it.more())
        {
            con = it.value();
// Optimization -->>
//            for (i = 1; i <= conlen(con); i++)
            if (conlen(con) > 1)
            for (i = 2; i <= conlen(con); i++)
// Optimization <<--
            {
                transCorrect = conpeek(con, i);
                if (transCorrect.Correct   == NoYes::No ||
                    transCorrect.TransType == LedgerTransType::AdvanceAdjustment_RU)
                    continue;
// Optimization -->>
//                for (j = 1; j <= conlen(con); j++)
                for (j = i - 1; j >= 1; j--)
// Optimization <<--
                {
// Optimization -->>
//                    if (i == j)
//                        continue;
// Optimization <<--
                    transDirect = conpeek(con, j);
// Optimization -->>
//                    if (transCorrect.TransDate < transDirect.TransDate)
//                        break;
// Optimization <<--
                    if (transDirect.Correct == NoYes::No &&
// Fix -->>
                        transDirect.AmountMST == -transCorrect.AmountMST &&
// Fix <<--
                        LedgerPeriod::find(transCorrect.TransDate).RecId ==
                        LedgerPeriod::find(transDirect.TransDate).RecId)
                    {
                        con = condel(con, j > i ? j : i, 1);
                        con = condel(con, j > i ? i : j, 1);
                        record = condel(record, confind(record, transCorrect), 1);
                        record = condel(record, confind(record, transDirect), 1);
                        i -= (j < i ? #FieldNum2 : 1);
                        break;
                    }
                }
            }
            it.next();
        }
    }
    ;
    while select custVendTrans
// Optimization -->>
//        order by TransDate asc
        order by TransDate asc, Correct asc
// Optimization <<--
... | 
|  |