Автоматизация · 10 мин
Как внешнюю обработку сделать регламентным заданием в 1С
Пошаговая инструкция: как подключить внешнюю обработку 1С как регламентное задание через БСП, настроить расписание, параметры и проверить выполнение.
Регламентные задания 1С работают только с методами, описанными в конфигурации, поэтому «голую» внешнюю обработку (.epf) напрямую в список заданий добавить нельзя. Однако в типовых конфигурациях на базе Библиотеки стандартных подсистем (БСП) есть штатный механизм «Дополнительные отчеты и обработки», который позволяет зарегистрировать внешний файл в базе и назначить ему выполнение по расписанию — фактически превратив его в регламентное задание.
Если конфигурация самописная или БСП в ней отсутствует, задача решается иначе: через обёртку — небольшое общее регламентное задание, которое загружает внешнюю обработку из файла или хранилища и вызывает её экспортную процедуру. Ниже разобраны оба подхода, требования к коду обработки, настройка расписания и способы проверить, что задание действительно отрабатывает.
Что нужно подготовить перед подключением
Первое условие — обработка должна уметь работать на сервере без интерактивного участия пользователя. Регламентное задание выполняется в фоновом сеансе: там недоступны формы, модальные окна, предупреждения и вопросы пользователю. Если в коде есть вызовы Предупреждение(), Вопрос() или открытие форм, задание завершится с ошибкой либо «повиснет».
Второе условие — наличие серверной экспортной процедуры. Для подключения через БСП обработка должна содержать функцию СведенияОВнешнейОбработке() в модуле объекта, где объявляется команда с вариантом использования «ВызовСерверногоМетода». Для варианта с обёрткой достаточно экспортной процедуры, которую можно вызвать извне.
Третье — права. Пользователь, от имени которого будет выполняться задание, должен иметь права на все объекты, с которыми работает обработка: документы, регистры, справочники. Частая ситуация: обработка вручную под администратором работает, а по расписанию падает из-за нехватки прав у служебного пользователя.
Способ 1: подключение через «Дополнительные отчеты и обработки» (БСП)
Это основной сценарий для УТ, ERP, КА, БП и других типовых конфигураций. Откройте раздел «Администрирование» → «Печатные формы, отчеты и обработки» и убедитесь, что включён флажок «Дополнительные отчеты и обработки». Затем перейдите по ссылке «Дополнительные отчеты и обработки» и нажмите «Добавить из файла», выбрав ваш .epf-файл.
Если обработка корректно реализует интерфейс БСП, она зарегистрируется в справочнике, и в карточке появится таблица команд. Для команды с вариантом «ВызовСерверногоМетода» в колонке «Регламентное задание» можно указать расписание: конфигурация автоматически создаст задание, которое будет вызывать серверный метод обработки.
Минимальный шаблон функции сведений в модуле объекта обработки выглядит так:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Версия = "1.0";
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = "Выполнить обработку по расписанию";
Команда.Идентификатор = "ВыполнитьОбработку";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
Возврат ПараметрыРегистрации;
КонецФункции
Процедура ВыполнитьКоманду(ИмяКоманды, ПараметрыВыполнения) Экспорт
// основная логика обработки
КонецПроцедурыОбратите внимание: процедура ВыполнитьКоманду должна быть в модуле объекта и компилироваться на сервере. Для управляемых форм это означает, что клиентский код нужно изолировать директивами #Если ТолстыйКлиентОбычноеПриложение Тогда или вынести в отдельные ветки.
Способ 2: регламентное задание-обёртка для самописной конфигурации
Если БСП нет, создайте в конфигураторе общий модуль (серверный, с признаком «Вызов сервера» не обязателен, но «Сервер» — обязателен) и регламентное задание, метод которого указывает на процедуру этого модуля. Внутри процедуры обработка загружается и выполняется:
Процедура ВыполнитьВнешнююОбработку() Экспорт
ПутьКФайлу = "C:\1C_Jobs\МояОбработка.epf";
Обработка = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
Обработка.ВыполнитьОсновнуюПроцедуру();
КонецПроцедурыВторой параметр Ложь отключает безопасный режим — учитывайте, что это допустимо только для доверенного файла в защищённом каталоге. Более надёжный вариант — хранить двоичные данные обработки не в файле на диске, а в базе: в константе с типом «ХранилищеЗначения» или в собственном справочнике. Тогда задание не зависит от доступности сетевого пути и прав на файловую систему.
Настройка расписания и параметров выполнения
Расписание задаётся в карточке регламентного задания (в режиме предприятия — через «Администрирование» → «Обслуживание» → «Регламентные и фоновые задания», в конфигураторе — в свойствах задания). Доступны ежедневные, еженедельные, помесячные схемы и произвольные интервалы, например «каждые 600 секунд».
Для файловой базы есть принципиальное ограничение: регламентные задания выполняются только пока запущен сеанс, в котором разрешено их выполнение (обычно это отдельно запущенный сеанс с параметром /ExecuteScheduledJobs или сеанс пользователя с соответствующей настройкой). В клиент-серверном варианте задания выполняет кластер серверов автономно.
При настройке интервала учитывайте длительность самой обработки. Если задание отрабатывает 10 минут, а интервал — 5 минут, экземпляры будут накапливаться или конфликтовать. Ставьте интервал с запасом и, при необходимости, защищайте логику блокировками или проверкой «уже выполняется».
- 1Убедитесь, что обработка содержит СведенияОВнешнейОбработке() и серверную команду
- 2Включите «Дополнительные отчеты и обработки» в настройках администрирования
- 3Добавьте .epf-файл в справочник дополнительных обработок
- 4В карточке обработки задайте расписание для нужной команды
- 5Запустите задание вручную кнопкой «Выполнить сейчас» и проверьте результат
- 6Проверьте журнал регистрации на наличие ошибок фонового задания
Проверка выполнения и диагностика ошибок
Главный инструмент контроля — журнал регистрации с отбором по событию «Фоновое задание». Там видно время запуска, завершения и текст ошибки, если задание упало. В типовых конфигурациях список заданий показывает также состояние последнего выполнения и дату последнего запуска.
Полезно встроить в саму обработку явное логирование: запись в журнал регистрации через ЗаписьЖурналаРегистрации() с сообщениями о старте, количестве обработанных объектов и успешном завершении. Без этого отличить «задание отработало, но ничего не сделало» от «задание вообще не запускалось» бывает сложно.
Как проверить результат
Событие «Фоновое задание. Успешное завершение» в ожидаемое время
Событие «Ошибка выполнения» или записи нет вовсе
Созданы/изменены ожидаемые документы, записи, файлы
Данные не изменились, хотя задание «успешно» завершилось
Запуски идут с заданным интервалом
Пропуски запусков — сеанс для файловой базы не запущен или задание отключено
Типичные ошибки и ограничения
Отдельно стоит упомянуть безопасный режим. В свежих версиях платформы и при включённых профилях безопасности выполнение внешнего кода может быть ограничено. Если задание падает с ошибкой о безопасном режиме, проверьте настройки кластера и права на выполнение внешних обработок.
Удобный приём — хранить версию обработки в её сведениях и периодически сверять с зарегистрированной в базе. При обновлении .epf-файла карточку дополнительной обработки нужно обновить вручную (кнопка «Загрузить из файла»), иначе по расписанию продолжит выполняться старая версия, что часто вводит в заблуждение при отладке.
Частые вопросы
Можно ли передать параметры в обработку при выполнении по расписанию?
Напрямую через расписание — нет. Параметры обычно хранят в самой обработке (значения по умолчанию), в константах, в хранилище общих настроек или в реквизитах служебного справочника. Обработка при запуске считывает их самостоятельно.
Почему в файловой базе задание не выполняется, хотя расписание настроено?
В файловом варианте регламентные задания исполняются только в запущенном сеансе. Нужно либо запустить отдельный сеанс 1С с параметром разрешения выполнения заданий, либо перенести базу в клиент-серверный вариант, где заданиями управляет кластер.
Обработка работает вручную, но по расписанию выдаёт ошибку. С чего начать?
Откройте журнал регистрации с отбором по фоновым заданиям и прочитайте текст ошибки. Чаще всего причины — нехватка прав у пользователя задания, клиентский код (формы, предупреждения) в серверной процедуре или недоступный путь к файлу.
Можно ли выполнять внешнюю обработку по расписанию без изменения конфигурации?
Да, если конфигурация на БСП — механизм дополнительных обработок работает без доработок. Для самописной конфигурации без БСП потребуется добавить хотя бы одно регламентное задание-обёртку, то есть минимальное изменение конфигурации неизбежно.
Как обновить обработку, которая уже выполняется по расписанию?
В карточке дополнительной обработки нажмите «Загрузить из файла» и выберите новую версию .epf. Расписание и настройки при этом сохраняются. Для варианта с файлом на диске достаточно заменить файл, но лучше делать это в момент, когда задание гарантированно не выполняется.
Что делать, если задание выполняется слишком долго и блокирует работу пользователей?
Разбейте обработку на порции (например, обрабатывать по N документов за запуск), перенесите запуск на нерабочее время и проверьте запросы на предмет лишних соединений и полных сканирований таблиц. При хронических проблемах рассмотрите вынос логики в отдельный механизм очередей.
Что важно запомнить
Внешняя обработка становится регламентным заданием через механизм «Дополнительные отчеты и обработки» в конфигурациях на БСП либо через задание-обёртку с ВнешниеОбработки.Создать(). Код обязан быть серверным и без интерактивных вызовов, пользователь задания — иметь нужные права, а результат всегда проверяется по журналу регистрации и фактическим изменениям данных.