Как настроить регламентное задание 1С для выполнения только в определенные часы дня?

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

При работе с системой 1С:Предприятие часто возникает необходимость автоматизировать рутинные операции с помощью регламентных заданий. Однако не всегда эти задания должны выполняться круглосуточно. Иногда их выполнение необходимо ограничить определенным временным интервалом, например, в рабочие часы, чтобы избежать ненужной нагрузки на систему в нерабочее время или обеспечить актуальность данных именно тогда, когда это требуется пользователям. Давайте рассмотрим, как мы можем настроить регламентное задание так, чтобы оно запускалось по расписанию, но только в заданный промежуток времени.

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

Настройка расписания регламентного задания через пользовательский интерфейс 1С

Наиболее предпочтительным и системным способом ограничения времени выполнения регламентного задания является использование стандартных настроек расписания, предоставляемых платформой 1С:Предприятие. Этот метод позволяет системе самостоятельно управлять запусками задания, минимизируя нагрузку, поскольку задание будет активироваться только в разрешенные часы. Мы подробно разберем, как применить этот подход.

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

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

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

  4. Настроим расписание выполнения. После выбора задания нажмем кнопку Настроить расписание. Откроется окно настройки расписания, где мы можем указать различные параметры запуска.

  5. Используем вкладку «Дневное». В окне настройки расписания нам понадобится вкладка Дневное. Именно здесь мы можем указать интервал времени в течение дня, когда разрешено выполнение задания. Мы увидим поля Время начала и Время окончания. Здесь мы зададим требуемый интервал, например, с 09:00:00 до 18:00:00.

    Помимо этого, на этой же вкладке мы укажем Период повторения – интервал, с которым задание будет запускаться внутри разрешенного временного окна. Например, если мы хотим, чтобы задание выполнялось каждые 5 минут, мы установим соответствующее значение. Важно помнить, что если мы указываем период повторения, то в течение заданного дневного интервала задание будет запускаться с этой периодичностью.

    Платформа 1С работает с расписанием, оперируя секундами от начала дня. Поэтому, задавая 09:00:00, мы по сути указываем 9 * 3600 = 32400 секунд от начала дня, а 18:00:00 соответствует 18 * 3600 = 64800 секундам.

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

Этот метод является оптимальным и рекомендованным для большинства случаев, когда требуется фиксированное ограничение по времени суток.

Программный контроль выполнения регламентного задания

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

Разберем пример реализации программного контроля.

  1. Редактируем модуль регламентного задания. Мы открываем конфигуратор и находим то регламентное задание, которое хотим изменить. Затем переходим в его модуль и находим экспортную функцию, которая вызывается при выполнении задания (обычно это ВыполнитьЗадание() или похожая).

  2. Вставляем проверку времени. В начале этой функции мы добавляем условие, которое проверяет текущее время относительно желаемого интервала.

    
    Функция ВыполнитьЗадание() Экспорт
        // Определяем начало и конец рабочего интервала
        // Например, с 9:00 до 18:00
        НачалоРабочегоДня = НачалоДня(ТекущаяДата()) + 9 * 3600; // 9 часов от начала дня
        КонецРабочегоДня = НачалоДня(ТекущаяДата()) + 18 * 3600; // 18 часов от начала дня
        
        ТекущийМомент = ТекущаяДата();
        
        Если (ТекущийМомент >= НачалоРабочегоДня) И (ТекущийМомент < КонецРабочегоДня) Тогда
            // Здесь размещаем весь основной код регламентного задания
            Сообщить("Регламентное задание выполняется в рабочее время!");
            // Например, вызов основной процедуры:
            // МояПроцедураВыполненияЗадания();
        Иначе
            // Если время нерабочее, мы можем записать информацию об этом
            Сообщить("Регламентное задание не выполняется, т.к. сейчас нерабочее время.");
        КонецЕсли;
    КонецФункции
    

Проанализируем этот код:

Преимущества программного подхода:

Недостатки программного подхода:

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

Особенности работы с объектом РасписаниеРегламентногоЗадания

Когда мы настраиваем расписание регламентного задания через пользовательский интерфейс, платформа 1С внутренне оперирует объектом РасписаниеРегламентногоЗадания. Этот объект имеет ряд свойств, которые определяют логику его работы. Понимание этих свойств может помочь нам при программной настройке расписания, а также при отладке и анализе работы регламентных заданий.

Рассмотрим некоторые ключевые свойства этого объекта:

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


// Пример программной настройки расписания для существующего регламентного задания
// Допустим, у нас есть ссылка на регламентное задание
РегламентноеЗадание = РегламентныеЗадания.НайтиПоИмени("МоеРегламентноеЗадание");

Если РегламентноеЗадание <> Неопределено Тогда
    Расписание = РегламентноеЗадание.ПолучитьРасписание();
    
    // Устанавливаем дневной интервал с 9:00 до 18:00
    Расписание.ИспользованиеДневногоИнтервала = Истина;
    Расписание.ВремяНачалаДня = 9 * 3600;  // 9 часов от начала дня
    Расписание.ВремяОкончанияДня = 18 * 3600; // 18 часов от начала дня
    
    // Устанавливаем периодичность выполнения каждые 5 минут
    Расписание.ИспользованиеПериодичности = Истина;
    Расписание.ПериодПовторения = 5 * 60; // 5 минут в секундах
    
    // Также можно задать другие параметры, например, ежедневное выполнение
    Расписание.ИспользованиеДнейНедели = Ложь; // Если не нужно по дням недели
    Расписание.ИспользованиеМесяцев = Ложь;   // Если не нужно по месяцам
    
    РегламентноеЗадание.УстановитьРасписание(Расписание);
    Сообщить("Расписание регламентного задания 'МоеРегламентноеЗадание' успешно обновлено.");
Иначе
    Сообщить("Регламентное задание 'МоеРегламентноеЗадание' не найдено.");
КонецЕсли;

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

Разъяснение по ОбластиДанных (разделению данных)

В ходе обсуждения темы возник вопрос относительно использования ОбластиДанных. Давайте внесем ясность в этот момент, чтобы избежать путаницы.

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

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

Почему ОбластиДанных не имеют прямого отношения к расписанию регламентных заданий?

Механизм ОбластиДанных сам по себе не регулирует время запуска регламентных заданий. Регламентное задание – это функция сервера 1С:Предприятия, которая выполняется по общему расписанию, заданному для *всей* информационной базы. Проверка на принадлежность к определенной области данных может быть реализована *внутри* кода регламентного задания, если его логика должна быть специфичной для разных областей. Например, регламентное задание может итерироваться по всем активным областям данных и выполнять определенные действия для каждой из них.

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

Лучшие практики и дополнительные соображения

При работе с регламентными заданиями и их расписанием мы должны учитывать несколько важных моментов для обеспечения стабильности и производительности системы.

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

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

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

  4. Тестирование: Мы должны тщательно тестировать изменения в расписании или коде регламентных заданий, особенно если они выполняют критически важные операции. Рекомендуется сначала протестировать на тестовой базе, чтобы убедиться в корректности работы и отсутствии побочных эффектов.

  5. Документирование: Если мы используем сложную логику расписания или программный контроль, крайне важно документировать эти решения. Это поможет другим разработчикам и администраторам понимать, как работает система.

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

← На главную