Фоновые задания на отдельном сервере. Аварийно завершился процесс фонового задания

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

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

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

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


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

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

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

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

"Ключ" - некий ключ уникальности, представляющий из себя строчку, по которой система понимает нужно ли запускать фоновое задание либо такое задание уже запущено;

"Наименование" - здесь можно указать произвольное описание нашего метода.

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

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

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

Для этого:

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


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

Процедура ПроизветиФоновоеВычисление(Параметр) Экспорт ВремНач = ТекущаяДата() ; Пока ТекущаяДата() - ВремяНач < = 6 Цикл КонецЦикла ; КонецПроцедуры Процедура КнНажатие() ОбработчикиФоновыхЗаданий. ПроизветиФоновоеВычисление("Какой-то параметр" ) ; КонецПроцедуры
Готово. Теперь при запуске обработки и нажатии на кнопку происходит подвисание системы на несколько секунд, в процессе которого ничего нельзя сделать. Это как раз то, что нам и нужно было сделать.

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

Для этого:

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

Процедура КнНажание() Параметры = Новый Массив; Параметры. Добавить("Какой-то параметр" ) ; ФоновоеЗадание. Выполнить ("ОбработчикиФоновыхЗаданий.ПроизветиФоновоеВычисление" , Параметры, Новый УникальныйИдентификатор, "Тестовое задание" ) ; КонецПроцедуры

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

Регламентные задания в 1С предназначены для выполнения определенных процедур по расписанию, с некоторой периодичностью.

Регламентные задания хранятся в информационной базе, имеют расписание запуска. Сам запуск производится полностью автоматически, если режим работы информационной базы клиент-серверный. Если же база файловая, то необходимо выполнить следующие действия:

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

Создание регламентного задания

Регламентные задания — объект метаданных конфигурации 1С. Находится в группе Общие. Рассмотрим параметры и свойства регламентных заданий.

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

Ключ — позволяет создать несколько регламентных заданий одного типа. Например, выполнение синхронизации данных между несколькими информационными базами может быть реализовано с помощью одного объекта метаданных РегламентноеЗадание , при этом самих регламентных заданий будет создано несколько (по количеству баз для обмена). Различаться эти регламентные задания будут с помощью свойства Ключ. Одновременно может выполняться только одно задание с одинаковым ключом.

Использование — флаг, показывающий, включено ли регламентное задание.

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

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

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

Программная работа с регламентными заданиями

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

Программное создание регламентного задания

//Создаем задание
"ИмяРегдаментногоЗадания" ) ;

//Устанавливаем ключ регламентного задания (не обязательно)
Задание. Ключ = "КлючЗадания" ;

//Включаем регламентное задание
Задание. Использование = Истина ;

//Записываем регламентное задание
Задание. Записать() ;

Программное получение регламентного задания для изменения параметров

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


"ИмяРегламентногоЗадания" ] ) ) ;


Если Задания. Количество() > 0 Тогда
Задание= Задания[ 0 ] ;


Иначе
Задание = РегламентныеЗадания. СоздатьРегламентноеЗадание("ИмяРегламентногоЗадания" ) ;

КонецЕсли ;

//Регламентное задание находится в переменной Задание. Можно изменять его параметры.

Вызов диалога изменения расписания регламентного задания

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

//Получаем массив с регламентными заданиями нужного типа
Задания= РегламентныеЗадания. ПолучитьРегламентныеЗадания(новый Структура("Метаданные" , Метаданные. РегламентныеЗадания[ "ИмяРегламентногоЗадания" ] ) ) ;

//Если задание существует, то по условию оно одно
Если Задания. Количество() > 0 Тогда
Задание= Задания[ 0 ] ;

//Если задания нет, создадим его
Иначе
Задание = РегламентныеЗадания. СоздатьРегламентноеЗадание("ИмяРегламентногоЗадания" ) ;

КонецЕсли ;

Расписание= Задание. Расписание;

//Создаем диалог изменения расписания регламентного задания
ДиалогРедактирования= Новый ДиалогРасписанияРегламентногоЗадания (Расписание) ;

//Показываем диалог пользователю и обрабатываем изменения расписания
Если ДиалогРедактирования. ОткрытьМодально() Тогда
Задание. Расписание = ДиалогРедактирования. Расписание;
Задание. Записать() ;
КонецЕсли ;

