Как обеспечить запуск заданий по расписанию в файловом варианте работы

Обновлено: 04.05.2024

Если вы используете учебную версию программы, то пример, приведенный в этой работе, удастся проверить в работе лишь частично. Для полной проверки примера требуется одновременный запуск двух клиентских сеансов: планировщика заданий и обычного пользовательского сеанса.

Учебная версия позволяет запускать только один пользовательский сеанс. Поэтому их работу можно будет проверить только по отдельности. Сначала запустить планировщик заданий и убедиться, что регламентные задания запускаются. Затем закрыть сеанс планировщика и открыть обычный пользовательский сеанс, чтобы выполнить поиск в данных.

Любая информационная база системы 1С:Предприятие требует периодического выполнения определенного набора регламентных операций.

Например, по мере изменения существующих данных или добавления новых необходимо выполнять резервное копирование. Тогда, если в результате сбоя инфобаза окажется неработоспособной, основную часть данных можно будет восстановить из резервной копии. Поэтому чем чаще выполняется резервное копирование, тем меньшее количество данных придется вводить повторно в случае сбоя.

Другой пример – полнотекстовый поиск данных. Для него нужно индексировать данные по мере их обновления, т.е. с некоторой периодичностью.

Для автоматизации подобных операций существует механизм заданий. Он позволяет создавать задания, каждое из которых представляет собой некоторую последовательность действий, описанных с помощью встроенного языка. Для каждого задания может быть назначено расписание, в соответствии с которым это задание будет автоматически запущено на исполнение.

В этой работе мы рассмотрим использование механизма заданий на примере автоматизации двух регламентных операций, связанных с полнотекстовым поиском: операции полнотекстового индексирования и операции слияния индексов.

Мы опишем эти операции средствами встроенного языка, установим расписание для их автоматического выполнения и узнаем, как обеспечить автоматическое выполнение этих заданий по расписанию в случае файлового варианта работы системы.

Постановка задачи

В предыдущей работе мы узнали, что для возможностей выполнения полнотекстового поиска обязательно должен существовать полнотекстовый индекс. Он создается один раз и затем должен периодически обновляться.

На самом деле полнотекстовый индекс состоит из двух индексов:

основного и дополнительного.

Поиск осуществляется по обоим индексам. Но отличие в следующем.

Основной индекс сделан так, чтобы обеспечивать максимальную скорость поиска при большом объеме данных, но добавление в него данных осуществляется медленно.

Дополнительный индекс противоположен основному: добавление данных в него осуществляется быстро, но при значительном объеме данных поиск будет выполняться медленно.

Стратегия использования индексов такова. Основная масса данных находится в основном индексе, что позволяет выполнить быстрый поиск. Новые данные, измененные или добавленные в систему, добавляются в дополнительный индекс непосредственно во время работы системы и пользователей с требуемой периодичностью (раз в час, раз в минуту). Такое добавление происходит быстро и не оказывает влияния на производительность системы. Пока объем данных в дополнительном индексе невелик, поиск по нему также выполняется быстро.

В период малой активности пользователей или в период выполнения регламентных действий с инфобазой выполняется слияние основного и дополнительного индексов (раз в сутки). В результате новые данные помещаются в основной индекс, а дополнительный индекс очищается и готов к быстрому приему следующих данных.

В результате для автоматизации полнотекстового индексирования нам понадобится два задания. Первое будет выполнять индексирование без слияния и запускаться каждую минуту. Второе будет выполнять слияние индексов и запускаться раз в сутки ночью.

Что такое регламентное задание

Регламентные задания располагаются в дереве объектов конфигурации, в ветке Общие. Каждое регламентное задание содержит два основных свойства: Имя метода и Расписание.

Свойство Имя метода связывает регламентное задание с некоторой процедурой или функцией общего модуля, которая и будет исполняться. Эта процедура должна содержать алгоритм на встроенном языке, описывающий все операции, которые должны быть выполнены.

