JohnyDeath писал(а) 23. Сентября 2010 :: 05:45:А если текст запроса оставить старым и добавить такую строку:
глОстТовара.ДобПараметр(1,14,9,0);
?
работает долго и в этом случае нужен именно ВыполнитьСкалярный ( с Выполнить падает )
Процедура Сформировать22()
спр=СоздатьОбъект("Справочник.СкладскиеЯчейки");
стрдатыТА=строка(формат(НачМесяца(ПолучитьДатуТА()),"ДГГГГММДД"));
стрдатыТА = " cast('" + стрдатыТА + "' as " + ТипДата_sql + " )";
глОстТовара = СоздатьОбъект("ODBCRecordset");
ТекстЗапроса = "
|SET NOCOUNT ON
|declare @ВыбЯчейка Char(9)
|SET @ВыбЯчейка = ?
|SELECT
| SUM($Рег.ОстатокТовара)
|FROM
| $РегистрИтоги.ОстаткиТоваров Рег (NoLock)
|WHERE
| Рег.PERIOD="+стрдатыТА+" AND
| $Рег.СклЯчейка = @ВыбЯчейка
|";
Если глОстТовара.Подготовить(ТекстЗапроса)=0 тогда
сообщить("Ошибка подготовки запроса остатков по складу (гл)! "+глОстТовара.ПолучитьОписаниеОшибки()+РазделительСтрок+"Свяжитесь с админитсратором!!!");
КонецЕсли;
глОстТовара.ДобПараметр(1,14,9,0);
Для Инд=1 По 10 Цикл
Сообщить("Попытка № "+Инд);
спр.ВыбратьЭлементы(0);
А=0;
ОбщееНачало=_GetPerformanceCounter();
Пока Спр.ПолучитьЭлемент()=1 Цикл
Если Спр.ЭтоГруппа()=1 Тогда
Продолжить;
КонецЕсли;
глОстТовара.УстПараметр(1, Спр.ТекущийЭлемент() );
ост=глОстТовара.ВыполнитьСкалярный();
//ост=глОстТовара.Выполнить();
А=А+1;
Если А=1000 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
ОбщееВремя=(_GetPerformanceCounter()-ОбщееНачало)/1000;
Сообщить("Прямойзапрос Параметр 22 = "+ОбщееВремя);
КонецЦикла;
КонецПроцедуры
Результат
Попытка № 1
Прямойзапрос Параметр 22 = 5.912
Попытка № 2
Прямойзапрос Параметр 22 = 5.915
Попытка № 3
Прямойзапрос Параметр 22 = 5.929
Попытка № 4
Прямойзапрос Параметр 22 = 5.978
Попытка № 5
Прямойзапрос Параметр 22 = 6.043
Попытка № 6
Прямойзапрос Параметр 22 = 5.942
Попытка № 7
Прямойзапрос Параметр 22 = 6.044
Попытка № 8
Прямойзапрос Параметр 22 = 6.038
Попытка № 9
Прямойзапрос Параметр 22 = 6.325
Попытка № 10
Прямойзапрос Параметр 22 = 6.033