Фоновое задание 1С
Фоновое задание — это специализированный объект метаданных в платформе «1С:Предприятие», предназначенный для выполнения прикладного кода (метода общего модуля) в асинхронном режиме, вне основного пользовательского сеанса. В отличие от регламентных заданий, фоновые задания не имеют предопределённого расписания и запускаются программно из кода конфигурации. Они выполняются в отдельном, неблокирующем потоке на сервере «1С:Предприятия», что позволяет не останавливать работу пользователя во время длительных или ресурсоёмких операций.
Назначение и область применения
Фоновые задания в системе «1С:Предприятие» используются для решения задач, требующих значительного времени выполнения или не предполагающих немедленного получения результата пользователем. Основные сценарии применения включают:
- Длительные расчёты — пересчёт итогов, закрытие месяца, переоценка партий, перепроведение документов за период.
- Массовая обработка данных — загрузка выгрузка данных из внешних систем (например, из Excel или XML), групповая обработка справочников или документов.
- Интеграция с внешними системами — отправка электронных писем, выгрузка отчётов в файлы, синхронизация данных с сайтами или другими информационными базами.
- Обслуживание информационной базы — реорганизация таблиц, удаление помеченных объектов, проверка целостности ссылочной целостности.
- Выполнение периодических действий — обновление курсов валют, загрузка классификаторов, отправка уведомлений.
Ключевое отличие фоновых заданий от регламентных заключается в том, что фоновые задания не привязаны к расписанию. Они запускаются по требованию, из кода конфигурации, и могут быть выполнены однократно или многократно в рамках одного сеанса.
Архитектура и механизм работы
Объект метаданных
Для использования фонового задания в конфигурации необходимо создать объект метаданных «Фоновое задание» в ветке «Общие» → «Фоновые задания». В свойствах объекта указывается имя общего модуля и имя экспортной процедуры или функции, которая будет выполняться. Этот модуль должен быть серверным (с установленным флагом «Сервер»).
Запуск и выполнение
Запуск фонового задания осуществляется программно с помощью глобального метода ЗапуститьФоновоеЗадание(). Этот метод принимает следующие параметры:
- Имя фонового задания — строка, соответствующая имени объекта метаданных.
- Параметры — массив значений, которые будут переданы в выполняемую процедуру или функцию.
- Ключ уникальности — необязательный параметр, позволяющий предотвратить повторный запуск задания с одинаковыми параметрами.
- Имя очереди — необязательный параметр для указания очереди заданий (используется в кластерных системах).
Пример запуска:
``1c Параметры = Новый Массив; Параметры.Добавить("Значение1"); Параметры.Добавить(123); Идентификатор = ЗапуститьФоновоеЗадание("МоеФоновоеЗадание", Параметры); ``
После вызова платформа создаёт задание и помещает его в очередь. Выполнение происходит в отдельном серверном процессе (или в отдельном потоке, в зависимости от версии платформы и режима работы). Пользовательский интерфейс при этом остаётся доступным.
Мониторинг и управление
Для отслеживания состояния фоновых заданий используется объект ФоновыеЗадания. Он позволяет получить список всех заданий, их статусы (Выполняется, Завершено, Ошибка, Отменено), а также управлять ими — отменять выполнение, получать сообщения об ошибках.
``1c ФоновыеЗадания = ФоновыеЗадания.ПолучитьФоновыеЗадания(); Для Каждого Задание Из ФоновыеЗадания Цикл Сообщить(Задание.Состояние); КонецЦикла; ``
Также можно получить конкретное задание по его уникальному идентификатору, который возвращается методом ЗапуститьФоновоеЗадание().
Особенности и ограничения
Ограничения по времени выполнения
В стандартных конфигурациях «1С:Предприятия» (например, «Бухгалтерия предприятия», «Управление торговлей») фоновые задания имеют ограничение по времени выполнения — по умолчанию 24 часа. Если задание не завершится за это время, оно будет автоматически прервано. Это значение может быть изменено администратором системы.
Отсутствие доступа к пользовательскому интерфейсу
Фоновое задание выполняется на сервере и не имеет доступа к формам, отчётам, обработкам и другим элементам интерфейса пользователя. Оно не может выводить сообщения в окно пользователя, открывать формы или взаимодействовать с диалогами. Вся информация о ходе выполнения должна передаваться через механизмы логирования, записи в регистры или через объект СостояниеФоновогоЗадания.
Конкуренция за ресурсы
При одновременном запуске большого количества фоновых заданий может возникнуть конкуренция за ресурсы сервера (процессорное время, память, блокировки базы данных). Это может привести к снижению производительности всей системы. Для управления нагрузкой рекомендуется использовать очереди заданий и ограничивать количество одновременно выполняемых фоновых заданий.
Работа с транзакциями
Код, выполняемый в фоновом задании, работает в рамках собственной транзакции. Если в процессе выполнения возникает ошибка, транзакция откатывается, и задание завершается со статусом «Ошибка». Важно правильно обрабатывать исключения внутри кода фонового задания, чтобы избежать неконтролируемых откатов.
Классификация фоновых заданий
Фоновые задания можно классифицировать по нескольким признакам:
- По способу запуска: программные (запускаемые из кода) и регламентные (запускаемые по расписанию, хотя регламентные задания технически также являются фоновыми).
- По количеству экземпляров: однократные (выполняются один раз) и многократные (могут быть запущены повторно).
- По уникальности: с ключом уникальности (запрещают повторный запуск с теми же параметрами) и без ключа.
- По принадлежности к очереди: задания из общей очереди и задания из именованных очередей (используются для распределения нагрузки в кластере).
Примеры использования в типовых конфигурациях
В типовых конфигурациях «1С:Предприятия» фоновые задания используются повсеместно. Например:
- «1С:Бухгалтерия предприятия» — фоновое задание «Закрытие месяца» выполняет расчёты по амортизации, списанию расходов, формированию проводок.
- «1С:Управление торговлей» — фоновое задание «Пересчёт итогов» обновляет данные по остаткам и оборотам товаров.
- «1С:Зарплата и управление персоналом» — фоновое задание «Расчёт начислений» выполняет массовый расчёт заработной платы.
- «1С:Управление нашей фирмой» — фоновое задание «Обновление курсов валют» загружает курсы с сайта Центрального банка РФ.
Отличие от регламентных заданий
Основное отличие фоновых заданий от регламентных заключается в способе запуска. Регламентные задания имеют предопределённое расписание (например, «каждый день в 8:00») и запускаются автоматически системой. Фоновые же задания запускаются только программно, по требованию разработчика или пользователя. При этом внутри регламентного задания может быть запущено фоновое задание, но не наоборот.
Безопасность и права доступа
Для запуска фонового задания пользователь должен иметь право на выполнение соответствующего метода общего модуля. Права на просмотр и управление фоновыми заданиями (например, отмена) регулируются ролями и настройками доступа. В типовых конфигурациях обычно предусмотрена роль «Администратор» для управления фоновыми заданиями.
Развитие и перспективы
В последних версиях платформы «1С:Предприятие» (начиная с версии 8.3.10) появилась возможность использования фоновых заданий в управляемых формах и фоновых заданий с результатом, которые могут возвращать значение. Это расширяет возможности асинхронной работы, позволяя, например, получать результат выполнения задания в форме после его завершения.
Источники
- «1С:Предприятие 8.3. Руководство разработчика» — раздел «Фоновые задания».
- «1С:Предприятие 8.3. Синтакс-помощник» — описание объекта
ФоновыеЗаданияи методаЗапуститьФоновоеЗадание(). - Официальная документация фирмы «1С» — «Механизм фоновых заданий».
- Книга «Профессиональная разработка в системе 1С:Предприятие 8» (авторы: М. Г. Радченко, Е. Ю. Хрусталёва) — глава, посвящённая фоновым и регламентным заданиям.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →