|
23.01.2012, 12:44 | #1 |
Мрачный тип
|
Bug ! Жирный bug ! Кому свежую тушку жирного bug'а ?
DAX2009, ядро 5.0.1000.52
Объявляем EDT на основе int64 с любым ArraySize, бОльшим 1, и именем MyType. Создаем элементарный класс X++: class TestClass
{
MyType x;
} X++: MyType parmX(MyType _x = x) { if(x != _x) x = _x; return x; }
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
|
За это сообщение автора поблагодарили: Logger (3), lev (5), S.Kuskov (5). |
13.06.2012, 12:18 | #2 |
Участник
|
Цитата:
Сообщение от TasmanianDevil
DAX2009, ядро 5.0.1000.52
Объявляем EDT на основе int64 с любым ArraySize, бОльшим 1, и именем MyType. Создаем элементарный класс X++: class TestClass
{
MyType x;
} X++: MyType parmX(MyType _x = x) { if(x != _x) x = _x; return x; } Попробовал на последней версии, у меня компилируется без проблем. Мой EDT называется правда Type1, но я не думаю, что есть разница. |
|
13.06.2012, 17:44 | #3 |
Участник
|
Верхнюю половину метода написал один человек; нижнюю - другой, не глядя на верхнюю, и - внимание - ловко "оптимизировал" код использовав список полей. BestPractice ошибок нет - все отлично. Это из стандартного кода AX 2012.
CustWriteOff\checkForDuplicateVouchers X++: protected boolean checkForDuplicateVouchers(Voucher _voucher, TransDate _transDate, recId _existingCustTransRecId) { boolean found; VendTrans vendTrans; // check for duplicate customer transaction found = (select firstonly RecId from custTrans where custTrans.Voucher == _voucher && custTrans.TransDate == _transDate && custTrans.RecId != _existingCustTransRecId).RecId != 0; if (found == true) { return true; } // check for duplicate vendor transactions select count(RecId) from vendTrans where vendTrans.Voucher == _voucher && vendTrans.TransDate == _transDate; found = vendTrans.ReasonRefRecId == 0 ? false : true; return found; } |
|
|
За это сообщение автора поблагодарили: kashperuk (5). |
14.06.2012, 16:43 | #4 |
Участник
|
Napalm, а расскажите подробнее про эту находку.
Где и как столкнулись? Я посмотрел, и этот код там существовал в таком виде с декабря 2008 года. Раз до этого не заметили (а я проверил - не заметили), то скорее всего никто из кастомеров с этим не сталкивался |
|
14.06.2012, 19:04 | #5 |
Участник
|
Цитата:
Скорее всего проблемы будут если этот код "починить". Какой смысл искать дубликаты в VendTrans по полю Voucher, используя значение Voucher из CustTrans? Возможно будут ложные срабатывания - зависит от настройки номерных серий. |
|
08.02.2013, 02:23 | #6 |
Участник
|
AX2012
\Classes\CustAutoCreate\setCustTable
X++: protected void setCustTable() { NumberSeq num; ; custTable.clear(); custTable.initValue(); custTable.data(CustTable::find(templateCustAccount)); if (custAccount) { custTable.AccountNum = custAccount; } else { custTable.AccountNum = NumberSeq::newGetNum(CustParameters::numRefCustAccount()).num(); } if (CustTable::exist(custTable.AccountNum)) { if (num) { num.abort(); checkFailed("@SYS59641"); } checkFailed("@SYS59639", custTable.AccountNum); throw error("@SYS23020"); } if (num) { num.used(); } }
__________________
_databaseTransDelete ... bl@$ ! |
|
|
За это сообщение автора поблагодарили: macklakov (1). |