![]() |
#1 |
Участник
|
Непонятная ошибка
Всем дорого времени суток.
Появилась непонятная ошибка при обработке отборочной по заказу на покупку. Невозможно отредактировать запись в Строки покупки (PurchLine). Обновление должно выполняться внутри проводки. S)\Classes\xRecord\doUpdate (S)\Classes\PurchFormLetter_PackingSlip\updateNow - line 123 (S)\Classes\PurchFormLetter\insertJournal - line 22 (S)\Classes\PurchFormLetter\createJournal - line 74 (S)\Classes\PurchFormLetter\run - line 109 (S)\Classes\PurchFormLetter\mainOnServer - line 117 (C)\Classes\PurchFormLetter\main - line 31 (C)\Classes\FormFunctionButtonControl\Clicked (C)\Classes\FormMenuButtonControl\Clicked (C)\Classes\FormMenuButtonControl\Clicked - line 24 Код стандартный, на тестовой копии приложения все работает. Ошибка возникает только если по какой то строке закупки уже есть обработанное количество ![]() Что это может быть, может кто то подсказать? |
|
![]() |
#2 |
Участник
|
не открыта транзакция (ttsBegin)
|
|
![]() |
#3 |
Участник
|
а что непонятного то? вроде даже по-русски написано "Обновление должно выполняться внутри проводки"
это значит, что update надо внутри ttsbegin..ttscommit вызывать. если на копии работает, то, возможно, просто не откомпилировано приложение |
|
![]() |
#4 |
Участник
|
Непонятность в том что код стандартный, запись выбирается на обновление внутри проводки. Код с копии переносили на рабочую (мало ли), пересоздание индексов, компиляцию делали. Из-за чего то еще может быть глюк?
|
|
![]() |
#5 |
Участник
|
Покажите, пожалуйста, код метода PurchFormLetter.insertJournal(), там должна начинаться транзакция. Также, сделайте инкрементную компиляцию этого класса.
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: jonny (2). |
![]() |
#6 |
Участник
|
Можно написать код, который будет трейсить коллстек в
А потом по логам разобраться кто гадит (или бряков туда наставить) Еще при исключениях, даже перехваченных, транзакция прерывается. Цитата:
выбирается на обновление внутри проводки
Последний раз редактировалось belugin; 18.10.2013 в 08:52. |
|
|
За это сообщение автора поблагодарили: jonny (2), S.Kuskov (1). |
![]() |
#7 |
Участник
|
Да, конечно, "транзакция" верно.
|
|
![]() |
#8 |
Участник
|
Вот код PurchFormLetter.insertJournal(), модификаций никаких.
X++: protected void insertJournal() { // <GEEU> NumberSeq registerNumSeqCode; // </GEEU> try { ttsbegin; numberSeq = this.allocateNumAndVoucher(); [number, internalNumber, voucher] = this.getNumAndVoucher(); // <GEEU> if (purchParmTable.DocRegister_LT) { registerNumSeqCode = NumberSeq::newGetNumFromCode(LtInvoiceAutoNumberingTable::find(ltDocNumberingCode).NumberSequenceCode); number = registerNumSeqCode.num(); } // </GEEU> if (!this.updateNow()) throw error(strfmt("@SYS21533")); this.postUpdate(); this.interCompanyPost(); TransactionLog::create(this.transactionLogType(),this.transactionLogTxt()); if (updateSalesLines && updateSalesLinesQuery) this.updateSalesTable(updateSalesLinesQuery); ttscommit; if (numberSeq) numberSeq.used(); // <GEEU> if (registerNumSeqCode) { registerNumSeqCode.used(); } // </GEEU> this.createPayment(); } catch(Exception::Error) { ttsabort; throw error("@SYS93835"); } } |
|
![]() |
#9 |
----------------
|
пройдитесь дебагером по PurchFormLetter_PackingSlip\updateNow и посмотрите состояние транзакции при этом
|
|
![]() |
#10 |
Участник
|
Ну тогда смотрите проблему в методе updateNow().
Там purchLine должен выбираться для обновления. Смотрите такую строчку: X++: purchLine = this.getPurchLine(purchParmLine, true);
__________________
// no comments Последний раз редактировалось dech; 18.10.2013 в 12:23. |
|