Только что проверил три разных метода
Процедура Сформировать1()
Спр1 = СоздатьОбъект("Справочник.Валюты");
Спр1.ИспользоватьДату(Дата1);
Спр1.НайтиЭлемент(Вал1);
Зн1 = Спр1.Текущ_курс;
Сообщить("метод1 на дату = " + Дата1 + " курс = " + Зн1);
КонецПроцедуры
Процедура Сформировать2()
Спр1 = СоздатьОбъект("Справочник.Валюты");
Спр1.НайтиЭлемент(Вал1);
Зн1 = Спр1.Текущ_курс.Получить(Дата1);
Сообщить("метод2 на дату = " + Дата1 + " курс = " + Зн1);
КонецПроцедуры
Процедура Сформировать3()
Спр1 = СоздатьОбъект("Справочник.Валюты");
Спр1.НайтиЭлемент(Вал1);
ТекЗапись=Спр1.ТекущийЭлемент();
ПерКурс=СоздатьОбъект("Периодический");
ПерКурс.ИспользоватьОбъект("Текущ_курс",ТекЗапись);
Зн1 = ПерКурс.ЗначениеНаДату(Дата1);
Сообщить("метод3 на дату = " + Дата1 + " курс = " + Зн1);
КонецПроцедуры
Все генерируют один и тот же запрос к базе данных
exec sp_executesql N'Select * from _1SCONST(NOLOCK)
where ID=@P1 and OBJID=@P2 and DATE<=@P3
order by ID DESC, OBJID DESC, DATE DESC, TIME DESC, DOCID DESC'
, N'@P1 int,@P2 varchar(9),@P3 datetime', 92, ' 2 ', 'Oct 1 2009 12:00:00:000AM'
Недостатки этого запроса
1. Зачем возвращать все значения( а если там миллион строк) меня интересует только самая последняя дата ( первая в выборке) надо всего лишь поставить top 1
2. Зачем нужны order by ID DESC, OBJID DESC ведь id OBJID
не изменяются - лишняя нагрузка на sql
3. Если значения не меняются документами тогда достаточно будет только сортировки DATE
Вывод Чтобы ускорить получение периодич значения на дату
надо написать свой прямой запрос.
Если значение не меняется документами :
Select top 1 * from _1SCONST(NOLOCK)
where ID=@P1 and OBJID=@P2 and DATE<=@P3
order by DATE DESC
Если значение меняется документами :
Select top 1 * from _1SCONST(NOLOCK)
where ID=@P1 and OBJID=@P2 and DATE<=@P3
order by DATE DESC, TIME DESC, DOCID DESC
Еще больше ускорить можно если эти новые запросы оформить как хранимые процедуры.