04.06.2018, 09:40 | #1 |
Участник
|
Как проверить, что можно вызвать оператор next на таблице?
1. Как проверить, что можно вызвать оператор next на таблице?
2. Как избежать выпадения в дебаггер? вопросы относятся к любой версии аксапты. Код: X++: static void Job13(Args _args) { CustTrans ct1; CustTrans ct2; // let's assume that method 'one' search a record select ct1; // where ct1.AccountNum == 'someAccount' ct2.data(ct1.data()); // or ct2.data(ct1); // contract postcondition Debug::assert(ct1.RecId != 0); Debug::assert(ct2.RecId == ct1.RecId); ////////////////////////////////// // let's assume that method 'two' accepts a custTrans record as parameter Debug::assert(ct2.RecId != 0); try { // Questions: // 1. How to check that 'next' can be used? // 2. How to suppress a debugger? next ct2; } catch { Warning('catch it!'); } } |
|
04.06.2018, 10:40 | #2 |
Участник
|
Как вариант, вместо
X++: ct2.data(ct1.data()); X++: select ct2 where ct2.RecId == ct1.RecId |
|
04.06.2018, 11:04 | #3 |
Участник
|
Не знаю поможет ли это вам, но в AX 2012 методы возвращают разные значения
X++: info(strFmt("%1 %2", ct2.found(), ct1.found()));
__________________
Sergey Nefedov |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
04.06.2018, 12:28 | #4 |
Участник
|
вопрос не в том "как написать"
вопрос как проверить что именно передает уже написанный код. Цитата:
и этот, похоже, то что надо. а в предыдущих версиях как? |
|
04.06.2018, 21:40 | #5 |
Administrator
|
Глупый вопрос, но конструкция
X++: if (ct2) { next ct2; }
__________________
Возможно сделать все. Вопрос времени |
|
04.06.2018, 22:26 | #6 |
Участник
|
Не прокатывает.
|
|
|
За это сообщение автора поблагодарили: sukhanchik (2), mazzy (2). |
04.06.2018, 22:30 | #7 |
Administrator
|
Понял, спасибо. Я просто очень редко пользовался этой конструкцией и поэтому на такие особенности еще не успел наткнуться
__________________
Возможно сделать все. Вопрос времени |
|
04.06.2018, 23:19 | #8 |
Участник
|
угу. не прокатывает. я специально добавил
X++: Debug::assert(ct2.RecId != 0); |
|
05.06.2018, 08:26 | #9 |
Участник
|
Я делал всегда так, начиная с Ах3.0..Ах2012 и у меня работало:
X++: static void nextCursor(Args _args) { SalesTable salesTable; select noFetch salesTable where salesTable.RecId != 5637159589; next salesTable; do { info(strFmt('Sales id is %1', salesTable.SalesId)); if (salesTable) { next salesTable; } } while (salesTable); info('Done'); } |
|
05.06.2018, 15:50 | #10 |
Участник
|
На 2009 вот так перестал ругаться и вываливаться в отладчик. И recId вроде как одинаков у обоих курсоров.
X++: ct2.data(ct1.data()); // or ct2.data(ct1);
ct2.reread(); X++: next ct1 X++: next ct2 |
|
|
За это сообщение автора поблагодарили: Владимир Максимов (2), alex55 (1). |
05.06.2018, 16:34 | #11 |
Боец
|
DEL
Последний раз редактировалось DSPIC; 05.06.2018 в 16:37. |
|
05.06.2018, 17:06 | #12 |
Участник
|
AX 2012 6.3.3000.111
на строке next ct2 в debug не выходит, DAX сваливается в дамп и пытается отправиться в MS... |
|
05.06.2018, 20:33 | #13 |
Участник
|
У меня получилось обойтись без ошибок так
X++: ct2.reread();
next ct2;
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|