К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как сделать регламентное задание из внешней обработки в 1С

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

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

Штатного способа назначить внешнюю обработку непосредственно на регламентное задание в типовом механизме нет: задание вызывает метод общего модуля конфигурации. Однако существуют рабочие обходные пути — через создание задания программно, через подсистему «Дополнительные отчеты и обработки» из БСП и через внешний планировщик. Ниже разобраны все три подхода с кодом и ограничениями.

Почему нельзя назначить обработку на задание напрямую

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

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

Вариант 1: подсистема «Дополнительные отчеты и обработки» БСП

Если конфигурация построена на Библиотеке стандартных подсистем (УТ, КА, ERP, БП и большинство типовых), самый правильный путь — подсистема «Дополнительные отчеты и обработки». Она позволяет зарегистрировать внешнюю обработку в справочнике и назначить ей расписание, при этом конфигурация не меняется.

Обработка должна реализовать интерфейс БСП: функцию СведенияОВнешнейОбработке() в модуле объекта, где указывается вид «ДополнительнаяОбработка» и команда с вариантом использования «ВыполнениеСерверногоМетода». Именно такие команды подсистема умеет ставить на расписание через механизм регламентных заданий.

Функция СведенияОВнешнейОбработке() Экспорт

ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();

ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();

ПараметрыРегистрации.Версия = "1.0";

ПараметрыРегистрации.БезопасныйРежим = Ложь;

Команда = ПараметрыРегистрации.Команды.Добавить();

Команда.Представление = "Выгрузка данных по расписанию";

Команда.Идентификатор = "ВыгрузкаДанных";

Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();

Команда.ПоказыватьОповещение = Ложь;

Возврат ПараметрыРегистрации;

КонецФункции

Процедура ВыполнитьКоманду(ИмяКоманды, ПараметрыВыполнения) Экспорт

Если ИмяКоманды = "ВыгрузкаДанных" Тогда

// рабочий код выгрузки

КонецЕсли;

КонецПроцедуры

После подключения обработки в разделе «Администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки» откройте её карточку, перейдите к списку команд и для серверной команды настройте расписание. Подсистема сама создаст регламентное задание «Выполнение дополнительной обработки» и будет вызывать вашу процедуру.

Порядок действий для БСП
  1. 1
    Добавьте в модуль обработки функцию СведенияОВнешнейОбработке и процедуру ВыполнитьКоманду
  2. 2
    Подключите обработку в справочнике дополнительных отчетов и обработок
  3. 3
    В карточке обработки откройте команду и задайте расписание
  4. 4
    Включите использование регламентных заданий в настройках сервера
  5. 5
    Проверьте выполнение в журнале регистрации и консоли заданий

Вариант 2: программное создание задания с вызовом обработки

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

// Общий модуль, сервер, вызов сервера

Процедура ВыполнитьВнешнююОбработку() Экспорт

ПутьКФайлу = Константы.ПутьКОбработке.Получить();

Обработка = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);

Обработка.ВыполнитьРегламентнуюОперацию();

КонецПроцедуры

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

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

Метаданные.РегламентныеЗадания.ВыполнениеВнешнейОбработки);

Задание.Наименование = "Выгрузка из внешней обработки";

Задание.Использование = Истина;

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

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

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

Вариант 3: запуск через планировщик Windows

Третий способ вообще обходит механизм регламентных заданий: планировщик задач Windows запускает толстый клиент 1С в пакетном режиме с указанием внешней обработки. Обработка при этом выполняется в обычном сеансе.

bash
"C:\Program Files\1cv8\8.3.22.1750\bin\1cv8.exe" ENTERPRISE /F"D:\Bases\Trade" /N"Robot" /P"пароль" /Execute"D:\Scripts\Vygruzka.epf" /C"РегламентныйРежим"

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

Сравнение вариантов

Подсистема БСП

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

Общий модуль-пускатель

Гибко и работает в любой конфигурации, но требует доработки конфигурации и хранения файла обработки на сервере.

Планировщик Windows

Не требует изменения конфигурации вообще, но зависит от клиентского сеанса, пароля в задаче и не интегрирован с журналом заданий 1С.

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

Расписание задаётся объектом РасписаниеРегламентногоЗадания: периодичность, время начала, дни недели, повторение в течение дня. Для частых запусков учитывайте свойство «ИнтервалПовтораПриАварийномЗавершении» и «КоличествоПовторовПриАварийномЗавершении» — они определяют поведение при ошибках.

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

Для диагностики используйте консоль заданий (в типовых — «Администрирование — Обслуживание — Регламентные и фоновые задания») и журнал регистрации с отбором по событию фонового задания. Ошибки внутри обработки пишите в журнал явно через ЗаписьЖурналаРегистрации.

Контрольные точки

Как проверить результат

Состояние задания в консоли
Норма

Последний запуск завершён без ошибок, время соответствует расписанию

Тревожный признак

Задание висит в состоянии «Выполняется» или аварийно завершено

Журнал регистрации
Норма

Есть записи о начале и конце фонового задания

Тревожный признак

Ошибки «Метод не обнаружен» или «Файл не найден»

Результат работы обработки
Норма

Данные выгружены/созданы, записи обновлены

Тревожный признак

Задание отработало, но прикладного результата нет

Типичные ошибки и ограничения

Частая ошибка — обращение к клиентскому контексту: вызовы Предупреждение(), ОткрытьФорму(), работа с ТабличнымДокументом через Показать() в фоновом задании приводят к аварийному завершению. Весь код должен быть серверным, а диалоги заменены записями в журнал.

Вторая группа проблем — права и безопасный режим. Обработка в безопасном режиме не сможет обращаться к файловой системе и COM-объектам. Также у пользователя, от имени которого выполняется задание (в файловом варианте — указанный в свойстве «Пользователь»), должны быть права на все затрагиваемые объекты.

Типичные ошибки
01
Вызов клиентских методов в фоновом задании — задание падает с ошибкой контекста
02
Файл обработки лежит на локальном диске разработчика — сервер не находит файл по пути
03
В файловой базе нет сеанса, выполняющего фоновые задания, — расписание есть, а запусков нет
04
Хранение пароля в открытом виде в задаче планировщика — риск компрометации учётной записи
05
Отсутствие записи ошибок в журнал — сбой задания остаётся незамеченным неделями
Итог

Что важно запомнить

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

Частые вопросы

Можно ли указать файл .epf прямо в свойстве «Имя метода» регламентного задания?

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

Почему задание настроено, но в файловой базе ничего не выполняется?

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

Как передать параметры из задания внутрь внешней обработки?

Напрямую — никак. Сохраните настройки в константе, регистре сведений или справочнике, а обработка при запуске считывает их самостоятельно. В варианте с планировщиком Windows параметры передаются строкой через ключ /C и читаются из ПараметрЗапуска.

Обработка падает с ошибкой «Операция не разрешена в безопасном режиме». Что делать?

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

Как отладить код, который выполняется в фоновом задании?

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

Можно ли запускать одну обработку с разными расписаниями?

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