3 курс (заочка) / Методические пособия / Пособие для ответов на контрольные вопросы
.pdfЗанятие 20
Выполнение заданий по расписанию
Продолжительность |
|
Ориентировочная продолжительность занятия – 35 минут. |
|
Постановка задачи.......................................................................................................... |
632 |
Что такое регламентное задание................................................................................... |
634 |
Создание регламентных заданий ................................................................................. |
634 |
В режиме «Конфигуратор»....................................................................................... |
634 |
Запуск регламентных заданий....................................................................................... |
640 |
В режиме «1С:Предприятие»................................................................................... |
641 |
Контрольные вопросы.................................................................................................... |
642 |
632 1С:Предприятие 8.3. Практическое пособие разработчика
Любая информационная база системы «1С:Предприятие» требует периодического выполнения определенного набора регламентных операций.
Например, по мере изменения существующих данных или добавления новых необходимо выполнять резервное копирование. Тогда, если в результате сбоя информационная база окажется неработоспособной, основную часть данных можно будет восстановить из резервной копии. Поэтому чем чаще выполняется резервное копирование, тем меньшее количество данных придется вводить повторно в случае сбоя.
Другой пример. Для того чтобы использовать полнотекстовый поиск в базе данных, необходимо, чтобы все данные, в которых предполагается выполнять поиск, были проиндексированы. А это значит, что полнотекстовый индекс нужно периодически обновлять. Как часто? Это зависит от интенсивности изменения данных и ввода новых данных. Но очевидно, что делать это нужно с некоторой периодичностью.
Для того чтобы автоматизировать подобные операции, в «1С:Предприятии» существует механизм заданий. Этот механизм позволяет создавать задания, каждое из которых представляет собой некоторую последовательность действий, описанных с помощью встроенного языка. Для каждого задания может быть назначено расписание, в соответствии с которым это задание будет автоматически запущено на исполнение.
На этом занятии мы рассмотрим использование механизма заданий на примере автоматизации двух регламентных операций, связанных с полнотекстовым поиском: операции полнотекстового индексирования и операции слияния индексов.
Мы опишем эти операции средствами встроенного языка и установим расписание для их автоматического выполнения.
Постановка задачи
На предыдущем занятии мы узнали, что для возможности выполнения полнотекстового поиска обязательно должен существовать полнотекстовый индекс. Полнотекстовый индекс создается один раз, и затем должен периодически обновляться.
На самом деле полнотекстовый индекс состоит из двух индексов: основного и дополнительного. При выполнении полнотекстового
Занятие 20 633
поиска поиск осуществляется как в одном, так и в другом индексе. Отличие их заключается в следующем.
Основной индекс спроектирован так, чтобы обеспечивать максимальную скорость поиска при большом объеме данных. Однако оборотной стороной этого является то, что добавление данных в основной индекс осуществляется относительно медленно.
Дополнительный индекс является полной противоположностью основному: добавление данных в дополнительный индекс осуществляется быстро, однако при значительном объеме данных в дополнительном индексе поиск будет выполняться относительно медленно.
Наличие основного и дополнительного индексов предполагает следующую стратегию их использования. Основная масса данных находится в основном индексе, что позволяет выполнять поиск достаточно быстро. Новые данные, измененные или добавленные в систему, добавляются в дополнительный индекс непосредственно в процессе работы пользователей с требуемой периодичностью (например, раз в час или раз в минуту). Такое добавление происходит быстро и оказывает незначительное влияние на производительность системы. Пока объем данных в дополнительном индексе невелик, поиск по нему также выполняется быстро.
В период малой активности пользователей или в период выполнения регламентных действий с информационной базой (например, ночью) выполняется слияние основного и дополнительного индекса (например, раз в сутки). Эта операция может оказывать видимую нагрузку на систему или занимать продолжительное время (в зависимости от накопленных данных). В результате новые данные помещаются в основной индекс, а дополнительный индекс при этом очищается и готов к быстрому приему следующих данных.
Таким образом, чтобы пользователи могли искать во всех данных и не ощущали какого-либо замедления работы системы, дополнительный индекс необходимо обновлять относительно часто (например, раз в час или раз в минуту). В то же время чтобы пользователи выполняли поиск быстро, необходимо, чтобы дополнительный индекс содержал как можно меньше данных, т. е. нужно периодически выполнять слияние основного и дополнительного индексов (например, ночью, в период минимальной активности пользователей).
В результате для автоматизации полнотекстового индексирования нам понадобится два задания. Первое задание будет выполнять
634 1С:Предприятие 8.3. Практическое пособие разработчика
индексирование без слияния и запускаться каждую минуту. Второе будет выполнять слияние индексов и запускаться один раз в сутки, ночью.
Приступим к созданию этих заданий.
Что такое регламентное задание
Регламентные задания располагаются в дереве объектов конфигурации, в ветке Общие. Каждое регламентное задание содержит два основных свойства: Имя метода и Расписание.
Свойство Имя метода связывает регламентное задание с некоторой процедурой или функцией общего модуля, которая, собственно, и будет исполняться. Эта процедура должна содержать алгоритм на встроенном языке, описывающий все те операции, которые должны быть выполнены.
Свойство Расписание позволяет задать периодичность выполнения этой процедуры.
Кроме перечисленных свойств регламентное задание содержит и другие свойства, например Интервал повтора при аварийном завер-
шении и Количество повторов при аварийном завершении. Таким образом, если по какой-либо причине выполнение регламентного задания закончится неудачно, система «1С:Предприятие» может автоматически запустить это задание указанное количество раз по прошествии указанного периода времени.
Создание регламентных заданий
В режиме «Конфигуратор»
Сначала создадим первое регламентное задание по обновлению индекса.
Раскроем ветвь Общие дерева объектов конфигурации. Выделим строку Регламентные задания и добавим новый объект конфигу-
рации Регламентное задание. Зададим его имя – ОбновлениеИндекса
(рис. 20.1).
После этого создадим процедуру, которая и будет выполнять обновление полнотекстового индекса нашей информационной базы.
636 1С:Предприятие 8.3. Практическое пособие разработчика
Выберем модуль РегламентныеПроцедуры. В этом модуле будет создан шаблон процедуры ОбновлениеИндекса(). Заполним его следующим образом (листинг 20.1).
Листинг 20.1. Процедура обновления индекса
Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда
Если Не ПолнотекстовыйПоиск.ИндексАктуален() Тогда ПолнотекстовыйПоиск.ОбновитьИндекс( , Истина);
КонецЕсли; КонецЕсли;
Сначала в этой процедуре проверяется возможность выполнения операций, связанных с полнотекстовым поиском (ведь они могут быть запрещены, например, интерактивно, см. рис. 19.4.).
Если операции полнотекстового поиска разрешены, проверяется, актуален ли полнотекстовый индекс (если после последнего индексирования данные, подлежащие полнотекстовому индексированию, не изменялись, то индекс будет актуален и повторное индексирование не требуется).
В случае необходимости индексирования вызывается метод ОбновитьИндекс() менеджера полнотекстового поиска.
Первый параметр этого метода отвечает за слияние индексов и по умолчанию имеет значение Ложь. Это значит, что слияние индексов выполняться не будет.
Второй параметр метода определяет, какое количество данных будет индексироваться: сразу все, которые необходимо проиндексировать, или порциями. Наша задача – выполнить индексирование как можно быстрее, поэтому указываем, что индексирование будет выполняться порциями (значение Истина).
Размер одной порции фиксирован – 10 000 объектов. Таким образом, если в данный момент требуется проиндексировать, например, 15 000 объектов, то при вызове этого метода из них будет проиндексировано только 10 000 (первая порция), а оставшиеся объекты будут проиндексированы при следующем вызове этого метода (при следующем запуске нашего регламентного задания).
Перейдем к составлению расписания запуска регламентного задания.
Нажмем на ссылку Открыть в свойствах регламентного задания (в строке Расписание), и система откроет диалог редактирования расписания (рис. 20.4).
638 1С:Предприятие 8.3. Практическое пособие разработчика
В нижней части диалога отображено созданное нами расписание запуска: Выполнять: каждый день; каждые 60 сек.
Вроде бы мы получили то, что хотели: регламентное задание запускается ежедневно, каждую минуту.
Однако наше ООО «На все руки мастер» не работает круглосуточно, и запуск этого задания в ночное время будет явно бесполезным – данные в базе данных не изменяются. В то же время вполне возможна ситуация, когда некоторые сотрудники задерживаются после окончания рабочего
дня.
Поэтому доработаем расписание следующим образом: укажем Время начала: 08:00 (рис. 20.7).
Рис. 20.7. Указание времени начала запуска
В результате запуск задания будет выполняться не круглые сутки, а только с 8 часов утра. Так как время окончания запуска не указано, запуск задания будет прекращен по окончании текущих суток. Таким образом, с 00:00 до 08:00 часов запуск задания выполняться не будет.
На этом создание расписания регламентного задания закончено, нажмем ОK.
В качестве последнего штриха установим в свойствах регламентного задания флажок Предопределенное (рис. 20.8).
Установка этого свойства означает, что после запуска системы в режиме 1С:Предприятие будет создано одно предопределенное регламентное задание. В противном случае такое задание пришлось бы создавать средствами встроенного языка.
На этом создание регламентного задания Обновление индекса завершено.
640 1С:Предприятие 8.3. Практическое пособие разработчика
На закладке Общее укажем, что задание будет запускаться каждый день (Повторять каждые: 1 дн.), а на закладке Дневное укажем время начала выполнения задания (Время начала: 01:00), рис. 20.9.
Рис. 20.9. Расписание задания «СлияниеИндексов»
В результате мы получим следующее расписание запуска регламент-
ного задания: Выполнять: каждый день; с 1:00 один раз в день.
На этом создание регламентного задания СлияниеИндексов завершено, нажмем ОK.
Запуск регламентных заданий
Дальнейшее выполнение регламентных заданий не требует никаких дополнительных действий разработчика.
Как мы уже говорили на теоретическом занятии (стр. 200) в начале книги, система «1С:Предприятие» поддерживает два варианта работы: файловый и клиент-серверный.
Наша демонстрационная информационная база работает в файловом варианте работы. При старте клиентского приложения запускается еще один поток с подключением к базе данных, последовательно выполняющий регламентные задания, инициированные клиентом.
Если бы наша информационная база работала в клиент-серверном варианте, то для автоматического запуска и выполнения созданных нами заданий также не требовалось бы дополнительных действий.