Свойство Расписание позволяет задать периодичность выполнения этой процедуры.

Кроме перечисленных свойств регламентное задание содержит другие свойства, например Интервал повтора при аварийном завершении и Количество повторов при аварийном завершении.

Если по какой-то причине выполнение регламентного задания закончится неудачно, система может автоматически запустить это задание указанное количество раз по прошествии указанного периода времени.

Создание регламентных заданий

В режиме Конфигуратор

Сначала создадим первое регламентное задание по обновления индекса.

Раскроем ветвь Общие дерева объектов конфигурации. Выделим строку Регламентные задания и добавим новый объект Регламентное задание с именем ОбновлениеИндекса.

После этого создадим процедуру, которая и будет выполнять обновление полнотекстового индекса нашей информационной базы.

В качестве такой процедуры может выступать любая процедура или функция неглобального общего модуля, которую можно вызвать на сервере (у общего модуля должно быть установлено свойство Сервер).

Добавим в конфигурацию общий модуль с именем РегламентныеПроцедуры и установим флажок Вызов сервера для видимости его экспортных процедур и функций.

Для начала давайте разберемся, что собой представляют фоновые и регламентные задания в 1С 8.3. Регламентные задания в 1С 8.3 – это механизм (объект метаданных 1С) созданный для выполнения задач по расписанию.

Фоновое задание в 1С 8.3 – это процесс, созданный путем запуска регламентного задания, который выполняет описанный в нем алгоритм.

Говоря простым языком, эти два объекта не могут существовать один без другого. Регламентное задание в 1С 8.3 является триггером (условием) запуска фоновых заданий. Также регламентные задания в 1С 8.3 можно сравнить с планировщиком заданий Windows, только триггером в данном случае является время.

Рассмотрим структуру регламентного задания в 1С 8.3:



Рисунок 1. Окно конфигурации



Рисунок 2. Окно настроек регламентного задания

Имя – имя регламентного задания для конфигуратора.

Имя метода – путь к Процедуре, которая будет выполняться по расписанию. Следует отметить несколько нюансов при создании такой функции:

1) Процедура обязательно должна находиться в общем модуле 1С

3) Процедура обязательно должна быть экспортной процедурой

Ключ – свойство, которое позволяет формально группировать несколько регламентных заданий 1С 8.3, а также позволяет разграничить однотипные задания. Если есть несколько заданий с одинаковым ключом, они будут выполняться последовательно. В результате в разрезе группы в один промежуток времени может выполняться одно задание из каждой группы. Следует учитывать, что если Ключ не заполнен, он не учитывается.

Расписание – это настройка, которая позволяет настроить периоды выполнения задания по времени.



Рисунок 3. Окно настроек расписания

В данной настройке мы можем задать периоды, когда регламентное задание в 1С 8.3 будет выполняться.

Использование – признак того, будет ли выполняться данное регламентное задание.

Повтор при аварийном завершении – повторный запуск регламентного задания. Сбой может произойти, если в результате выполнения регламентного задания сработало исключение, либо когда происходит перезапуск сервера.

2. Управление регламентными заданиями в 1С 8.3



Рисунок 4. Окно обработки "Регламентные и фоновые задания"

В данной обработке мы видим, какие задания включены, т.е. которые будут выполнены по регламенту.

Наименование – синоним регламентного задания 1С 8.3 из конфигуратора.

Состояние - задача выполнена, выполняется, выполнена с ошибками. В данном случае выводится ошибка из журнала регистрации.

Дата окончания - дата фактически оконченного задания. Показывает даты только тех заданий, которые были выполнены в прошлом.

При двойном клике на регламентном задании в 1С 8.3 мы можем открыть его свойства.



Рисунок 5. Окно настроек регламентного задания

В свойствах мы можем поменять его расписание. В данном случае эта настройка будет считаться актуальнее той, которая задана в конфигураторе. А также указать пользователя, под которым выполняется регламентное задание (это целесообразно для файлового варианта базы, об этом мы поговорим далее). В большинстве случаев этот пользователь должен иметь права администратора, чтобы процедура, выполняемая в фоновом задании, не имела ограничений.

