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

Автоматизация · 10 мин

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

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

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

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

Что нужно подготовить перед подключением

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

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

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

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

Это основной сценарий для УТ, ERP, КА, БП и других типовых конфигураций. Откройте раздел «Администрирование» → «Печатные формы, отчеты и обработки» и убедитесь, что включён флажок «Дополнительные отчеты и обработки». Затем перейдите по ссылке «Дополнительные отчеты и обработки» и нажмите «Добавить из файла», выбрав ваш .epf-файл.

Если обработка корректно реализует интерфейс БСП, она зарегистрируется в справочнике, и в карточке появится таблица команд. Для команды с вариантом «ВызовСерверногоМетода» в колонке «Регламентное задание» можно указать расписание: конфигурация автоматически создаст задание, которое будет вызывать серверный метод обработки.

Минимальный шаблон функции сведений в модуле объекта обработки выглядит так:

bsl
Функция СведенияОВнешнейОбработке() Экспорт
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
	ПараметрыРегистрации.Версия = "1.0";
	Команда = ПараметрыРегистрации.Команды.Добавить();
	Команда.Представление = "Выполнить обработку по расписанию";
	Команда.Идентификатор = "ВыполнитьОбработку";
	Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
	Возврат ПараметрыРегистрации;
КонецФункции

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

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

Способ 2: регламентное задание-обёртка для самописной конфигурации

Если БСП нет, создайте в конфигураторе общий модуль (серверный, с признаком «Вызов сервера» не обязателен, но «Сервер» — обязателен) и регламентное задание, метод которого указывает на процедуру этого модуля. Внутри процедуры обработка загружается и выполняется:

bsl
Процедура ВыполнитьВнешнююОбработку() Экспорт
	ПутьКФайлу = "C:\1C_Jobs\МояОбработка.epf";
	Обработка = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
	Обработка.ВыполнитьОсновнуюПроцедуру();
КонецПроцедуры

Второй параметр Ложь отключает безопасный режим — учитывайте, что это допустимо только для доверенного файла в защищённом каталоге. Более надёжный вариант — хранить двоичные данные обработки не в файле на диске, а в базе: в константе с типом «ХранилищеЗначения» или в собственном справочнике. Тогда задание не зависит от доступности сетевого пути и прав на файловую систему.

Настройка расписания и параметров выполнения

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

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

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

Порядок действий для типовой конфигурации
  1. 1
    Убедитесь, что обработка содержит СведенияОВнешнейОбработке() и серверную команду
  2. 2
    Включите «Дополнительные отчеты и обработки» в настройках администрирования
  3. 3
    Добавьте .epf-файл в справочник дополнительных обработок
  4. 4
    В карточке обработки задайте расписание для нужной команды
  5. 5
    Запустите задание вручную кнопкой «Выполнить сейчас» и проверьте результат
  6. 6
    Проверьте журнал регистрации на наличие ошибок фонового задания

Проверка выполнения и диагностика ошибок

Главный инструмент контроля — журнал регистрации с отбором по событию «Фоновое задание». Там видно время запуска, завершения и текст ошибки, если задание упало. В типовых конфигурациях список заданий показывает также состояние последнего выполнения и дату последнего запуска.

Полезно встроить в саму обработку явное логирование: запись в журнал регистрации через ЗаписьЖурналаРегистрации() с сообщениями о старте, количестве обработанных объектов и успешном завершении. Без этого отличить «задание отработало, но ничего не сделало» от «задание вообще не запускалось» бывает сложно.

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

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

Запись в журнале регистрации
Норма

Событие «Фоновое задание. Успешное завершение» в ожидаемое время

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

Событие «Ошибка выполнения» или записи нет вовсе

Фактический результат работы
Норма

Созданы/изменены ожидаемые документы, записи, файлы

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

Данные не изменились, хотя задание «успешно» завершилось

Периодичность
Норма

Запуски идут с заданным интервалом

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

Пропуски запусков — сеанс для файловой базы не запущен или задание отключено

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

Типичные ошибки
01
Вызов модальных окон и форм в коде — фоновое задание падает, так как интерактивность недоступна на сервере
02
Отсутствие экспортной серверной процедуры — БСП не видит команду, обёртка не может вызвать метод
03
Файл обработки лежит на клиентской машине — сервер не находит .epf по указанному пути
04
Нет прав у пользователя задания — обработка молча завершается ошибкой доступа к объектам
05
Слишком частый интервал при длительном выполнении — накопление конфликтующих экземпляров задания
06
Ожидание работы в файловой базе без запущенного сеанса выполнения заданий — расписание просто не срабатывает

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

Удобный приём — хранить версию обработки в её сведениях и периодически сверять с зарегистрированной в базе. При обновлении .epf-файла карточку дополнительной обработки нужно обновить вручную (кнопка «Загрузить из файла»), иначе по расписанию продолжит выполняться старая версия, что часто вводит в заблуждение при отладке.
ПЗ
Практическое замечание

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

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

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

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

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

Обработка работает вручную, но по расписанию выдаёт ошибку. С чего начать?

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

Можно ли выполнять внешнюю обработку по расписанию без изменения конфигурации?

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

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

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

Что делать, если задание выполняется слишком долго и блокирует работу пользователей?

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

Итог

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

Внешняя обработка становится регламентным заданием через механизм «Дополнительные отчеты и обработки» в конфигурациях на БСП либо через задание-обёртку с ВнешниеОбработки.Создать(). Код обязан быть серверным и без интерактивных вызовов, пользователь задания — иметь нужные права, а результат всегда проверяется по журналу регистрации и фактическим изменениям данных.