Перенос конфигураций и данных между файловым и клиент-серверным вариантами работы — частая задача при масштабировании информационной базы 1С. Однако при миграции разработчики и администраторы нередко сталкиваются с тем, что регламентные задания либо перестают выполняться, либо требуют дополнительной инициализации. Рассмотрим подробно, как устроена работа регламентных заданий в обеих архитектурах, как правильно перенести задания и какие технические нюансы необходимо учесть.
Для понимания логики переноса разберем, как платформа 1С разделяет регламентные задания по способу их создания:
.cf такие задания создаются платформой автоматически и сразу готовы к исполнению..cf они автоматически в целевую базу не переносятся.Если в исходной базе регламентное задание не являлось предопределенным, его экземпляр потребуется создать в целевой базе заново либо выполнить перенос программно.
Проанализируем два сценария миграции заданий между файловой и серверной базами:
Сценарий 1: Перенос через выгрузку и загрузку информационной базы (файл .dt).
При полной выгрузке базы в файл .dt и последующей загрузке в другую базу переносятся абсолютно все данные, включая служебные таблицы. В этом случае сохраняются как предопределенные, так и созданные пользователями регламентные задания, их индивидуальные расписания, история запусков и переданные параметры.
Сценарий 2: Перенос только конфигурации (файл .cf).
Если базы объединяются или обновляются через .cf, в целевую базу переносится только программный код и состав предопределенных заданий. Настройки расписания непредопределенных заданий потребуется перенести через код. Посмотрим на пример программного чтения и создания регламентного задания:
// Создание нового регламентного задания в пользовательском режиме
НовоеЗадание = РегламентныеЗадания.СоздатьРегламентноеЗадание("ИмяМетаданныхЗадания");
НовоеЗадание.Наименование = "Регулярная обработка данных";
НовоеЗадание.Использование = Истина;
// Настройка расписания
Расписание = Новый РасписаниеКлиентСервер;
Расписание.Периодичность = 86400; // Каждый день
НовоеЗадание.Расписание = Расписание;
НовоеЗадание.Записать();
Для управления существующими заданиями также используется метод РегламентныеЗадания.ПолучитьРегламентныеЗадания(), возвращающий массив всех зарегистрированных в базе заданий.
В платформе 1С:Предприятие 8.2 для файловых баз требовалось использовать периодический вызов ПодключитьОбработчикОжидания и метод ВыполнитьОбработкуЗаданий в коде главного модуля. Начиная с версии 8.3, исполнение регламентных процедур встроено в саму платформу, однако имеет важные ограничения:
/AllowExecuteScheduledJobs:
/AllowExecuteScheduledJobs -Force — принудительно назначает текущий клиентский сеанс ответственным за запуск регламентных заданий;
/AllowExecuteScheduledJobs -Off — запрещает данному сеансу (например, обычному пользователю) выполнять регламентные процедуры;
/AllowExecuteScheduledJobs -On — стандартный режим автоматического участия сеанса в распределении задач.В клиент-серверном варианте регламентные задания исполняются службой кластера серверов 1С (процессом ragent / rphost). Это обеспечивает их независимость от присутствия пользователей в системе, но добавляет специфические серверные требования:
usr1cv8). Все локальные пути (вида C:\Exchange\) будут указывать на диски сервера, а не клиентского ПК. Для работы с сетевыми ресурсами (UNC-пути) службе сервера 1С должны быть предоставлены соответствующие права доступа.Разберем последовательность действий при переносе заданий из файлового режима в клиент-серверный:
.cf) либо всю базу целиком (через файл .dt).