21.03.2008, 15:18 | #1 |
Axapta Retail User
|
Очередные грабли while select
Проблема выборки ...
X++: static server container calcQty1(ItemId _itemId, InventDimId _inventDimId, InventLocationId _inventLocationId, InventParameters _inventParameters = InventParameters::find()) { InventSum inventSum; InventSum inventSum1; PurchTable purchTable; InventDim inventDim = InventDim::find(_inventDimId); InventDimParm inventDimParm; Qty MyOnHand; Qty onHand; Qty dcOnHand; Qty ordered; Qty invTrans; InventTrans purch; InventTrans inventTrans; InventDim tmpDim; date dat; ; dat = today() - 2; inventDimParm.ItemIdFlag = NoYes::Yes; inventDimParm.InventLocationIdFlag = NoYes::Yes; inventDim.InventLocationId = 'РЦ';//_inventParameters.DistributionCenter; inventSum = InventSum::findSum(_itemId, inventDim, inventDimParm, InventSumFields::All); dcOnHand = inventSum.availPhysical(); tmpDim = InventDim::findOrCreateInventLocationId(_inventLocationId); invTrans = (select /*firstonly*/ sum(qty) from inventTrans order by TransRefID desc where inventTrans.ItemId == _itemId && inventTrans.inventDimId == tmpDim.inventDimId && inventTrans.TransType == InventTransType::Purch && inventTrans.StatusReceipt == StatusReceipt::Ordered && inventTrans.DatePhysical == str2date("",123) ).Qty && inventDim.RecId != 68956563 ; purch = InventTrans::findRecId( (select /*firstonly*/ sum(qty) from inventTrans order by TransRefID desc where inventTrans.ItemId == _itemId && inventTrans.inventDimId == tmpDim.inventDimId && inventTrans.TransType == InventTransType::Purch && inventTrans.StatusReceipt == StatusReceipt::Ordered && inventTrans.DatePhysical == str2date("",123) ).RecId && inventDim.RecId != 68956563); purchTable = PurchTable::find(purch.TransRefId); if(purchTable.createdDate < dat){ invTrans = 0; } if (_inventLocationId != _inventParameters.DistributionCenter) { while select inventDim { if(inventdim.RecId != 32171 || inventdim.RecID != 2685644 || inventdim.RecID != 81579138 || inventDim.RecId != 68956563){ inventDimParm = null; inventSum = InventSum::findSum(_itemId, inventDim, inventDimParm, InventSumFields::All); } } } onHand = inventSum.availPhysical(); // ordered = inventSum.Ordered; //ordered = invTrans; return [dcOnHand, onHand, ordered]; } X++: while select inventDim { if(inventdim.RecId != 32171 || inventdim.RecID != 2685644 || inventdim.RecID != 81579138 || inventDim.RecId != 68956563){ inventDimParm = null; inventSum = InventSum::findSum(_itemId, inventDim, inventDimParm, InventSumFields::All); } |
|
21.03.2008, 15:21 | #2 |
Участник
|
Попробуйте поменять ИЛИ на И
|
|
21.03.2008, 15:24 | #3 |
Axapta Retail User
|
Результат тот же ...
тем более что это значения одного столбца, они "и" немогут быть |
|
21.03.2008, 15:30 | #4 |
Участник
|
Если вы не хотите, чтобы inventdim.RecId был равен какому-то из перечисленных значений - ставьте &&, а не ||
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|
21.03.2008, 15:31 | #5 |
Axapta Retail User
|
CasperSKY,
а зачем вы в условиях и сравнениях числовые значения используете, это во-первых? во-вторых, вы отдельно второй кусок кода, который привели проверяли? |
|
21.03.2008, 15:34 | #6 |
Участник
|
|
|
21.03.2008, 15:39 | #7 |
Axapta Retail User
|
Лана могут ... но результат тотже !
|
|
21.03.2008, 15:43 | #8 |
Axapta Retail User
|
wolfstein, В условиях это я просто проверил их там быть недолжно а в сравнениях ... потому что инициализировать именно эти записи нет возможности кроме как числом... , проверил в КвериАналайзере работает как надо ... с И
Последний раз редактировалось CasperSKY; 21.03.2008 в 15:49. |
|
21.03.2008, 15:49 | #9 |
Участник
|
Жесткий код
Бест практис отдыхает. Ставьте брейк поинты и проверяйте по кускам.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
21.03.2008, 15:53 | #10 |
Участник
|
X++: str2date([COLOR=red]""[/COLOR],123)
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
21.03.2008, 15:56 | #11 |
Axapta Retail User
|
Возможно и DateNull() Это не я писал я только правлю по заданию хотя половина тут ненужна ..всмысле учусь ..., а брейк поинты ставил ... он в св-вах пишет RecID = 68956563 и всё равно выполняет ...
Последний раз редактировалось CasperSKY; 21.03.2008 в 15:58. |
|
21.03.2008, 16:07 | #12 |
Axapta Retail User
|
Цитата:
Цитата:
В условиях это я просто проверил их там быть недолжно а в сравнениях ... потому что инициализировать именно эти записи нет возможности кроме как числом... , проверил в КвериАналайзере работает как надо ... с И
X++: InventDim::findOrCreateInventLocationId(InventLocationId inventLocationId) Последний раз редактировалось wolfstein; 21.03.2008 в 16:11. |
|
21.03.2008, 16:09 | #13 |
Axapta Retail User
|
да по всем кроме указанных .... но касяк видимо не тут ... а в inventSum нада править, потому что убрав выборку получаем тот же результат
|
|
21.03.2008, 16:15 | #14 |
Axapta Retail User
|
|
|
23.03.2008, 12:30 | #15 |
Участник
|
Уважаемый CasperSKY, может это звучит банально, но вы в таблице
inventdim строки с RecId равным вашему условию есть физически? И если да, то может стоит поставить в where inventdim.RecID!= 0 (на всякий случай ) Как вариант еще вывести все значение RecID, возвращаемых через while select, в какой-то буфер и проверить есть ли они там. |
|