Как настроить автоматический запуск внешней обработки 1С по расписанию?

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

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

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

Способ 1. Использование типового механизма БСП (Дополнительные отчеты и обработки)

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

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

  1. Перенос логики из модуля формы в модуль объекта. Фоновое задание выполняется на сервере без интерактивного контекста. Код модуля формы и события вроде ПриОткрытии не исполняются. Все процедуры забора данных и отправки должны быть экспортными и находиться в модуле объекта обработки.
  2. Добавление процедуры регистрации БСП. В модуль объекта внешней обработки добавляется экспортная функция СведенияОВнешнейОбработке(). В описании команды указывается тип ВызовСерверногоМетода.

Рассмотрим пример формирования структуры сведений для регистрации обработки в БСП:


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

    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиВызовСервера.ВидОбработкиДополнительнаяОбработка();
    ПараметрыРегистрации.Наименование = "Автоматическая рассылка именинников";
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.БезопасныйРежим = Ложь; // Задается Ложь, если требуется доступ к файлам или почте

    Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = "Запустить рассылку";
    Команда.Идентификатор = "ВыполнитьРассылку";
    Команда.Использование = ДополнительныеОтчетыИОбработкиВызовСервера.ТипКомандыВызовСерверногоМетода();
    Команда.ПоказыватьОповещение = Ложь;

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

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

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

    // Вызов внутренних экспортных методов модуля объекта
    ЗаполнитьДанные(ТекущаяДатаСеанса());
    ОтправитьПочту();

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

После добавления этой функции обработка регистрируется в разделе Администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки. В карточке подключенной обработки настраивается расписание (например, каждый день в 08:00), после чего платформа создает фоновое задание в автоматическом режиме.

Способ 2. Вызов через собственное регламентное задание в конфигурации

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

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

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

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


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

    ПутьКФайлу = "C:\Services\Automat.epf"; // Или UNC путь: \\server\share\Automat.epf
    
    // Подключение внешней обработки на сервере
    ИмяОбъекта = ВнешниеОбработки.Подключить(ПутьКФайлу, , Ложь);
    ОбъектОбработки = ВнешниеОбработки.Создать(ИмяОбъекта);
    
    // Последовательный вызов экспортных методов модуля объекта
    ОбъектОбработки.ВыполнитьЗаполнение();
    ОбъектОбработки.ОтправитьОтчет();

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

Затем в дерево метаданных добавляется Регламентное задание, в качестве имени метода указывается ИмяМодуля.ВыполнитьАвтоматическуюОбработку, и задается требуемое расписание выполнения.

Способ 3. Запуск через пакетный файл и Планировщик задач Windows

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

Для реализации используется командный файл (bat-файл) и Планировщик задач Windows (Task Scheduler).

Создадим командный файл со следующим содержимым:


rem Стартер внешней обработки 1С
"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" ENTERPRISE /S"server1c\InfoBase" /N"Robot" /P"Password" /DisableStartupMessages /execute "E:\Automat\Automat.epf" /Out "E:\Automat\log.txt" -NoTruncate

Выясним критически важные нюансы этого способа:

Пример кода в модуле формы внешней обработки для автономного завершения работы:


Процедура ПриОткрытии()

    // Логика обработки данных и отправки
    ВыполнитьНажатие();
    ОтправитьНажатие();

    // Завершаем работу сеанса 1С после выполнения задач
    ЗавершитьРаботуСистемы(Ложь);

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

Важная специфика работы кода на сервере 1С

При переносе кода внешней обработки в фоновый режим необходимо учесть ограничения серверного контекста:

  1. Отказ от COM-объекта MS Outlook. На сервере 1С служба работает под системной учетной записью, у которой нет графического сеанса и настроенного профиля Outlook. Вызов COMОбъект("Outlook.Application") или метода ЗапуститьПриложение("mailto:...") завершится ошибкой. Для отправки почты следует использовать штатные объекты платформы ИнтернетПочта, ИнтернетПочтовыйПрофиль и ИнтернетПочтовоеСообщение.
  2. Права доступа к файлам и картинкам. Локальные пути вида C:\Users\User\Desktop\... недоступны серверному процессу. Файлы вложений (например, картинки или шаблоны) нужно размещать либо в сетевых папках по UNC-пути (\\server\share\...), либо хранить в макетах самой обработки.
  3. Безопасный режим. При запуске сторонних обработок платформа блокирует работу с внешними COM-объектами и файловой системой, если включен безопасный режим. При регистрации в БСП или вызове ВнешниеОбработки.Подключить() необходимо явно отключать безопасный режим (БезопасныйРежим = Ложь).
← На главную