Механизм заданий

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

Механизм заданий решает следующие задачи:

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

Механизм заданий состоит из следующих компонентов:

  • Метаданных регламентных заданий;
  • Регламентных заданий;
  • Фоновых заданий;
  • Планировщика заданий.

Фоновые задания - предназначены для выполнения прикладных задач асинхронно. Фоновые задания реализуются средствами встроенного языка.

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

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

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

Фоновые задания

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

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

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

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

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

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

Завершившиеся успешно или аварийно фоновые задания хранятся в течение суток, а потом удаляются. Если количество выполнившихся фоновых заданий превышает 1000, то наиболее старые фоновые задания также удаляются.

Регламентные задания

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

Регламентные задания хранятся в информационной базе и создаются на основе метаданных регламентного задания, определенными в конфигурации. Метаданные задают такие параметры регламентного задания как: вызываемый метод, наименование, ключ, возможность использования, признак предопределенности и др. При создании регламентного задания дополнительно можно указать расписание (может быть указано в метаданных), значения параметров метода, имя пользователя, от имени которого должно выполняться регламентное задание, и др.

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

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

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

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

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

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

Примеры расписаний регламентных заданий:

Каждый час, только один день

ПериодПовтораДней = 0, ПериодПовтораВТечениеДня = 3600

Каждый день один раз в день

ПериодПовтораДней = 1, ПериодПовтораВТечениеДня = 0

Один день, один раз

ПериодПовтораДней = 0

Через день один раз в день

ПериодПовтораДней = 2

Каждый час с 01.00 до 07.00 каждый день

ПериодПовтораДней = 1

ПериодПовтораВТечениеДня = 3600

ВремяНачала = 01.00

ВремяКонца = 07.00

Каждую субботу и воскресенье в 09.00

ПериодПовтораДней = 1

ДниНедели = 6, 7

ВремяНачала = 09.00

Каждый день одну неделю, неделя пропуска

ПериодПовтораДней = 1

ПериодНедель = 2

В 01.00 один раз

ВремяНачала = 01.00

Последнее число каждого месяца в 9:00.

ПериодПовтораДней = 1

ДеньВМесяце = -1

ВремяНачала = 09.00

Пятое число каждого месяца в 9:00

ПериодПовтораДней = 1

ДеньВМесяце = 5

ВремяНачала = 09.00

Вторая среда каждого месяца в 9:00

ПериодПовтораДней = 1

ДеньНеделиВМесяце = 2

ДниНедели = 3

ВремяНачала = 09.00

Можно проверять, выполняется ли задание для заданной даты (метод ТребуетсяВыполнение объекта РасписаниеРегламентныхЗаданий). Регламентные задания всегда выполняются о имени определенного пользователя. Если пользователь регламентного задания не указан, то выполнение происходит от имени пользователя по умолчанию, имеющего административные права.

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

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

Важно помнить что Время конца не обязательно завершит фоновое задание в указанное время. Некоторые утверждения:

* Фоновое задание может проигнорировать свою автоматическую отмену, если оно не зависло, а продолжает работать по той причине, что не все операции платформы можно отменить. Если выполняется циклический код встроенного языка, то задание отменить можно в противном случае нет. Все зависит от того, что делает задание. * Время конца - граница, в пределах которой задание может запускаться, а не завершаться? * Принудительное завершение задания откатывает внесённые изменения к моменту начала транзакции?

Особенности выполнения фоновых заданий файловом и клиент-серверном вариантах

Механизмы выполнения фоновых заданий в файловом и клиент-серверном вариантах различаются.

  • В файловом варианте необходимо создать выделенный клиентский процесс, который будет заниматься выполнением фоновых заданий. Для этого в клиентском процессе должна периодически вызываться функция глобального контекста ВыполнитьОбработкуЗаданий. Только один клиентский процесс на информационную базу должен выполнять обработку фоновых заданий (и, соответственно, вызывать данную функцию). Если клиентского процесса для обработки фоновых заданий не создано, то при программном доступе к механизму заданий будет выдана ошибка «Менеджер заданий не активен». Не рекомендуется клиентский процесс, выполняющий обработку фоновых заданий, использовать для других функций.

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

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

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

  • На информационную базу установлена явная блокировка регламентных заданий. Блокировка может быть установлена через консоль кластера;
  • На информационную базу установлена блокировка соединения. Блокировка может быть установлена через консоль кластера;
  • Из встроенного языка вызван метод УстановитьМонопольныйРежим() с параметром Истина;
  • В некоторых других случаях (например, при обновлении конфигурации базы данных).

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

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

