Функция СписокГрупп(Сорт = 0) Экспорт
Перем Запрос;
Если ПустоеЗначение(БазаДанных) = 1 Тогда
БазаДанных = СоздатьОбъект("SQLiteBase");
КонецЕсли;
Если БазаДанных.Открыта() = 0 Тогда
БазаДанных.Открыть(":memory:");
КонецЕсли;
Запрос = БазаДанных.НовыйЗапрос();
ТекстЗапроса = "SELECT id [Гр:Справочник.Номенклатура] FROM [Справочник.Номенклатура] WHERE isfolder = 1";
Если Сорт = 1 Тогда
ТекстЗапроса = ТекстЗапроса + " ORDER BY DESCR";
ИначеЕсли Сорт = 2 Тогда
ТекстЗапроса = ТекстЗапроса + " ORDER BY CODE";
КонецЕсли;
Попытка
СЗ = СоздатьОбъект("СписокЗначений");
Рез = Запрос.ВыполнитьЗапрос(ТекстЗапроса, СЗ);
Запрос = 0;
Возврат Рез;
Исключение
Сообщить(ОписаниеОшибки());
Возврат 0;
КонецПопытки;
КонецФункции
Процедура КешироватьЗапрос() Экспорт
Состояние("Построение индекса полнотекстового поиска");
Если ПустоеЗначение(БазаДанных) = 1 Тогда
БазаДанных = СоздатьОбъект("SQLiteBase");
КонецЕсли;
Если БазаДанных.Открыта() = 0 Тогда
БазаДанных.Открыть(":memory:");
КонецЕсли;
БазаДанных.НовыйЗапрос().ВыполнитьЗапрос("DROP TABLE IF EXISTS tri;");
БазаДанных.НовыйЗапрос().ВыполнитьЗапрос("CREATE VIRTUAL TABLE tri USING fts5(ID UNINDEXED, DESCR, ismark, VERSTAMP UNINDEXED, tokenize='trigram');");
БазаДанных.НовыйЗапрос().ВыполнитьЗапрос("
|INSERT INTO tri(ROWID,ID,DESCR, ismark, VERSTAMP)
|SELECT
| Номенклатура.ROWID,
| Номенклатура.ID,
| Номенклатура.DESCR,
| Номенклатура.ismark,
| Номенклатура.VERSTAMP
|FROM Справочник_Номенклатура AS Номенклатура
|WHERE Номенклатура.isfolder=2 and Номенклатура.ismark <> '*'
|");
КэшФТС = 1;
СписокГрупп(); // Он нам тут не нужен, но, что-бы тоже закешировался
Состояние("");
КонецПроцедуры
Процедура ЗаполнитьПоАлгоритму2()
ит = СоздатьОбъект("ИндексированнаяТаблица");
ит.НоваяКолонка("Зн");
Для н = 1 По 1000 Цикл
ит.НоваяСтрока();
КонецЦикла;
ит.ЗаполнитьКолонкуПоАлгоритму(, "Зн", 1, 2);
//РедакторТЗ(ит);
ит.Показать();
КонецПроцедуры

Процедура ЗаполнитьПоАлгоритму()
ит = СоздатьОбъект("ИндексированнаяТаблица");
ит.НоваяКолонка("Зн");
Для н = 1 По 1000 Цикл
ит.НоваяСтрока();
КонецЦикла;
ТекстМодуля = "
|Перем зн;
|Функция NextValue()
| Если зн = 0 Тогда
| зн = 1;
| Иначе
| зн = зн + 2;
| КонецЕсли;
| Возврат зн;
|КонецФункции
|зн = 0;
|";
Модуль = СоздатьОбъект("ВыполняемыйМодуль");
Модуль.УстановитьМодуль(ТекстМодуля);
Модуль.НазначитьКонтекст(Контекст);
Модуль.КомпилироватьМодуль();
Модуль.ВыполнитьМодуль();
ит.ЗаполнитьКолонкуПоАлгоритму(, "Зн", Модуль);
//РедакторТЗ(ит);
ит.Показать();
КонецПроцедуры