Показать сообщение отдельно
Старый 28.08.2009, 09:34   #12  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 124 (5) +++++
Регистрация: 14.12.2001
Цитата:
Сообщение от Alexx7 Посмотреть сообщение
Такая же ошибка при разноске/проверке журнала.
проверка проходит после прогонки Job с кодом
X++:
    RPayJournalTrans    rPayJournalTrans;
    int                 i = 1;
    ;

    ttsbegin;

    while select forupdate rPayJournalTrans
        where rPayJournalTrans.JournalId == 'Номер журнала который не разносится'
    {
        rPayJournalTrans.LineNum = i;
        rPayJournalTrans.update();
        i ++;
    }

    ttscommit;
Но постоянно прогонять джоб тоже не вариант. А проблема так и не уходит. Что можно сделать?
Это старый известный баг (странно, что до сих пор не поправили). Правда, он несколько из другой серии, нежели вышеприведенные сообщения. Тут проблема в том, что из-за некорректного индекса на RPayJournalTrans неверно работает автонумерация строк (присвоение значений полю LineNum) при создании строк журнала через форму RPayJournalTrans. Автонумерация строк журнала опирается на то, что LineNum должен быть уникальным в рамках каждого журнала, см. таблицы строк стандартных журналов InventJournalTrans, ProjJournalTrans, ProdJournalBOM, ProdJournalRoute. В этом плане в LedgerJournalTrans есть небольшое отличие, но оно связано с ваучером и особенностями разноски строк журнала ГК.

Наши же локализаторы, как всегда пошли своим путем, создав на RPayJournalTrans индекс JournalLineIdx и засунув в него помимо JournalId и LineNum еще кучу полей. В результате, автонумерация, которая обеспечивается заполнением свойства CounterField на дата-сорсе, работает некорректно. Решение достаточно простое:
1. Создать уникальнай индекс на таблице RPayJournalTrans из двух полей: JournalId и LineNum (именно в таком порядке). Тут надо быть осторожным, если у вас уже есть кривые журналы с неправильными номерами строк, необходимо выполнить джоб для их перенумерации, наподобие того, что привел выше Alexx7.
2. На форме RPayJournalTrans у одноименного дата-сорса в свойстве Index указать созданный в п.1 индекс.

После этого разноска журнала зарплаты не будет вызывать описанной ошибки.
За это сообщение автора поблагодарили: Alexx7 (1).