Постановка задачи. Что такое регламентное задание. Создание регламентных заданий. В режиме «Конфигуратор»
Постановка задачи На предыдущем занятии мы узнали, что для возможности выпол- нения полнотекстового поиска обязательно должен существовать полнотекстовый индекс. Полнотекстовый индекс создается один раз, и затем должен периодически обновляться. На самом деле полнотекстовый индекс состоит из двух индексов: основного и дополнительного. При выполнении полнотекстового
поиска поиск осуществляется как в одном, так и в другом индексе. Отличие их заключается в следующем. Основной индекс спроектирован так, чтобы обеспечивать макси- мальную скорость поиска при большом объеме данных. Однако оборотной стороной этого является то, что добавление данных в основной индекс осуществляется относительно медленно. Дополнительный индекс является полной противоположностью основному: добавление данных в дополнительный индекс осущест- вляется быстро, однако при значительном объеме данных в дополни- тельном индексе поиск будет выполняться относительно медленно. Наличие основного и дополнительного индексов предполагает следующую стратегию их использования. Основная масса данных находится в основном индексе, что позволяет выполнять поиск достаточно быстро. Новые данные, измененные или добавленные в систему, добавляются в дополнительный индекс непосредственно в процессе работы пользователей с требуемой периодичностью (например, раз в час или раз в минуту). Такое добавление происходит быстро и оказывает незначительное влияние на производительность системы. Пока объем данных в дополнительном индексе невелик, поиск по нему также выполняется быстро. В период малой активности пользователей или в период выпол- нения регламентных действий с информационной базой (например, ночью) выполняется слияние основного и дополнительного индекса (например, раз в сутки). Эта операция может оказывать видимую нагрузку на систему или занимать продолжительное время (в зави- симости от накопленных данных). В результате новые данные поме- щаются в основной индекс, а дополнительный индекс при этом очищается и готов к быстрому приему следующих данных.
Таким образом, чтобы пользователи могли искать во всех данных и не ощущали какого-либо замедления работы системы, допол- нительный индекс необходимо обновлять относительно часто (например, раз в час или раз в минуту). В то же время чтобы пользо- ватели выполняли поиск быстро, необходимо, чтобы дополнительный индекс содержал как можно меньше данных, т. е. нужно периоди- чески выполнять слияние основного и дополнительного индексов (например, ночью, в период минимальной активности пользователей). В результате для автоматизации полнотекстового индексирования нам понадобится два задания. Первое задание будет выполнять индексирование без слияния и запускаться каждую минуту. Второе будет выполнять слияние индексов и запускаться один раз в сутки, ночью. Приступим к созданию этих заданий.
Что такое регламентное задание Регламентные задания располагаются в дереве объектов конфигу- рации, в ветке Общие. Каждое регламентное задание содержит два основных свойства: Имя метода и Расписание. Свойство Имя метода связывает регламентное задание с некоторой процедурой или функцией общего модуля, которая, собственно, и будет исполняться. Эта процедура должна содержать алгоритм на встроенном языке, описывающий все те операции, которые должны быть выполнены. Свойство Расписание позволяет задать периодичность выполнения этой процедуры. Кроме перечисленных свойств регламентное задание содержит и другие свойства, например Интервал повтора при аварийном завер- шении и Количество повторов при аварийном завершении. Таким образом, если по какой-либо причине выполнение регламентного задания закончится неудачно, система «1С: Предприятие» может автоматически запустить это задание указанное количество раз по прошествии указанного периода времени.
Создание регламентных заданий В режиме «Конфигуратор» Сначала создадим первое регламентное задание по обновлению индекса. Раскроем ветвь Общие дерева объектов конфигурации. Выделим строку Регламентные задания и добавим новый объект конфигу- рации Регламентное задание. Зададим его имя – ОбновлениеИндекса (рис. 20. 1). После этого создадим процедуру, которая и будет выполнять обнов- ление полнотекстового индекса нашей информационной базы. В качестве такой процедуры может выступать любая процедура или функция неглобального общего модуля, которую можно вызвать на сервере (у общего модуля должно быть установлено свойство Сервер). Добавим в конфигурацию общий модуль с именем Регламент- ныеПроцедуры и установим флажок Вызов сервера для видимости его экспортных процедур и функций (рис. 20. 2).
Рис. 20. 2. Свойства общего модуля
Вернемся к свойствам регламентного задания ОбновлениеИндекса. Нажмем кнопку открытия у поля ввода Имя метода. Система откроет окно выбора общего модуля (рис. 20. 3).
Рис. 20. 3. Выбор обработчика события Выберем модуль РегламентныеПроцедуры. В этом модуле будет создан шаблон процедуры ОбновлениеИндекса(). Заполним его следующим образом (листинг 20. 1). листинг 20. 1. Процедура обновления индекса Сначала в этой процедуре проверяется возможность выполнения операций, связанных с полнотекстовым поиском (ведь они могут быть запрещены, например, интерактивно, см. рис. 19. 4. ). Если операции полнотекстового поиска разрешены, проверяется, актуален ли полнотекстовый индекс (если после последнего индекси- рования данные, подлежащие полнотекстовому индексированию, не изменялись, то индекс будет актуален и повторное индексирование не требуется). В случае необходимости индексирования вызывается метод
ОбновитьИндекс() менеджера полнотекстового поиска. Первый параметр этого метода отвечает за слияние индексов и по умолчанию имеет значение Ложь. Это значит, что слияние индексов выполняться не будет. Второй параметр метода определяет, какое количество данных будет индексироваться: сразу все, которые необходимо проиндексировать, или порциями. Наша задача – выполнить индексирование как можно быстрее, поэтому указываем, что индексирование будет выполняться порциями (значение Истина). Размер одной порции фиксирован – 10000 объектов. Таким образом, если в данный момент требуется проиндексировать, например, 15 000 объектов, то при вызове этого метода из них будет проиндексировано только 10 000 (первая порция), а оставшиеся объекты будут проин- дексированы при следующем вызове этого метода (при следующем запуске нашего регламентного задания). Перейдем к составлению расписания запуска регламентного задания. Нажмем на ссылку Открыть в свойствах регламентного задания (в строке Расписание), и система откроет диалог редактирования расписания (рис. 20. 4). Диалог содержит несколько закладок, которые позволяют задать различные виды расписаний; в нижней части диалога отображается итоговый результат всех установок. Наша задача – запускать регламентное задание ежедневно, каждую минуту. Поэтому прежде всего на закладке Общие укажем, что запуск задания должен повторяться каждый день (Повторять каждые: 1 дн. ), рис. 20. 5.
Рис. 20. 5. Запуск задания каждый день
Теперь перейдем на закладку Дневное и зададим порядок запуска задания в течение дня. Укажем, что запуск задания должен повто- ряться каждые 60 секунд (Повторять через: 60 сек. ), рис. 20. 6.
Рис. 20. 6. Запуск задания каждую минуту В нижней части диалога отображено созданное нами расписание запуска: Выполнять: каждый день; каждые 60 сек. Вроде бы мы получили то, что хотели: регламентное задание запу- скается ежедневно, каждую минуту. Однако наше ООО «На все руки мастер» не работает круглосу- точно, и запуск этого задания в ночное время будет явно беспо- лезным – данные в базе данных не изменяются. В то же время вполне возможна ситуация, когда некоторые сотрудники задерживаются
после окончания рабочего дня. Поэтому доработаем расписание следующим образом: укажем Время начала: 08: 00 (рис. 20. 7).
Рис. 20. 7. Указание времени начала запуска
В результате запуск задания будет выполняться не круглые сутки, а только с 8 часов утра. Так как время окончания запуска не указано, запуск задания будет прекращен по окончании текущих суток. Таким образом, с 00: 00 до 08: 00 часов запуск задания выполняться не будет. На этом создание расписания регламентного задания закончено, нажмем ОK. В качестве последнего штриха установим в свойствах регламентного задания флажок Предопределенное (рис. 20. 8). Установка этого свойства означает, что после запуска системы в режиме 1С: Предприятие будет создано одно предопределенное регла- ментное задание. В противном случае такое задание пришлось бы создавать средствами встроенного языка. На этом создание регламентного задания Обновление индекса завершено.
Рис. 20. 8. Предопределенное регламентное задание
Теперь по аналогии создадим второе регламентное задание – Слияни- еИндексов. В палитре его свойств нажмем кнопку открытия у поля ввода Имя метода. В открывшемся диалоге выберем модуль Регла- ментныеПроцедуры. В этом модуле будет создан шаблон процедуры СлияниеИндексов(). Заполним его следующим образом (листинг 20. 2). листинг 20. 2. Процедура «СлияниеИндексов» Эта процедура аналогична показанной в листинге 20. 1, за исклю- чением того, что при обновлении индекса выполняется слияние индексов (первый параметр Истина), и индексирование выполняется целиком, для всех данных (второй параметр Ложь по умолчанию), поскольку в данном случае время выполнения индексирования для нас не критично. В свойствах задания установим также флажок Предопределенное и приступим к редактированию расписания. Для этого нажмем на ссылку Открыть в свойствах регламентного задания (в строке Распи- сание). На закладке Общее укажем, что задание будет запускаться каждый день (Повторять каждые: 1 дн. ), а на закладке Дневное укажем время начала выполнения задания (Время начала: 01: 00), рис. 20. 9.
Рис. 20. 9. Расписание задания «СлияниеИндексов»
В результате мы получим следующее расписание запуска регламент- ного задания: Выполнять: каждый день; с 1: 00 один раз в день. На этом создание регламентного задания СлияниеИндексов завершено, нажмем ОK.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|