Показать сообщение отдельно
Старый 05.02.2009, 12:23   #118  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Итак, по-порядку:
Про запрос - спасибо. Это, думаю, достаточное подтверждение того, что второй будет быстрее.

Про priceDiscLine.ItemId - В запросе стоит условие, которое проверяет, что ItemId должно быть НЕ пустое. Но выборка идет, по сути, из двух таблиц.
Одна из них, к примеру, SalesLine, и в ней у нас ItemId всегда заполнен, правильно?
Вторая - InventTableModule - и там поле ItemId тоже всегда заполнено.
(в обоих таблицах есть уникальные индексы, содержащие поле ItemId и еще одно поле)
Поэтому получается, что эта проверка - лишняя. Или я чего-то не понял?

И напоследок, про саму переменную PriceDiscLine. После запроса, она передается в класс

Цитата:
while select sum(LineAmount) from priceDiscLine
group by ItemId
where priceDiscLine.SalesPurchId == this.SalesPurchId
&& priceDiscLine.ItemId
join inventTableModule
group by EndDisc
where inventTableModule.ItemId == priceDiscLine.ItemId &&
inventTableModule.ModuleType == moduleType &&
inventTableModule.EndDisc == NoYes::Yes
{
balanceEndDisc += priceDiscLine.LineAmount;
}

priceDisc = new PriceDisc(this.moduleType(),
priceDiscLine.ItemId,
priceDiscLine.inventDim(),
priceDiscLine.Unit,
priceDate,
priceDiscLine.Qty,
this.AccountNum,
this.Currency);
Так вот, после выполнения запроса, единственным заполненным полем вроде должно быть только LineAmount (в текущей имплементации - еще ItemId и EndDisc). При этом, в конструктор класса передаются еще и несколько других полей.
Врядли я настолько плохо понимаю работу с Maps..
Если бы там хотя бы использовались this.поля... А так - поля именно этой переменной