Создание регламентных заданий
страницаСоздание регламентных заданий
Сначала создайте первое регламентное задание по обновлению индекса.
Сначала добавьте объект конфигурации – регламентное задание с именем ОбновлениеИндекса.
После этого вам нужно создать процедуру, которая и будет выполнять обновление полнотекстового индекса вашей информационной базы.
В качестве такой процедуры может выступать любая процедура или функция неглобального общего модуля, которую можно вызвать на сервере (у общего модуля должно быть установлено свойство Сервер).
Добавьте в конфигурацию общий модуль с именем РегламентныеПроцедуры и установите в его свойствах флажок Вызов сервера для видимости его экспортных процедур и функций``(рис. 21.1).

Рис. 21.1. Свойства общего модуля
В свойствах регламентного задания нажмите кнопку открытия
у поля вводаИмя метода.
1C:EDT откроет окно выбора общего модуля. Выберите модуль РегламентныеПроцедуры (рис. 21.2).

Рис. 21.2. Выбор обработчика события
В этом модуле будет создан шаблон процедуры ОбновлениеИндекса(). Заполните его следующим образом (листинг 21.1).
Листинг 21.1. Процедура обновления индекса
Процедура ОбновлениеИндекса() Экспорт
Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда
Если Не ПолнотекстовыйПоиск.ИндексАктуален() Тогда
ПолнотекстовыйПоиск.ОбновитьИндекс( , Истина);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Сначала в этой процедуре проверяется возможность выполнения операций, связанных с полнотекстовым поиском (ведь они могут быть запрещены, например, интерактивно, рис. 20.2.).
Если операции полнотекстового поиска разрешены, проверяется, актуален ли полнотекстовый индекс (если после последнего индексирования данные, подлежащие полнотекстовому индексированию, не изменялись, то индекс будет актуален и повторное индексирование не требуется).
В случае необходимости индексирования вызывается метод ОбновитьИндекс() менеджера полнотекстового поиска.
Первый параметр этого метода отвечает за слияние индексов и по умолчанию имеет значение Ложь. Это значит, что слияние индексов выполняться не будет.
Второй параметр метода определяет, какое количество данных будет индексироваться: сразу все, которые необходимо проиндексировать, или порциями. Ваша задача – выполнить индексирование как можно быстрее, поэтому вы указываете, что индексирование будет выполняться порциями (значение Истина).
Размер одной порции фиксирован – 10 000 объектов. Таким образом, если в данный момент требуется проиндексировать, например, 15 000 объектов, то при вызове этого метода из них будет проиндексировано только 10 000 (первая порция), а оставшиеся объекты будут проиндексированы при следующем вызове этого метода (при следующем запуске вашего регламентного задания).
Теперь вам нужно составить расписание запуска регламентного задания.
Перейдите на закладку Расписание в редакторе регламентного задания (в строке Расписание), и система откроет диалог редактирования расписания (рис. 21.3).

Рис. 21.3. Диалог редактирования расписания
Диалог содержит несколько закладок, которые позволяют задать различные виды расписаний; в нижней части диалога отображается итоговый результат всех установок.
Ваша задача – запускать регламентное задание ежедневно, каждую минуту.
Поэтому прежде всего на закладке Общие укажите, что запуск задания должен повторяться каждый день (Повторять каждые: 1 дн.), – рис. 21.4.

Рис. 21.4. Запуск задания каждый день
Теперь перейдите на закладку Дневное и задайте порядок запуска задания в течение дня.
Укажите, что запуск задания должен повторяться каждые 60 секунд (Повторять через: 60 сек.), – рис. 21.5.

Рис. 21.5. Запуск задания каждую минуту
В нижней части диалога отображено созданное вами расписание запуска: Выполнять: каждый день; каждые 60 сек.
Вроде бы вы получили то, что хотели: регламентное задание запускается ежедневно, каждую минуту.
Однако ООО «На все руки мастер» не работает круглосуточно, и запуск этого задания в ночное время будет явно бесполезным: данные в базе данных не изменяются. В то же время вполне возможна ситуация, когда некоторые сотрудники задерживаются после окончания рабочего дня.
Поэтому доработайте расписание следующим образом: укажите Время начала: 08:00:00(рис. 21.6).

Рис. 21.6. Указание времени начала запуска
В результате запуск задания будет выполняться не круглые сутки, а только с 8 часов утра. Так как время окончания запуска не указано, запуск задания будет прекращен по окончании текущих суток. Таким образом, с 00:00 до 08:00 часов запуск задания выполняться не будет.
В качестве последнего штриха установите в свойствах регламентного задания флажок Предопределенное (рис. 21.7).

Рис. 21.7. Предопределенное регламентное задание
Установка этого свойства означает, что после запуска системы в прикладном решении будет создано одно предопределенное регламентное задание. В противном случае такое задание пришлось бы создавать средствами встроенного языка.
На этом создание регламентного задания ОбновлениеИндексазавершено.
Теперь по аналогии создайте второе регламентное задание – СлияниеИндексов. Задайте связанную с ним процедуру из общего модуля РегламентныеПроцедуры.
В этом модуле будет создан шаблон процедуры СлияниеИндексов(). Заполните его следующим образом (листинг 21.2).
Листинг 21.2. Процедура «СлияниеИндексов»
Процедура СлияниеИндексов() Экспорт
Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда
Если Не ПолнотекстовыйПоиск.ИндексАктуален() Тогда
ПолнотекстовыйПоиск.ОбновитьИндекс(Истина);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Эта процедура аналогична показанной в листинге 21.1, за исключением того, что при обновлении индекса выполняется слияние индексов (первый параметр Истина) и индексирование выполняется целиком, для всех данных (второй параметр Ложь по умолчанию), поскольку в данном случае время выполнения индексирования для вас не критично.
В свойствах задания установите также флажок Предопределенное и отредактируйте расписание регламентного задания следующим образом.
На закладке Общее укажите, что задание будет запускаться каждый день (Повторять каждые: 1 дн.), а на закладке Дневное укажите время начала выполнения задания (Время начала: 01:00:00) – рис. 21.8.

Рис. 21.8. Расписание задания «СлияниеИндексов»
В результате вы получите следующее расписание запуска регламентного задания: Выполнять: каждый день; с 01:00:00 один раз в день.