Для создания объекта метаданных регламентного задания в дереве конфигурации в ветке «Общие» для ветки «Регламентные задания» выполните команду «Добавить» и в палитре свойств заполните следующие свойства регламентного задания:

Имя метода - указывается имя метода регламентного задания.

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

Расписание - указывается расписание регламентного задания. Для формирования расписания щелкните ссылку «Открыть» и в открывшейся форме расписания установите нужные значения.

На закладке «Общее» указываются дата начала и завершения задания и режим повтора.

На закладке «Дневное» указывается дневное расписание задания.

Укажите расписание:

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

Допускается указание произвольного сочетания условий.

На закладке «Недельное» указывается недельное расписание задания.

Установите флажки по тем дням недели, по которым задание будет выполняться. Если требуется повторять задание, укажите интервал повтора в неделях. Например, задание выполняется через 2 недели, значение повтора – 2.

На закладке «Месячное» указывается месячное расписание задания.

Установите флажки по тем месяцам, в которых задание будет выполняться. При необходимости можно указать конкретный день (месяца или недели) выполнения с начала месяца / недели или конца.

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

Предопределенное - если установлено, то задание является предопределенным заданием.

Количество повторов при аварийном завершении - указывает количество повторов при аварийном завершении.

Интервал повтора при аварийном завершении - указывает интервал повтора при аварийном завершении. Примеры

Создание фонового задания «Обновление индекса полнотекстового поиска»:

ФоновыеЗадания.Выполнить("ОбновлениеИндексаПолнотекстовогоПоиска");

Создание регламентного задания «Восстановление последовательностей»:

Расписание = Новый РасписаниеРегламентногоЗадания; Расписание.ПериодПовтораДней = 1; Расписание.ПериодПовтораВТечениеДня = 0;

Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание("ВосстановлениеПоследовательностей"); Задание.Расписание = Расписание; Задание.Записать();

Консоль заданий

Обработка с ИТС, осуществляет управление регламентными заданиями:

Работа с регламентными заданиями

Объекты заданий

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

Если в метаданных включен флаг "Предопределенное", то такой объект создается автоматически при запуске 1С:Предприятия и всегда существует ровно в одном экземпляре. Такой объект нельзя удалить.

Если флаг "Предопределенное" не установлен, то объекты такого задания создаются и удаляются программно, с указанием расписания и параметров.

Получение списка заданий

Список заданий можно получить методом ПолучитьРегламентныеЗадания глобального менеджера заданий РегламентныеЗадания

МенеджерРегламентныхЗаданий (ScheduledJobsManager)

ПолучитьРегламентныеЗадания (GetScheduledJobs)

Синтаксис:

ПолучитьРегламентныеЗадания(<Отбор>)

Параметры:

<Отбор> (необязательный)

Тип: Структура. Структура, задающая отбор. Значениями структуры могут быть: УникальныйИдентификатор, Ключ, Метаданные, Предопределенное, Использование, Наименование. Если отбор не задан, получаются все регламентные задания.

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

Возвращаемое значение:

Тип: Массив.

Описание:

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

Доступность:

Регламентные = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор);

Для Каждого Регламентное из Регламентные Цикл НоваяСтрока = СписокРегламентныхЗаданий.Добавить(); НоваяСтрока.Метаданные = Регламентное.Метаданные.Представление(); НоваяСтрока.Наименование = Регламентное.Наименование; НоваяСтрока.Ключ = Регламентное.Ключ; НоваяСтрока.Расписание = Регламентное.Расписание; НоваяСтрока.Пользователь = Регламентное.ИмяПользователя; НоваяСтрока.Предопределенное = Регламентное.Предопределенное; НоваяСтрока.Использование = Регламентное.Использование; НоваяСтрока.Идентификатор = Регламентное.УникальныйИдентификатор;

