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

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

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

Специфика выполнения заданий в разных типах баз

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

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

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

Почему не работает метод Сообщить() в регламентных заданиях?

Частая ошибка новичков — попытка проверить выполнение кода с помощью вывода текста на экран. Разберем причину, почему функция Сообщить() ничего не выводит при отладке регламентного задания.

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

Как правильно настроить логирование

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

1. Запись в текстовый файл

Можно использовать объекты работы с текстом, например, ЗаписьТекста. Однако здесь кроется подводный камень. Вызов процедуры ПриНачалеРаботыСистемы(), где разработчики часто тестируют код записи, выполняется на клиенте (используя пути и права локального пользователя). А регламентное задание работает на сервере. Текстовый файл может не создаться из-за неверных путей на сервере или отсутствия прав у серверного процесса на запись в папку Windows.

2. Использование Журнала регистрации

Это самый правильный и штатный механизм 1С. Вместо файлов мы запишем информацию о выполнении прямо в системный лог. Применим метод ЗаписьЖурналаРегистрации. Посмотрим на пример кода для нашего регламентного задания:


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

Проверить такие записи очень просто. Зайдите в режим 1С:Предприятие, перейдите в раздел "Администрирование" -> "Обслуживание" -> "Журнал регистрации" (или откройте его прямо из Конфигуратора). Там вы увидите все оставленные вашим кодом сообщения с точным временем выполнения.

Архитектура кода и тестирование заданий

Посмотрим на лучшие практики разработки. Не пишите сложную бизнес-логику непосредственно в модуле регламентного задания.

  1. Создайте Общий модуль и установите в его свойствах галочку Сервер.
  2. Напишите внутри экспортную процедуру с нужным алгоритмом.
  3. В свойствах регламентного задания в поле "Имя метода" выберите эту созданную серверную процедуру.

Почему мы так делаем? Это позволяет легко протестировать код. Вы можете создать обычную внешнюю обработку с кнопкой на форме, которая будет вызывать вашу экспортную процедуру: МойОбщийМодуль.ВыплатитьЗарплатуАвтоматически(). Так вы сможете отладить бизнес-логику мгновенно, не дожидаясь наступления времени по расписанию регламентного задания.

Как настроить отладчик для фоновых процессов

Если вы просто поставите точку останова в серверном модуле регламентного задания, система проигнорирует ее при выполнении. Настроим Конфигуратор для перехвата таких процессов:

  1. Откройте меню Отладка.
  2. Выберите пункт Подключение...
  3. В открывшемся окне нажмите кнопку Автоматическое подключение.
  4. Установите галочку напротив пункта Фоновые задания.

Только после выполнения этих шагов отладчик начнет останавливаться на ваших точках (breakpoints) внутри регламентных заданий.

Где настраивать расписание в режиме "Предприятие"

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

Если ваша учебная конфигурация написана полностью "с нуля", готового графического интерфейса для настройки расписания там нет. В этом случае расписание задается либо программно, либо в палитре свойств задания в Конфигураторе.

Однако, если вы используете типовую конфигурацию или внедрили "Библиотеку стандартных подсистем" (БСП), то интерфейс для управления заданиями уже готов. Найти его можно по пути: Администрирование -> Обслуживание -> Регламентные операции -> Регламентные и фоновые задания.

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

← На главную