Как запустить обработки по расписанию в 1С:Предприятие 8

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

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

Понимание контекста выполнения: Сервер vs Клиент

Прежде чем приступать к написанию кода, важно уяснить фундаментальное правило: регламентные задания всегда выполняются на стороне сервера в фоновом сеансе. Это означает, что у такого процесса нет графического интерфейса. Мы не можем использовать привычные методы взаимодействия с пользователем, такие как Сообщить(), Вопрос() или Предупреждение(). Вместо них для логирования следует использовать ЗаписьЖурналаРегистрации().

Рассмотрим ошибку, возникшую в ходе обсуждения в сообщении №22. Программист попыталась использовать переменную Объект и директиву &НаКлиенте в общем модуле. Это привело к ошибке компиляции «Переменная не определена», так как на сервере в фоновом задании не существует никакой формы и, соответственно, переменной Объект.

Шаг 1. Создание метода в общем модуле

Для того чтобы регламентное задание могло вызвать ваш код, его необходимо разместить в неглобальном общем модуле. Проанализируем настройки этого модуля:

  1. Флаг Сервер должен быть установлен.
  2. Флаг Внешнее соединение (желательно).
  3. Флаг Вызов сервера обычно не требуется для регламентных заданий.

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


Процедура ВыгрузитьДанныеВФайл_XML() Экспорт
    // Создаем экземпляр обработки, встроенной в конфигурацию
    ОбработкаОбъект = Обработки.ВыгрузкаДанныхВФайл.Создать();
    
    // Настройки лучше брать из констант или параметров сеанса
    КаталогСохранения = Константы.ПутьДляОбмена.Получить(); 
    ПутьКФайлу = КаталогСохранения + "/СписокКонтрагентов.xml";
    
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл(ПутьКФайлу);
    ЗаписьXML.ЗаписатьОбъявлениеXML();
    ЗаписьXML.ЗаписатьНачалоЭлемента("ContragentList");
    
    // Получаем данные запросом, а не из табличной части формы
    Запрос = Новый Запрос("ВЫБРАТЬ Ссылка, Наименование, УНП ИЗ Справочник.Контрагенты");
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
        ЗаписьXML.ЗаписатьНачалоЭлемента("Contragent");
        ЗаписьXML.ЗаписатьАтрибут("NAME", Выборка.Наименование);
        ЗаписьXML.ЗаписатьАтрибут("UNP", Выборка.УНП);
        ЗаписьXML.ЗаписатьКонецЭлемента();
    КонецЦикла;
    
    ЗаписьXML.ЗаписатьКонецЭлемента();
    ЗаписьXML.Закрыть();
    
    ЗаписьЖурналаРегистрации("ОбменДанными", УровеньЖурналаРегистрации.Информация, , , "Выгрузка успешно завершена");
КонецПроцедуры

Шаг 2. Настройка объекта «Регламентное задание»

После того как процедура в общем модуле готова, перейдем в дерево метаданных (конфигуратор):

  1. Найдите ветку Общие -> Регламентные задания.
  2. Добавьте новое задание. В поле «Имя метода» выберите созданную нами процедуру РегЗадачи.ВыгрузитьДанныеВФайл_XML.
  3. Настройте Расписание. Здесь можно указать периодичность (каждый день, раз в час и т.д.).
  4. Укажите пользователя, под которым будет выполняться задание. У этого пользователя должны быть достаточные права (например, полные права или права на чтение справочников и запись в журнал регистрации).

Шаг 3. Работа с внешними обработками (.epf)

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


Процедура ВыполнитьВнешнююОбработку() Экспорт
    ПутьКФайлу = "C:\ExternalTools\UploadData.epf";
    ОбработкаОбъект = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
    
    // Если в обработке есть экспортный метод "ВыполнитьЗадачу"
    ОбработкаОбъект.ВыполнитьЗадачу();
КонецПроцедуры

Важный нюанс: Убедитесь, что служба сервера 1С (обычно пользователь usr1cv8) имеет права доступа к папке на диске, где лежит файл. Если вы используете клиент-серверный вариант, путь к файлу должен быть доступен серверу (лучше использовать UNC-пути, например \\ServerName\Folder\file.epf).

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

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

  1. В пользовательском режиме перейдите в Администрирование -> Печатные формы, отчеты и обработки.
  2. Добавьте вашу внешнюю обработку в список.
  3. В карточке обработки выберите команду, которую нужно выполнить.
  4. Для этой команды будет доступна ссылка Указать расписание.

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

Особенности файлового режима

Выясним ситуацию с выполнением заданий в файловой базе. В отличие от клиент-серверного варианта, где задания выполняет менеджер кластера, в файловой базе регламентные задания не запускаются сами по себе. Для их работы должен быть запущен отдельный сеанс пользователя, который будет играть роль «планировщика». В современных версиях платформы часто используется параметр запуска /AllowExecuteScheduledJobs.

Отладка регламентных заданий

Поскольку код выполняется в фоне, обычная точка останова может не сработать. Чтобы отладить процедуру, воспользуемся следующими приемами:

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

← На главную