ПоследнееЗадание = Регламентное.ПоследнееЗадание; Если ПоследнееЗадание <> Неопределено Тогда НоваяСтрока.Выполнялось = ПоследнееЗадание.Начало; НоваяСтрока.Состояние = ПоследнееЗадание.Состояние; КонецЕсли; КонецЦикла;

Создание

Создается методом СоздатьРегламентноеЗадание менеджера регламентных заданий:

РегламентноеЗадание = РегламентныеЗадания.СоздатьРегламентноеЗадание(МетаданныеВыбор);

РегламентноеЗадание.Наименование = Наименование; РегламентноеЗадание.Ключ = Ключ; РегламентноеЗадание.Использование = Использование; РегламентноеЗадание.ИмяПользователя = ПользователиВыбор; РегламентноеЗадание.КоличествоПовторовПриАварийномЗавершении = КоличествоПовторовПриАварийномЗавершении; РегламентноеЗадание.ИнтервалПовтораПриАварийномЗавершении = ИнтервалПовтораПриАварийномЗавершении; РегламентноеЗадание.Расписание = Расписание; РегламентноеЗадание.Записать();

ОбъектЗадания = РегламентныеЗадания.СоздатьРегламентноеЗадание("ВыполнениеОбмена");

ОбъектЗадания.Наименование = Наименование; ОбъектЗадания.Использование = Истина;

Объект задания имеет поле "Параметры", в котором задаются параметры метода:

РегламентноеЗадание (ScheduledJob)

Параметры (Parameters)

Использование:

Чтение и запись.

Описание:

Тип: Массив. Массив параметров регламентного задания. Количество и состав параметров должен соответствовать параметрам метода регламентного задания.

Доступность:

Сервер, толстый клиент, внешнее соединение.

Примечание:

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

Удаление

Удаляется методом Удалить() объекта задания:

РегламентноеЗадание.Удалить();

Получение объекта задания

  • списком через метод ПолучитьРегламентныеЗадания:

Регламентные = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор);

  • через метод НайтиПоУникальномуИдентификатору менеджера заданий:

Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(УИД);

Механизм заданий - один из инструментов администрирования 1С. Он включает:

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

Вопрос 09.59 экзамена 1С:Профессионал по платформе. Экземпляр регламентного задания:

  1. может быть создан программно
  2. может быть создан в форме списка, доступной через команду главного меню программы ("Операции/Регламентные задания")
  3. создается всегда только один экземпляр (при создании соответствующего объекта конфигурации)
  4. определяется только в режиме конфигурирования на закладке Прочее по кнопке "Состав"
  5. верны ответы 1 и 2
Правильный ответ первый. Если регламентное задание предопределенное (рис.), то задание будет создано в единственном экземпляре с указанным в конфигураторе расписанием. Экземпляры НЕ предопределенных заданий появляются по расписанию, заданному в режиме Предпритятие, программно.
Вопрос 09.60 экзамена 1С:Профессионал по платформе. Количество одновременно выполняющихся регламентных заданий может быть:
  1. любым без ограничения
  2. любое количество, но не будут выполняться два задания с одинаковым ключем и именем метода
  3. любое количество, но не будут выполняться два задания с одинаковым ключем и наименованием
  4. любое количество, но не будут выполняться два задания с одинаковым ключем и связанные с одним и тем же объектом метаданных
Правильный ответ шестой. Ключ - свойство регламентного задания, которое позволяет сгруппировать несколько однотипных заданий. Одновременно может быть запущено только одно задание с одним значением ключа (пустое значение не в счет). Также, одновременно исполняется только одно рег.задание над конкретным объектом, во избежание коллизий.
Вопрос 09.62 экзамена 1С:Профессионал по платформе. В качестве метода регламентного задания может использоваться процедура у которой:
  1. не должно быть параметров
  2. может быть только один параметр (список значений)
  3. может быть только один параметр (структура)
  4. может быть только один параметр (массив)
  5. может быть любое количество параметров
Правильный ответ пятый. Число параметров метода регламентного задания соответствует числу параметров самого регламентного задания.
Вопрос 09.63 экзамена 1С:Профессионал по платформе. Для создания регламентного задания пользователь должен обладать:
  1. правами администратора
  2. правами на использование данного объекта конфигурации (настраивается в роли)
  3. правами на создание новых экземпляров данного объекта конфигурации (настраивается в роли)
  4. любыми правами, метод регламентного задания исполняется в привилегированном режиме