3. Особенности работы в файловой и клиент-серверной базах

Следует также отметить особенности работы регламентных задний в файловой и клиент-серверной базах.

Клиент-серверная база – в данном варианте для выполнения фоновых заданий существует отдельный пользователь. Поскольку серверная база работает постоянно, то и регламентные задания работают независимо от количества человек в базе. Регламентные задания выполняются под учетной записью пользователя Windows, который запустил сервер 1С.

В данной статье мы рассмотрели регламентные и фоновые задания, как их создавать, настраивать, контролировать, а также особенности их работы в разных архитектурах 1С.

Вас могут заинтересовать следующие статьи:

94 [PROP_CODE] => TAGS2 [TITLE] => Вас могут заинтересовать следующие семинары: ) --> 95 [PROP_CODE] => TAGS [TITLE] => Вас могут заинтересовать следующие вебинары: ) -->

Вас могут заинтересовать следующие вебинары:

Обновлятору не требуется быть всё время открытым или работать как служба, чтобы стал возможен запуск задач по расписанию.

Потому что запуск по расписанию работает через стандартный механизм Windows, который называется "Планировщик задач".

И когда пользователь задаёт настройки расписания .

. обновлятор автоматически создаёт или удаляет нужные задачи в планировщике системы:

Чего нельзя забывать

Выбор пользователя

Пользователь, которого мы указываем для запуска задач по расписанию.

а) . должен иметь непустой пароль. Это требование безопасности Windows. Если вы столкнулись именно с этим ограничением, то самым правильным решением будет:

  • либо назначить пароль текущему пользователю, под которым вы собираетесь запускать обновлятор по расписанию
  • либо создать в системе отдельного пользователя с паролем, которого и прописать в расписании обновлятора

Ну а самым простым (но неправильным с точки зрения безопасности) решением этого ограничения будет отключить опцию "Разрешить использование пустых паролей только при консольном входе" в локальной политике безопасности компьютера.

б) . должен иметь права на вход в качестве пакетного задания.

Это право необходимо, если вы настраиваете выполнение задач расписания в фоновом режиме.

Чтобы дать это право пользователю:

Если же вам достаточно того, чтобы расписание обновлятора работало только, если за компьютером работает (произведен вход в систему) текущий пользователь:

  • в диалоге выбора пользователя (при сохранении расписания) установите галку 'Запускать только при вошедшем в систему текущем пользователе'

При затруднениях, пожалуйста, обратитесь к вашему системному администратору.

Выбор баз

В операциях, запущенных по расписанию, участвуют только те базы, которые выбраны либо в общем списке баз расписания .

. либо в списке баз конкретной задачи:

При этом не важно стоит ли отметка рядом с базой в главном окне обновлятора:

Эти галки (в главном окне) предназначены только для ручного запуска операций и на запуск задач по расписанию влияния не оказывают.

Порядок запуска

При запуске задачи по расписанию обновлятор первым делом проверяет не выполняется ли сейчас другая задача, запущенная по расписанию. И если выполняется, он в начале дожидается её окончания и только потом выполняет новую.

Это означает, что если нам, к примеру, нужно настроить, чтобы в 22-00 выполнялась архивация, а сразу после её окончания обновление баз, то достаточно для архивации указать время запуска 22-00, а для обновления, например, 22-01.

Как узнать запускался ли обновлятор по расписанию

Бывает так, что расписание настроили, но что-то идёт не так. И мы вообще не уверены запускался ли обновлятор этой ночью.

Быстрая проверка

Прежде всего обратите внимание на область в главном окне обновлятора, где выводится статус последних задач по расписанию:

Здесь мы видим сколько дней назад запускалась соответствующая последняя задача по расписанию; сколько в ней участвовало баз и были ли ошибки. При этом если мы нажмём левой кнопкой на этих ссылках, то откроется соответствующий отчёт.

