Как настроить автоматический запуск процедуры по расписанию в 1С 8.3

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

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

Шаг 1. Перенос логики в общий модуль и адаптация кода под серверный контекст

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

Для реализации логики создадим или используем существующий общий модуль:

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

Посмотрим на пример правильной организации процедуры выгрузки данных за текущий период:


Процедура ВыполнитьЭкспортДанных() Экспорт
    
    // Автоматический расчет границ периода выгрузки
    ТекущийМомент = ТекущаяДатаСеанса();
    НачалоПериода = НачалоМесяца(ТекущийМомент);
    КонецПериода = ТекущийМомент;
    
    // Формирование содержимого для выгрузки
    ТекстовыйДокумент = Новый ТекстовыйДокумент;
    
    // Пример наполнения данными из базы
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    Номенклатура.Наименование КАК Наименование,
        |    Номенклатура.Артикул КАК Артикул
        |ИЗ
        |    Справочник.Номенклатура КАК Номенклатура";
        
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        ТекстовыйДокумент.ДобавитьСтроку(Выборка.Артикул + ";" + Выборка.Наименование);
    КонецЦикла;
    
    // Сохранение файла по прямому пути на сервере
    ПутьКФайлу = "\\server\files\export.txt";
    
    Попытка
        ТекстовыйДокумент.Записать(ПутьКФайлу, КодировкаТекста.ANSI);
    Исключение
        ЗаписьЖурналаРегистрации(
            "ЭкспортДанных",
            УровеньЖурналаРегистрации.Ошибка,
            ,
            ,
            "Ошибка сохранения файла: " + ОписаниеОшибки()
        );
        ВызватьИсключение;
    КонецПопытки;

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

Шаг 2. Создание и настройка регламентного задания

Теперь свяжем написанный метод с механизмом расписания платформы:

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

Шаг 3. Устранение проблем с файловой системой и сетевыми путями

Проанализируем распространенную ошибку, возникающую при записи файлов из фонового задания: Ошибка при вызове метода контекста (Записать). Причин такого сбоя обычно две:

  1. Недоступность букв сетевых дисков: Служба ragent (сервер 1С) работает в изолированном сеансе операционной системы Windows. Смонтированные пользователем диски (например, S:\) службе 1С не видны. Всегда указывайте прямые UNC-пути вида \\server\share\file.txt либо локальные серверные пути (например, C:\files\export.txt).
  2. Права учетной записи службы 1С: Запись выполняется от имени системного пользователя ОС, под которым запущена служба сервера 1С:Предприятия (по умолчанию это USR1CV8). Если у этой учетной записи нет прав на запись/модификацию в целевой папке на сервере, платформа аварийно завершит выгрузку. Необходимо открыть свойства папки в ОС, перейти на вкладку «Безопасность» и предоставить пользователю USR1CV8 права «Полный доступ» или «Изменение».

Шаг 4. Диагностика и мониторинг выполнения

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

  1. Блокировка регламентных заданий: В консоли администрирования серверов 1С (или в свойствах информационной базы) проверьте, не установлен ли флаг Блокировка работы регламентных заданий включена. В тестовых базах этот флаг часто активируется автоматически.
  2. Консоль регламентных заданий: Воспользуйтесь типовой или внешней консолью заданий в режиме «1С:Предприятие». В ней четко отображаются статус выполнения, время последнего запуска, код ошибки и стек вызовов фонового задания.
  3. Журнал регистрации: В режиме предприятия откройте Журнал регистрации с отбором по уровню «Ошибка» и «Предупреждение». Все системные сбои фоновых сеансов подробно протоколируются платформой.

Альтернативный вариант: Запуск через БСП без изменения конфигурации

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

  1. В модуле объекта внешней обработки реализуем стандартную функцию СведенияОВнешнейОбработке().
  2. В таблице команд указываем использование команды ВызовСерверногоМетода.
  3. Экспортную процедуру выгрузки размещаем в модуле объекта обработки.
  4. Загружаем обработку в базу через раздел Администрирование > Печатные формы, отчеты и обработки > Дополнительные отчеты и обработки и настраиваем расписание запуска прямо в пользовательском интерфейсе.

Посмотрим на шаблон функции описания для внешней обработки:


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

Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
    Если ИдентификаторКоманды = "ВыгрузитьДанные" Тогда
        // Вызов основной логики экспорта
    КонецЕсли;
КонецПроцедуры

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

← На главную