Правильный ответ первый, только администраторы вправе.
Вопрос 09.64 экзамена 1С:Профессионал по платформе. Если регламентное задание определено в конфигураторе (в соответствующем объекте конфигурации) как предопределенное, то для него характерно (выберите наиболее полный ответ):
  1. нельзя создать не предопределенный экземпляр регламентного задания с привязкой к объекту метаданных предопределенного регламентного задания
  2. предопределенный экземпляр регламентного задания нельзя пометить на удаление и удалить
  3. только предопределенные экземпляры регламентных заданий хранятся в информационной базе, не предопределенные экземпляры являются сеансовыми объектами и в базе не хранятся
  4. верны ответы 1 и 2
  5. верны ответы 2 и 3
  6. верны ответы 1, 2, 3
Правильный ответ второй. Предопределенные экземпляры регламентных заданий можно изменять, но нельзя удалять. Они всегда будут доступны в списке шаблонов:
Вопрос 09.67 экзамена 1С:Профессионал по платформе. Если в качестве метода регламентного задания используется функция, то:
  1. возвращаемое функцией значение игнорируется
  2. при попытке исполнения задания возникает ошибка
  3. система будет ожидать исполнения данного задания (исполнение будет происходить не асинхронно)
  4. значение будет возвращено в соответствующий параметр регламентного задания
Правильный ответ первый.
Вопрос 09.61 экзамена 1С:Профессионал по платформе. Как могут быть связаны между собой регламентные и фоновые задания?
  1. Регламентное задание может породить фоновое задание
  2. Регламентное задание в обязательном порядке порождает фоновое задание
  3. Фоновое задание в обязательном порядке порождает регламентное задание
  4. Нет никакой взаимосвязи
Правильный ответ второй - фоновое задание это объект, порождаемый регламентным, и он обязательнем к созданию, иначе само регламентное задание теряет смысл.
Вопрос 09.65 экзамена 1С:Профессионал по платформе. Для обеспечения работы регламентных и фоновых заданий необходимо:
  1. наличие запуска 1С:Предприятие с установленным при запуске флагом "Планировщик"
  2. наличие запуска 1С:Предприятие с периодически исполняющимся соответствующим методом системы
  3. наличие запуска 1С:Предприятие с периодически исполняющимся соответствующим методом системы (но только в файловом варианте функционирования системы)
  4. как в файловом, так и в клиент-серверном вариантах нет необходимости в запуске экземпляра 1С:Предприятие
На практике, правильный ответ третий. В клиент-серверном варианте работы запуск регламентных заданий по расписанию осуществляет менеджер кластера. Таким образом, даже если с информационной базой не установлено ни одного клиентского соединения, регламентные задания будут выполняться (при условии, что они не запрещены для конкретной информационной базы). В файловом варианте работы для автоматического запуска регламентных заданий необходимо наличие выделенного клиентского соединения, используемого в качестве планировщика заданий. В этом соединении должна быть запущена обработка ожидания, с некоторой периодичностью выполняющая вызов метода встроенного языка ВыполнитьОбработкуЗаданий().
По ответам, верный ответ четвертый.
Вопрос 09.57 экзамена 1С:Профессионал по платформе. Фоновые задания позволяют:
  1. выполнять процедуру по расписанию
  2. выполнять процедуру асинхронно
  3. производить перезапуск в случае аварийного завершения
  4. верны ответы 1 и 2
  5. верны ответы 2 и 3
  6. верны ответы 1, 2, 3
Правильный ответ второй. Асинхронно - значит, не дожидаясь завершения процедуры.
Вопрос 09.58 экзамена 1С:Профессионал по платформе. Количество одновременно запущенных фоновых заданий может быть:
  1. любым без ограничения
  2. только одно задание на информационную базу
  3. только по одному заданию на пользовательский сеанс
  4. любое количество, но нельзя запустить два задания с одинаковым ключем и именем метода
  5. любое количество, но нельзя запустить два задания с одинаковым ключем и наименованием
  6. любое количество, но нельзя запустить два задания с одинаковым ключем и связанные с одним и тем же объектом метаданных