Детальная проверка

Также мы можем зайти в расписание.

. и посмотреть историю выполнения задач вместе с отчётами:

Если ничего не помогло

И, наконец, самый надёжный способ разобраться запускалась ли программа и понять причины её не запуска или внезапного завершения - это включить журнал всех заданий в планировщике Windows. По умолчанию он отключён и я советую включать его, чтобы можно было всегда разобраться в проблемных ситуациях.

Чтобы включить журнал планировщика Windows заходим в "Расписание" и нажимаем кнопку "Открыть планировщик Windows":

Это можно сделать также и из панели управления Windows (раздел администрирование).

Здесь находим и нажимаем пункт "Включить журнал всех заданий":


Готово! Теперь мы сможем просматривать историю работы любой задачи в планировщике.

Например, выделим одну из задач обновлятора:


Как настроить облачную систему мониторинга за запуском задач обновлятора

Сейчас я расскажу о способе как застраховать себя от ситуации "ой, у нас оказывается уже целую неделю не архивируются (обновляются, тестируются..) базы".

Такая ситуация очень даже возможна, если мы настроили запуск архивации по расписанию, а затем:

А нужно всего лишь в дополнение к настройке уведомлений об ошибках на почту настроить облачную систему мониторинга запуска нашего обновлятора. Что это и как работает?

Это, на мой взгляд, совершенно гениальная штука, которая называется healthchecks.io. У этих ребят есть и платные тарифы, но нам вполне сгодится их бесплатный тариф.

Идея следующая. Мы регистрируемся у них на сайте и в своём личном кабинете имеем возможность сказать:

  • Эй, HealthChecks, дай мне уникальный Url (адрес интернет ресурса).
  • HealthChecks, если по этому адресу никто не будет стучаться (запрашивать) в течение такого-то периода - оповести меня об этом на такую-то почту.

Затем мы укажем этот адрес в обновляторе и он будет запрашивать его, например, в конце каждой архивации, запущенной по расписанию. И если в какой-то момент он вдруг перестанет запускаться или будет аварийно завершаться, то сервис HealthChecks оповестит нас об этом. Даже если наш сервер сгорит, его украдут и разберут на винтики. мы первыми узнаем об этом от HealthChecks :-)

Я считаю это гениальная идея. Если вы так не считаете, похоже вы не до конца поняли смысл этой штуки - пожалуйста, перечитайте мой неуклюжий текст ещё раз.

Отдельно упомяну , что описанная система мониторинга не отменяет, а дополняет уведомления на почту об ошибках, которые также должны быть настроены в обновляторе для полного контроля за ситуацией.

Простейший сценарий настройки HealthChecks вместе с обновлятором

Пусть мы настраиваем ежедневную архивацию на сервере с именем DataServer, который принадлежит компании ООО "Ромашка":

И хотим, чтобы HealthChecks оповестил нас, если вдруг обновлятор перестанет запускаться для архивации или такие запуски будут завершаться аварийно.

2. Нажимаем на ссылку Log In в правом верхнем углу.

3. Регистрируемся на почту, на которую хотим получать оповещения.

3. Переходим в раздел "Checks" и нажимаем большую зелёную кнопку "Add Check".

5. Изменим имя этой проверки на OOO "Romashka" (DataServer, archiving). Это нужно сделать, чтобы мы понимали с чем именно связана эта проверка (архивация на сервере с именем DataServer в компании ООО "Ромашка"):

6. Укажем период проверки (архивация должна запускаться 1 раз в день, сам процесс архивации может занимать до 12 часов):

Второй ползунок (grace) это как раз допустимое превышение периода, то есть время, в течении которого может длиться процесс архивации.

Дополнительный лимит в 12 часов (grace) я указал намеренно, потому что обновлятор делает запрос к системе мониторинга в конце своей работы, а время окончания может варьироваться от различных условий.

