17.10.2013, 14:42 | #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 Код стандартный, на тестовой копии приложения все работает. Ошибка возникает только если по какой то строке закупки уже есть обработанное количество Что это может быть, может кто то подсказать? |
|
17.10.2013, 14:53 | #2 |
Участник
|
не открыта транзакция (ttsBegin)
|
|
17.10.2013, 14:55 | #3 |
Участник
|
а что непонятного то? вроде даже по-русски написано "Обновление должно выполняться внутри проводки"
это значит, что update надо внутри ttsbegin..ttscommit вызывать. если на копии работает, то, возможно, просто не откомпилировано приложение |
|
18.10.2013, 08:09 | #4 |
Участник
|
Непонятность в том что код стандартный, запись выбирается на обновление внутри проводки. Код с копии переносили на рабочую (мало ли), пересоздание индексов, компиляцию делали. Из-за чего то еще может быть глюк?
|
|
18.10.2013, 08:34 | #5 |
Участник
|
Покажите, пожалуйста, код метода PurchFormLetter.insertJournal(), там должна начинаться транзакция. Также, сделайте инкрементную компиляцию этого класса.
__________________
// no comments |
|
|
За это сообщение автора поблагодарили: jonny (2). |
18.10.2013, 08:45 | #6 |
Участник
|
Можно написать код, который будет трейсить коллстек в
А потом по логам разобраться кто гадит (или бряков туда наставить) Еще при исключениях, даже перехваченных, транзакция прерывается. Цитата:
выбирается на обновление внутри проводки
Последний раз редактировалось belugin; 18.10.2013 в 08:52. |
|
|
За это сообщение автора поблагодарили: jonny (2), S.Kuskov (1). |
18.10.2013, 11:55 | #7 |
Участник
|
Да, конечно, "транзакция" верно.
|
|
18.10.2013, 11:56 | #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"); } } |
|
18.10.2013, 12:15 | #9 |
----------------
|
пройдитесь дебагером по PurchFormLetter_PackingSlip\updateNow и посмотрите состояние транзакции при этом
|
|
18.10.2013, 12:18 | #10 |
Участник
|
Ну тогда смотрите проблему в методе updateNow().
Там purchLine должен выбираться для обновления. Смотрите такую строчку: X++: purchLine = this.getPurchLine(purchParmLine, true);
__________________
// no comments Последний раз редактировалось dech; 18.10.2013 в 12:23. |
|