Правильный ответ четвертый.
Вопрос 09.66 экзамена 1С:Профессионал по платформе. Завершившиеся фоновые задания:
  1. сохраняется в информационной базе
  2. являются сеансовыми объектами, хранятся некоторое время (в информационной базе не сохраняются)
  3. не хранятся ни в каком виде
Правильный ответ шестой - фоновое задание это объект встроенного языка.который существует только на время сеанса.

Вопрос: Аварийно завершился процесс фонового задания...


Всем доброго дня и хорошей недели!)
Бухгалтерия предприятия, редакция 3.0 (3.0.46.11).
Платформа 8.3.9.2033.
При групповом проведении документов возникает ошибка "Аварийно завершился процесс фонового задания". Никаких причин не выдаётся...
Перезагрузка сервера SQL, сервера 1С (мало ли) не помогает... Может, кто сталкивался с подобной проблемой??? Даже сложно сказать после чего появилась данная ошибка ибо групповым проведением (закрытием месяца) давно не пользовались...

Ответ: () () Ещё раз добрый день) Включил технологический журнал и обнаружил вот такие интересные вещи (может в курсе с чем проблема?):
Сделана попытка выполнить операцию на объекте, не являющемся сокетом...
Процесс завершается. Исходящий вызов запрещен...
Не найдено ни одного сервера с размещенным сервисом...

Вопрос: Фоновые задания


Платформа 1С:Предприятие 8.3 (8.3.9.2170), конфа БП 3.0.
В конфигурации настроена интеграция через внешние источники данных (тип СУБД - OracleDatabase). Добавлен ряд таблиц, из которых идет загрузка НСИ, проводок. Т.к. данных очень много было решено сделать пакетную загрузку через фоновые задания. Размер порции - 100 000, размер пакета - 10 000, количество проводок в документе - 1000, количество одновременно работающих фоновых заданий - 8.
Запускаю, гружу, все ок. Но если ставлю на ночь, то такое ощущение, что 1с уходит в спящий режим, т.е. через какое-то время, как показывает лог, фоновые задания запускаются, но не завершаются. В итоге получилось, что задания запустились в 12 ночи, а были завершены в 8 утра (когда я пошурудил мышкой) и после этого продолжили выполняться далее в нормальном режиме. Запускал и в тонком и в толстом клиенте. В параметрах стоит настройка - время засыпания в пассивном сеансе 1200, но это разве не только на тонкий клиент распространяется и может ли быть в этом проблема? Отключать это не хочу, т.к. пользователи не выходят из программы, пусть засыпают. Может кто-то сталкивался с подобной проблемой? Как решили?

Ответ:

Нет такой возможности.

Смысл запускать фоновое задание и ждать его завершения?
чтобы не наплодить больше 8-ми фоновых заданий?

Перетащите "менеджер" фоновых заданий на сторону сервера и пусть контролирует....

Запускал на Pentuim D840 40-50 фоновых заданий - полет нормальный, дальше уже упирается в процессор/память.

Вопрос: Как передать файл в фоновое задание


Платформа 8.3.6.2152
Нужно из УФ передать файл в фоновое задание для последующей обработки.
Делал так:
&НаКлиенте
Процедура Команда1(Команда) ФайлДД = Новый ДвоичныеДанные(ИмяФайла); АдресХранилищаДляФонового = ПоместитьВоВременноеХранилище(ФайлДД, УникальныйИдентификатор); ЗапуститьВыгрузкуЗагрузкуНаСервере(АдресХранилищаДляФонового) КонецПроцедуры &НаСервере Функция ЗапуститьВыгрузкуЗагрузкуНаСервере(АдресХранилищаДляФонового) ПараметрыМетода = Новый Массив; ПараметрыМетода.Добавить(АдресХранилищаДляФонового); Задание = ФоновыеЗадания.Выполнить("МойОбщийМодуль.МоеФоновое", ПараметрыМетода); КонецФункции
В общем модуле:

