Как запустить регламентное задание из расширения конфигурации 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

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

Выясняем причину: почему инструкция для 1С:Фреш не подходит для локальной базы

Часто разработчики пытаются использовать рекомендации из документации к сервису 1С:Фреш. В этой документации предлагается создать в расширении общий модуль с экспортной процедурой ВыполнитьКоманду() и подключить расширение. Однако при попытке настроить такое задание в локальной файловой или клиент-серверной базе вкладка «Команды» попросту отсутствует.

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

Современное решение: нативная поддержка регламентных заданий в расширениях (Платформа 8.3.23+)

Начиная с версии платформы 8.3.23, фирма «1С» добавила полноценную возможность добавлять регламентные задания непосредственно в расширения конфигурации. Это кардинально изменило подход к разработке и избавило от необходимости использовать сторонние механизмы.

Разберем по шагам, как настроить регламентное задание в расширении на современной платформе:

  1. Откройте конфигуратор и перейдите в окно работы с расширениями.
  2. В дереве метаданных вашего расширения найдите ветку Регламентные задания, нажмите правой кнопкой мыши и выберите команду Добавить.
  3. В свойствах созданного регламентного задания укажите имя (например, РегламентноеЗадание_ОбработкаДанныхРасширения).
  4. В поле Имя метода укажите процедуру общего серверного модуля вашего расширения. Обратите внимание, что модуль должен иметь свойства Сервер и Вызов сервера (при необходимости), а сама процедура должна быть экспортной.
  5. Настройте стандартное расписание выполнения задания прямо в конфигураторе или оставьте возможность настройки администратору в режиме «1С:Предприятие».

Пример кода экспортного метода в общем модуле расширения РШ_РегламентныеПроцедуры:


Процедура ВыполнитьОбработкуДанных() Экспорт
    // Код, который выполняет регламентные действия
    ЗаписьЖурналаРегистрации(
        "Расширение.РегламентноеЗадание",
        УровеньЖурналаРегистрации.Информация,
        ,
        ,
        "Запуск регламентного задания из расширения выполнен успешно!"
    );
КонецПроцедуры

Этот способ является наиболее предпочтительным, так как он не зависит от БСП, работает максимально быстро и поддерживается платформой на уровне ядра.

Решение для старых версий платформы: обходной путь через БСП (метод &Вместо)

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

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

Разберем по шагам реализацию этого механизма:

  1. Создайте в расширении общий серверный модуль (например, РШ_БСП_Перехват).
  2. Используя механизм аннотаций, перехватите процедуру общего модуля БСП, которая отвечает за запуск регламентных заданий дополнительных обработок. Обычно это модуль ДополнительныеОтчетыИОбработки и процедура ВыполнитьОбработкуПоРегламентномуЗаданию.
  3. Вставьте директиву &Вместо и опишите логику проверки: если система пытается запустить наше кастомное задание, мы перенаправляем управление на процедуру нашего расширения. В противном случае — передаем управление стандартному коду БСП через ПродолжитьВызов().

Посмотрим на пример реализации такого перехвата в общем модуле расширения:


&Вместо("ВыполнитьОбработкуПоРегламентномуЗаданию")
Процедура РШ_ВыполнитьОбработкуПоРегламентномуЗаданию(ПараметрыВыполнения, РезультатВыполнения)
    
    // Проверяем, относится ли задача к нашему расширению
    Если ПараметрыВыполнения.Свойство("ИмяНашегоЗадания") И ПараметрыВыполнения.ИмяНашегоЗадания = "МояСпециальнаяПроцедура" Тогда
        Попытка
            // Вызываем процедуру из общего модуля нашего расширения
            РШ_РегламентныеПроцедуры.ВыполнитьОбработкуДанных();
            РезультатВыполнения = Истина;
        Исключение
            ЗаписьЖурналаРегистрации(
                "Расширение.ОшибкаРегламентногоЗадания",
                УровеньЖурналаРегистрации.Ошибка,
                ,
                ,
                ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())
            );
            РезультатВыполнения = Ложь;
        КонецПопытки;
    Иначе
        // Передаем управление стандартному механизму БСП
        ПродолжитьВызов(ПараметрыВыполнения, РезультатВыполнения);
    КонецЕсли;
    
КонецПроцедуры

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

Важные особенности выполнения заданий в файловом режиме

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

Чтобы регламентные задания в файловой базе выполнялись стабильно, необходимо соблюдение одного из условий:

Пример строки запуска для планировщика Windows:


"C:\Program Files\1cv8\8.3.17.1386\bin\1cv8.exe" ENTERPRISE /F"C:\PathToMyDatabase" /N"ScheduledJobUser" /P"MyPassword" /AllowExecuteScheduledJobs -Force

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

← На главную