01.04.2014, 22:14 | #1 |
Участник
|
Чудеса salesTable.validateWrite()
Такая вот интересная вещь:
Есть код создающий в цикле шапку закупки и строки, потом снова на след итерации шапку и строки X++: while - { if() { //salesTable = null; только это спасает salesTable.clear(); ..... if (salesTable.validateWrite()) salesTable.insert(); } .... } Происходит из-за того, что несмотря на salesTabel.clear(), кот очищает поля и Recid(я это вижу в дебаггере) , потом в salesTableType->validateWrite вызов salesTable.orig() возвращает буфер, созданный на предыдущей итерации , т.е clear() не очищает orig() reread перед clear не помогает, initValue после него - тоже Ест-но, помогает только salesTable = null перед salesTable.clear(); но обычно же так не пишем Тут как-то спрашиали зачем табличным буферам null присваивают. Может, чтоб вот таких сюрпризов избегать? AX2012 R2 Последний раз редактировалось IKA; 01.04.2014 в 23:34. |
|
02.04.2014, 05:43 | #2 |
Участник
|
Простите, не понял что за цикл: while select или просто while?
Если просто while, то цикл должен закончится только по break (ну или ни разу не начаться, если таблица пустая). И... это самописный код? или прямо от Microsoft? Тогда подскажите, где он расположен? Очень интересно взглянуть на полную картину действий.
__________________
// no comments |
|
02.04.2014, 10:51 | #3 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Logger (1), IKA (1). |
02.04.2014, 11:51 | #4 |
Участник
|
По-моему salesTable = null - нормальное решение.
|
|
02.04.2014, 12:10 | #5 |
Участник
|
While select
но это не принципиально. проблема именно та же, на которую дал ссылку S.Kuskov Последний раз редактировалось IKA; 02.04.2014 в 12:13. |
|
02.04.2014, 13:41 | #6 |
Участник
|
Цитата:
Сообщение от IKA
Есть код создающий в цикле шапку закупки и строки, потом снова на след итерации шапку и строки
X++: //salesTable = null; только это спасает salesTable.clear(); ..... if (salesTable.validateWrite()) salesTable.insert(); AX2012 R2 X++: while ... { axSalesTable = AxSalesTable::newValidateInput(); ... axSalesTable.write(); ... axSalesLine = AxSalesLine::construct(); axSalesLine.validateInput(true); axSalesLine.axSalesTable(axSalesTable); ... axSalesLine.write(); } Последний раз редактировалось gl00mie; 02.04.2014 в 13:44. |
|
|
За это сообщение автора поблагодарили: IKA (1). |
02.04.2014, 14:02 | #7 |
Участник
|
Где описано, что это теперь рекоммендованый подход? т.е в каких тренингах/книгах
Уж сразу, чтобы почитать и не натыкаться...на 2009 так тоже делали, конечно, но не оч кошерно считалось( тк не всегда классы должным образом поддерживались во время кастомизаций) |
|
02.04.2014, 16:07 | #8 |
Участник
|
Это скорее из личного опыта, см. также обсуждение В чем преимущество ax-классов перед непосредственной работой с таблицами?
|
|