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

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

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

Подготовка внешней обработки и проверка прав

Первым шагом перед написанием кода является обеспечение корректных прав доступа для пользователя, от имени которого будет выполняться внешняя обработка. Механизм регламентных заданий в требует наличия специфических прав на объект метаданных «РегламентноеЗадание». Без этих прав попытка создать новый элемент приведет к ошибке выполнения.

Необходимо убедиться, что роль, назначенная пользователю, содержит право Создание и Изменение для соответствующего объекта. Если вы работаете в режиме предприятия с полными правами, проблема может не возникнуть, но в промышленной эксплуатации это критический момент. Часто администраторы забывают добавить право на чтение справочника «ВидыРегламентныхЗаданий», что также блокирует процесс.

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

⚠️ Внимание: Если ваша база данных работает в файловом варианте, а не в клиент-серверном, некоторые методы асинхронного выполнения могут работать некорректно или блокировать интерфейс до завершения задачи.

📊 Где выполняется ваша внешняя обработка?
В толстом клиенте
В тонком клиенте
В веб-клиенте
В режиме предприятия
В режиме конфигуратора

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

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

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

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

Ниже приведен пример кода для получения ссылки на нужный вид задания:

ВидЗадания = Справочники.ВидыРегламентныхЗаданий.НайтиПоНаименованию("ОбработкаДанныхФон");

Если ВидЗадания.Пустая() Тогда

Сообщить("Вид задания не найден!");

Возврат;

КонецЕсли;

💡

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

Создание и настройка параметров задания

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

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

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

  • 📅 Установите дату и время начала выполнения в поле НачалоДействия.
  • 🔄 Выберите режим повторения: «Один раз», «Ежедневно» или «Еженедельно».
  • 📝 Заполните поле Описание для удобства администрирования в будущем.
  • 🔐 Укажите пользователя, от имени которого будет выполняться задание, если это отличается от текущего.

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

☑️ Настройка параметров задания

Выполнено: 0 / 5

Запись данных и активация процесса

Финальным этапом программной части является запись созданного объекта в базу данных. Вызов метода Записать() фиксирует все изменения и фактически ставит задание в очередь планировщика. С этого момента система начинает отслеживать наступление времени запуска.

Если задание настроено на немедленное выполнение («Один раз» с временем в прошлом или текущем моменте), оно может быть подхвачено фоновым процессом практически мгновенно. Однако в нагруженных системах возможна небольшая задержка перед стартом.

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

НовоеЗадание = Справочники.РегламентныеЗадания.СоздатьЭлемент();

НовоеЗадание.Вид = ВидЗадания;

НовоеЗадание.Расписание.НачалоДействия = ТекущаяДата();

//.. настройка других параметров

Попытка

НовоеЗадание.Записать();

Сообщить("Задание успешно создано и поставлено в очередь.");

Исключение

Сообщить("Ошибка создания задания: " + ОписаниеОшибки());

КонецПопытки;

💡

Запись объекта в справочник «РегламентныеЗадания» является триггером для постановки задачи в очередь выполнения сервером 1С.

Особенности работы в файловом и клиент-серверном варианте

Архитектура базы данных накладывает существенные ограничения на работу с регламентными заданиями. В клиент-серверном варианте (SQL) выполнение заданий происходит на стороне сервера 1С:Предприятие, что обеспечивает стабильность и независимость от рабочих мест пользователей.

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

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

Характеристика Клиент-серверный режим Файловый режим
Место выполнения Сервер 1С Рабочее место пользователя
Зависимость от сеанса Не зависит Зависит от активного сеанса
Производительность Высокая Средняя/Низкая
Риск блокировок Минимальный Высокий

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

Как проверить статус выполнения?

Статус выполнения можно посмотреть в журнале регламентных заданий. Откройте список справочника «РегламентныеЗадания», найдите созданную запись и посмотрите реквизит «Состояние». Там будет указано: «Готово к выполнению», «Выполняется» или «Ошибка выполнения».

Диагностика ошибок и анализ журналов

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

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

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

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

💡

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

Можно ли передать во внешнюю обработку результат выполнения задания?

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

Что делать, если задание зависло в статусе «Выполняется»?

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

Требуется ли перезагрузка базы для старта нового задания?

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

Как отладить код обработчика регламентного задания?

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

Влияет ли версия платформы 1С на создание заданий извне?

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