Например, если мы настраиваем обновление по расписанию на запуск в 22-00, то сегодня это обновление может закончиться в 23-00, а уже завтра (вышло много новых обновлений) будет длиться до 4 утра.

Отсюда и дополнительный запас в 12 часов, чтобы не было ложных срабатываний от HealthChecks.

Результат настройки периода будет таким:

7. Но как видите поле Last Ping пустое (Never). Оно будет обновляться по мере обращения к этому адресу обновлятором при архивации. А если обращения не будет больше чем 1 день и 12 часов, то HealthChecks забьёт тревогу и оповестит нас на почту.

8. Копируем Ping URL в настройку архивации по расписанию в обновляторе:

Ради интереса запустим созданную задачу из расписания:

Дождёмся пока она отработает, а затем заглянем на панель HealthChecks:

А вот пример письма от HealthChecks, если задача перестала запускаться:

В общем штука очень гибкая и я её рекомендую к использованию абсолютно всем.

Настройка более сложного расписания проверки

В предыдущем примере мы настраивали проверку для задачи, которая запускается каждый день и может длиться в течение 12 часов.

А что если нам нужно настроить расписание проверки чуть сложнее? Скажем у нас есть задача, которая запускается только по рабочим дням в 21-00 и может длиться также до 12 часов.

В этом случае на этапе настройки периода переключаемся с Simple на Cron:

Здесь нужно заполнить поле Cron Expression в соответствии с которым и будет рассчитано расписание:

Для нашей задачи (запуск в 21-00, по рабочим дням, работа в течение 12 часов) настройка будет такой:

Возможен ли запуск по расписанию других задач с другими параметрами

Расписание поддерживает следующие виды задач

  1. Обновление баз
  2. Архивация баз
  3. Проверка архивов
  4. Скачивание обновлений для баз
  5. Тестирование и исправление баз

Но что если нужно поставить в расписание задачу, которой ещё нет в этом списке? В этом случае:

  1. Используйте возможности пакетных и onescript скриптов. При их сохранении можно указать добавление в планировщик так и вот так.
  2. Используйте ключи командной строки обновлятора.

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

1С фоновое задание позволяет нам производить какие-либо вычисления в системе незаметно для пользователя, то есть в фоне. Более того данный механизм позволяет нам распараллелить процесс вычисления. Распараллелить мы можем даже процедуру, которая будет выполняться. Для этого наше фоновое задание должно запускать еще несколько фоновых заданий. В этом случае процессы распараллеливаются и, если у нас многопроцессорная, многоядерная система, наш алгоритм будет работать эффективно. После запуска нескольких процессов мы можем сказать системе, что необходимо дождаться окончания выполнения этих процессов для того, чтобы потом каким-то образом свести результат.

1С фоновое задание

К примеру, в типовых конфигурациях, в то время как пользователь работает, происходит выполнение различного рода сервисных фоновых заданий. Об этом может свидетельствовать записи журнала регистрации, в котором фиксируется факт выполнения таких действий. Причем на работу пользователя это никак не влияет, он просто их не замечает.

В идеале фоновое задание реализуется в варианте клиент-сервер, в этом случае вся нагрузка переходит на сервер. Что касается файлового варианта, то работа фонового задания возможна, но она имеет некоторые особенности.

Вот что выдаст система если не учесть эти особенности, и запустить фоновое задание в файловом варианте информационной базы.

Обратившись к синтакс-помощнику можно получить более детальные сведения о фоновых заданиях 1С. Здесь следует отметить, что это объект исключительно программный и он никак не сохраняется в базе данных. То есть мы создаем экземпляр класса, инициализируем свойства и запускаем его на выполнение.

Какие же средства мы имеем для управления фоновыми заданиями? Этим средством является объект метаданных"МенеджерФоновыхЗадания". У этого объекта есть метод "Выполнить", с помощью этого метода, как раз и запускается фоновое задание.

Имеет он следующие параметры: "ИмяМетода" - имя процедуры или функции, которую нужно выполнить, причем это должна быть процедура или функция серверного контекста; "Параметры" - массив параметров, количество элементов которого должно соответствовать количеству параметров нашей процедуры/функции, указанной в параметре "ИмяМетода"; "Ключ" - некий ключ уникальности, представляющий из себя строчку, по которой система понимает нужно ли запускать фоновое задание либо такое задание уже запущено; "Наименование" - здесь можно указать произвольное описание нашего метода.

Возвращаемым значением является объект "ФоновоеЗадание", содержащий текущее имя метода, текущий ключ и еще несколько свойств и методов. Одним из таких методов является метод "ОжидатьЗавершения". Его задачей является то, что мы может указать системе, чтобы ничего не производилось пока не будет завершено фоновое задание.

Фоновое задание 1С 8.2, 8.3 - Пример использования

Приведем пример работы с фоновыми заданиями 1С. Сначала создадим простой алгоритм, который будет ненадолго загружать систему 1С таким образом, чтобы мы ничего не могли в это время делать.

Для этого:

1. Создадим общий модуль "ОбработчикиФоновыхЗаданий", который будет компилироваться на стороне сервера;

Общий модуль ОбработчикиФоновыхЗаданий

2. Опишем в нем экспортную процедуру "ПроизветиФоновоеВычисление(Параметр)", которая принимает один параметр строкового типа;

3. Далее создадим внешнюю обработку и в событии нажатия на кнопку поместим код, запускающий наш алгоритм;

Готово. Теперь при запуске обработки и нажатии на кнопку происходит подвисание системы на несколько секунд, в процессе которого ничего нельзя сделать. Это как раз то, что нам и нужно было сделать.

Общий модуль ОбработчикиФоновыхЗаданий

Теперь обеспечим произведение этих вычислений в фоне, то есть чтобы фоновое задание 1С 8.2, 8.3 выполнялось, но нам не мешало.

Для этого:

1. В обработке, в событии нажатия кнопки пропишем следующий код.

Здесь первым параметром мы передаем имя процедуры общего модуля, а вторым - массив параметров. Третьим параметром нужно передать уникальный ключ и четвертым некоторое описание нашей процедуры.

Готово. Теперь можем проверять. Перезапускаем нашу обработку нажимаем кнопку, система не подвисает и мы работаем беспрепятственно.

Кстати, убедиться в том, что 1С фоновое задание работало можно посмотрев в записи журнала регистрации. В этих записях фиксируется когда производился запуск фонового задания.

Приведенный выше пример показывает, как работает фоновое задание 1С 8.2, 8.3. То, каким полезным оно может быть в разработке ваших алгоритмов.

Вы еще не читали? Вам это будет интересно.

Рабочие процессы 1С

Пример работы с деревом значений в 1С. Часть вторая - Добавление возможности проставления галок и сопоставление строке картинки.

Пример работы с деревом значений в 1С. Часть вторая - Добавление возможности проставления галок и сопоставление строке картинки.Рассмотрим на примере, как в дерево значений добавить возможность проставления галок и сопоставлять каждой конкретной строке требуемую нам картинку.

Пример работы с деревом значений в 1С. Часть первая - добавление строк.

Пример работы с деревом значений в 1С. Часть первая - добавление строк.Работа с деревом значений немного отличается от работы с таблицей значений, в частности это видно на операции добавления строк. Смотрим на примере.

Отладка фоновых (регламентных) заданий в 1С 8

Отладка фоновых (регламентных) заданий в 1С 8Иногда возникает необходимость отладить фоновое (регламентное) задание. Как раз с этим-то, зачастую, и возникает проблема.

Удаленное программирование в 1С. Какие преимущества?

Удаленное программирование в 1С. Какие преимущества?Выбирая сотрудничество с удаленным программистом 1С, вы выбираете правильную экономию ваших средств и высокое качество выполнения задач.

Читайте также: