Показать сообщение отдельно
Старый 26.01.2012, 08:31   #4  
Андрей К. is offline
Андрей К.
Постигающий
 
152 / 10 (1) +
Регистрация: 09.04.2007
!
Цитата:
Сообщение от Damn Посмотреть сообщение
В этом методе входной параметр - RecId из таблицы LedgerTrans. Вызывается reverseSettlement в одном месте - LedgerVoucher.post(), в качестве входного параметра передаётся переменная sourceRecid, которая заполняется значением RecId из записи ledgerTrans, являющейся на тот момент временной записью. RecId во временных таблицах совсем не такие как в постоянных.
Вследствие чего в таблице LedgerTransSettlement появляются записи со значениями типа 3, 4, 5, 6 и т.д. в поле TransRecId (таких записей не большинство, но они есть). И изредка во время разноски возникают ошибки о невозможности вставки записи в эту таблицу, так как TransRecId должно быть уникально.
Не могу понять какую всё-таки цель пытались добиться разработчики и что изменить чтобы ошибка не возникала.
мы тоже наткнулись на эту проблему. во время сторнирования! дело тут не во временных таблицах. вместо них используется RecordList. покопавшись в коде, нашел место LedgerVoucher.postGroup, строка 44

X++:
if (localDetailSummary == DetailSummary::Detail )
        {
            recId++;
            ledgerTrans.RecId = recId;
        }
тот самый счетчик, который заменяет реальные recId и далее попадает в LedgerTransSettlement
хотел добавить условие (как в 73 строке этого самого LedgerVoucher.postGroup)
X++:
if (localDetailSummary == DetailSummary::Detail && !reversal)
        {
            recId++;
            ledgerTrans.RecId = recId;
        }
но пока не хватает уверенности.
кто-то еще сталкивался с проблемой описанной в перовом посте? как решали?

Последний раз редактировалось Андрей К.; 26.01.2012 в 08:40.