Цитата:
Сообщение от
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 индекс.
После этого разноска журнала зарплаты не будет вызывать описанной ошибки.