Работают ТП, немного призадумался, у меня ведь идут многочисленные отборы по полям документов в ТП-журналах. Решил немного индексов повесить на поля табличек БД. Набросал нечто:
Перем гСписИндексныхПолей;
//*******************************************
Процедура Сформировать()
гНаборЗаписей = СоздатьОбъект("ODBCRecordSet");
гНаборЗаписей.УстБД1С();
// надо определить
СЦ = 0;
Для СЦ = 1 По гСписИндексныхПолей.РазмерСписка() Цикл
вОбъект = "";
вПолеОб = гСписИндексныхПолей.ПолучитьЗначение(СЦ, вОбъект);
ИдОбъекта = "";
ИдРеквизита = "";
вМетаДок = Метаданные.Документ(вОбъект);
Если вМетаДок.Выбран() = 1 Тогда
ИдПоля = "";
ИдОбъекта = "DH"+глМетаДатаВерк.ИДДокумента(вОбъект);
Если глЕстьРеквизитШапки(вПолеОб,вОбъект) <> Да Тогда
Продолжить;
КонецЕсли;
ИдПоля = "SP"+глМетаДатаВерк.ИДРеквизитаШапки(вОбъект,вПолеОб);
вindex_name = "_"+ИдОбъекта+"_"+ИдПоля;
вТекстЗапроса = Шаблон("CREATE NONCLUSTERED INDEX [вindex_name] ON [ИдОбъекта] ( [ИдПоля] ASC ) ");
Попытка
Если гНаборЗаписей.ВыполнитьИнструкцию(вТекстЗапроса) = 1 Тогда
Сообщить("Выполняется: "+ вТекстЗапроса,"i");
Иначе
Сообщить(гНаборЗаписей.ПолучитьОписаниеОшибки() ,"!");
КонецЕсли;
Исключение
вСтрокаОшибки = ОписаниеОшибки();
Если ПустоеЗначение(вСтрокаОшибки) = 0 Тогда
Если Найти(вСтрокаОшибки,"already an index")>0 Тогда
Сообщить("Индекс уже существует: " + глВСтроку3(вindex_name),"iii");
Иначе
Сообщить(ОписаниеОшибки(),"!!!");
КонецЕсли;
КонецЕсли;
КонецПопытки;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
//============================================================
Процедура ПриОткрытии()
Если глЭтоСкуль = 0 Тогда
Сообщить("РАботает только в SQl-версии!","!!");
СтатусВозврата(0); Возврат;
КонецЕсли;
гСписИндексныхПолей.ДобавитьЗначение("Клиент","РасходнаяНакладная");
гСписИндексныхПолей.ДобавитьЗначение("СостояниеСборки","РасходнаяНакладная");
гСписИндексныхПолей.ДобавитьЗначение("СостояниеДоставки","РасходнаяНакладная");
гСписИндексныхПолей.ДобавитьЗначение("Клиент","РасходнаяРозничная");
гСписИндексныхПолей.ДобавитьЗначение("СостояниеСборки","РасходнаяРозничная");
гСписИндексныхПолей.ДобавитьЗначение("СостояниеДоставки","РасходнаяРозничная");
гСписИндексныхПолей.ДобавитьЗначение("Касса","РасходнаяРозничная");
гСписИндексныхПолей.ДобавитьЗначение("Склад","РасходнаяРозничная");
гСписИндексныхПолей.ДобавитьЗначение("Клиент","Счет");
гСписИндексныхПолей.ДобавитьЗначение("СостояниеСборки","Счет");
гСписИндексныхПолей.ДобавитьЗначение("Клиент","ЗаявкаНаОтгрузкуЗаНал");
КонецПроцедуры // ПриОткрытии
гСписИндексныхПолей = СоздатьОбъект("СписокЗначений");
А вот какие меня ждут последствия от этого шага, увы не в полной мере предстваляю.