Процедура МоеФоновое(АдресХранилища) Экспорт ФайлДД = ПолучитьИзВременногоХранилища(АдресХранилища); Если ТипЗнч(ФайлДД) = Тип("ДвоичныеДанные") Тогда ЗаписьЖурналаРегистрации ЗаписьЖурналаРегистрации ("Отладка","Нет ДД"); КонецЕсли ; КонецПроцедуры Пробовал так: ПомещаемыеФайлы = Новый Массив; ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла)); ПомещенныеФайлы = Новый Массив; Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, Ложь , УникальныйИдентификатор) Тогда Возврат ; КонецЕсли ; АдресХранилищаДляФонового = ПомещенныеФайлы.Хранение; Пробовал так: АдресХранилищаДляФонового = ПоместитьВоВременноеХранилище(Неопределено , УникальныйИдентификатор); ПоместитьФайл(АдресХранилищаДляФонового, ИмяФайла, Ложь );
Из фонового на клиент через временное хранилище нормально передается, а вот с клиента в фоновое - никак почему-то.

Ответ: В общем все оказалось довольно просто. Получается можно тупо передавать ДвоичныеДанные как параметр к фоновому заданию. Для неквалифицированных любителей цитировать справку и рассказывать что "так и задумано" рабочий код:
&НаКлиенте
Процедура Команда1(Команда) ЗапуститьВыгрузкуЗагрузкуНаСервере(Новый ДвоичныеДанные(ИмяФайла)) КонецПроцедуры
&НаСервере Функция ЗапуститьВыгрузкуЗагрузкуНаСервере(ДД) ПараметрыМетода = Новый Массив; ПараметрыМетода.Добавить(ДД); Задание = ФоновыеЗадания.Выполнить("МойОбщийМодуль.МоеФоновое", ПараметрыМетода); КонецФункции Процедура МоеФоновое(ФайлДД) Экспорт Если ТипЗнч(ФайлДД) = Тип("ДвоичныеДанные") Тогда ЗаписьЖурналаРегистрации ("Отладка","Есть ДД"); Иначе ЗаписьЖурналаРегистрации ("Отладка","Нет ДД"); КонецЕсли ; КонецПроцедуры

Вопрос: Запуск фонового задания под нужным пользователем


Здравствуйте!
Есть 1С:Предприятие 8.3 (8.3.11.2924), УТ 11.3.4.93 клиент - сервер.
В этой конфигурации движения по регистру "Расчеты с клиентами по документам " выполняется не в момент проведения документа, а регламентным заданием "Выполнение отложенных движений по расчетам с клиентами\поставщиками".
При этом иногда регламентное задание выдавало ошибку, т.к. пыталось сделать движения в закрытом периоде (Ранее даты запрета редактирования). В настройках регламентного задания прописали специального пользователя, у которого дата запрета открыта, после этого все стало работать.
Однако, есть необходимость сделать, чтобы данные движения по регистрам делались в момент проведения документа, а не тогда, когда запустится фоновое задание по расписанию.
Если запускать сам код, который выполняет регламентное задание при проведении документа, то возникает та же ошибка - закрыт период. И если программно запускать фоновое задание запускающее этот же код в момент проведения документа, то оно вызывает точно ту же ошибку, т.к. период закрыт, а фоновое задание, запускаемое программно, запускается под именем текущего пользователя, а у него дата запрета закрыта. Однако, когда запускается фоновое задание по расписанию, у которого установлен "правильный" пользователь в планировщике, то все проходит на ура. Вот как это сделать программно, как программно запустить фоновое задание под нужным пользователем "через планировщик" как это делают стандартные регламентные задания, подскажите пожалуйста?

Ответ:

Разве не под тем, под которым настроено?
Это должно быть глюк конфигурации

Lis2007 сказал(а):

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

Нажмите, чтобы раскрыть...

Вопрос: Отладка фонового задания


Фоновое задание выполняется с ошибкой. Решил отладить.
запускаю через внешнюю обработку с одной строкой:
ФоновыеЗадания.Выполнить("МойМодуль.МоеЗадание");
На точку останова в модуле не выходит.
Отладка на сервере разрешена, галка в отладке, автоматическое подключение, фоновые задания - стоит. В чем может быть ещё проблема?

Ответ: В общих модулях было обращение к функциям требующих клиентского а не серверного выполнения. Пришлось посадить их в скобки #Если Клиент Тогда. Отработало и фоновое.

Вопрос: Ошибка при выполнении обмена


Добрый день Подскажите, куда копать:
выполняю обмен в бухгалтерской базе. Из УТ-шки выгружается порядка трех десятков документов через типовой обмен. Долго думат (около часа) и завершается с сообщением:
аварийно завершился процесс фонового задания
2024 printflip.ru. Компьютерные истории.