Обработка по расписанию: три рабочих способа поставить её на автозапуск в 1С 8.3
Содержание
Чтобы запустить обработку в 1С регламентным заданием без программирования конфигурации, зарегистрируйте её как дополнительную обработку: Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. В карточке у серверной команды обработки задаётся расписание, и дальше она выполняется сама. Работает в типовых конфигурациях на БСП: Бухгалтерии 3.0, ЗУП 3.1, УТ 11, КА и ERP.
Типичная ситуация: каждое утро кто-то вручную открывает обработку выгрузки остатков на сайт или пересчёта цен. Человек заболел — выгрузка не ушла. Автоматизация через регламентное задание снимает эту зависимость, но обработка должна быть написана под фоновый запуск. Обычная «форменная» обработка с кнопкой «Выполнить» по расписанию не заработает.
Подготовка: режим базы, права и код обработки
Прежде чем настраивать регламентные задания, проверьте четыре вещи. Половина жалоб «задание не запускается» снимается на этом этапе.
Режим работы базы
| Режим | Как выполняются регламентные задания | Что учесть |
|---|---|---|
| Клиент-серверный | Сервер 1С запускает их сам, пользователи не нужны | Проверить флажок блокировки в консоли кластера |
| Файловый | Только пока открыт хотя бы один сеанс программы | Ночью при выключенных компьютерах ничего не выполнится |
Для файловой базы есть обходной путь: держать постоянно открытый сеанс на отдельном компьютере или запускать обработку планировщиком Windows (об этом ниже).
Права
- 🔑 Регистрировать дополнительные обработки может пользователь с полными правами или с ролью на добавление и изменение дополнительных отчётов и обработок.
- 🛠 Для своего задания в конфигурации или расширении нужен доступ в Конфигуратор.
- 🖥 Для снятия блокировки в клиент-серверной базе нужны права администратора кластера.
Код самой обработки
Регламентное задание выполняется на сервере, в фоне, без окна. Поэтому в обработке не должно быть:
- 🚫 открытия форм, вопросов и предупреждений пользователю;
- 🚫 диалога выбора файла — путь задаётся константой или настройкой;
- 🚫 клиентских методов и обращений к локальному диску пользователя.
Путь к файлам (выгрузка, обмен, epf) должен быть доступен с сервера 1С, а не с вашего компьютера. Служба сервера работает под своей учётной записью, обычно USR1CV8. Если файл лежит на сетевой папке, этой учётной записи нужны права на чтение и запись.
Где в 1С настраиваются регламентные задания
Интерфейс настройки разнесён по двум местам, и это путает.
Список всех заданий базы. Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания. Здесь видно все задания конфигурации: обновление курсов валют, классификаторов, полнотекстового поиска и другие. Каждое можно включить, выключить, запустить вручную, поменять расписание и пользователя.
Задания для дополнительных обработок. Расписание внешней обработки задаётся не в общем списке, а в её карточке в справочнике «Дополнительные отчеты и обработки». Платформа выполняет такие обработки через одно служебное задание БСП, которое перебирает зарегистрированные команды с расписанием.
Если в разделе «Администрирование» нет пункта «Дополнительные отчеты и обработки», откройте Администрирование → Печатные формы, отчеты и обработки и включите флажок «Дополнительные отчеты и обработки». Ссылка появится сразу.
Способ 1. Запуск обработки регламентным заданием через «Дополнительные обработки»
Это основной путь для типовых конфигураций. Конфигурация остаётся на поддержке, обновления ставятся без сравнения и объединения.
Что должно быть в модуле объекта обработки
Обработка регистрируется, только если в модуле объекта есть экспортная функция СведенияОВнешнейОбработке. Для запуска по расписанию вид обработки — «Дополнительная обработка», тип команды — вызов серверного метода.
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("3.1.5.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = "Выгрузка остатков на сайт";
Команда.Идентификатор = "ВыгрузкаОстатков";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
Команда.ПоказыватьОповещение = Ложь;
Возврат ПараметрыРегистрации;
КонецФункции
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
Если ИдентификаторКоманды = "ВыгрузкаОстатков" Тогда
ВыгрузитьОстатки();
КонецЕсли;
КонецПроцедуры
Процедура ВыполнитьКоманду — точка входа. Именно её вызывает регламентное задание. Вся полезная работа идёт в ВыгрузитьОстатки() или в любой другой серверной процедуре модуля.
БезопасныйРежим = Ложь нужен, если обработка пишет файлы, ходит в интернет или работает с COM. При загрузке программа запросит у администратора подтверждение таких разрешений. Ставьте небезопасный режим только обработкам, код которых вы видели сами.
Регистрация и параметры запуска
- Откройте
Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. - Нажмите «Добавить из файла…» и выберите файл
.epf. Подтвердите предупреждение о безопасности. - В карточке проверьте вид — «Дополнительная обработка» — и публикацию «Используется».
- На вкладке «Команды» найдите строку вашей команды. В колонке «Расписание» стоит «Не задано».
- Дважды щёлкните по этой ячейке — откроется окно расписания. Настройте его (см. раздел о расписании ниже).
- Включите флажок использования расписания в той же строке, если он не включился сам.
- Нажмите «Записать и закрыть».
Расписание можно задать только у команд с типом «Вызов серверного метода». У команд, открывающих форму, колонка «Расписание» недоступна. Это первая подсказка, если ячейка не нажимается.
Способ 2. Своё регламентное задание в расширении или конфигурации
Подходит, когда обработка встроена в конфигурацию, нужен отдельный пункт в общем списке заданий или БСП в базе нет. Дорабатывать типовую конфигурацию напрямую не стоит — делайте в расширении, тогда поддержка не снимается.
- В Конфигураторе откройте расширение (или создайте новое) и добавьте общий модуль с флажком «Сервер». Флажок «Глобальный» не ставьте.
- В модуле напишите экспортную процедуру — это обработчик задания.
- В ветке «Общие → Регламентные задания» добавьте новое задание.
- В свойстве «Имя метода» выберите процедуру из модуля.
- Включите «Предопределенное» и «Использование», задайте расписание.
- При необходимости укажите «Количество повторов при аварийном завершении» и «Интервал повтора при аварийном завершении» (в секундах).
- Обновите конфигурацию базы данных расширения (F7).
Пример обработчика, который запускает внешнюю обработку из файла:
Процедура ВыгрузкаОстатковПоРасписанию() Экспорт
ПутьКФайлу = "\\srv-files\obmen\ВыгрузкаОстатков.epf";
Попытка
Обработка = ВнешниеОбработки.Создать(ПутьКФайлу, Ложь);
Обработка.ВыгрузитьОстатки();
ЗаписьЖурналаРегистрации("ВыгрузкаОстатков", УровеньЖурналаРегистрации.Информация,,,
"Выгрузка выполнена");
Исключение
ЗаписьЖурналаРегистрации("ВыгрузкаОстатков", УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Второй параметр Ложь отключает безопасный режим для созданной обработки. Строка ВызватьИсключение нужна, чтобы задание завершилось со статусом ошибки, а не «успешно», и сработали повторы.
В конфигурациях на БСП первой строкой обработчика принято вызывать ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания(Метаданные.РегламентныеЗадания.<ИмяЗадания>). Метод проверяет, можно ли выполнять задание сейчас: не идёт ли обновление, не заблокированы ли задания.
Какой способ выбрать
| Способ | Когда подходит | Риски |
|---|---|---|
| Дополнительная обработка БСП | Типовая конфигурация, нет желания трогать метаданные | Обработка должна поддерживать регистрацию БСП |
| Своё задание в расширении | Нужен контроль над повторами и пользователем, БСП нет | Расширение нужно проверять после обновлений конфигурации |
| Задание в основной конфигурации | Своя, нетиповая база | Снятие с поддержки типовой |
| Планировщик Windows | Файловая база, нет доступа в Конфигуратор | Нужна лицензия на сеанс и открытый пароль в командной строке |
Как задать расписание запуска обработки
Окно расписания одинаковое во всех способах. В нём четыре вкладки.
- 📅 Общее — дата начала и окончания, «Повторять каждые N дней».
- 🕗 Дневное — время начала и окончания, «Повторять через N секунд», пауза между запусками, время, к которому задание должно завершиться.
- 📆 Недельное — дни недели.
- 🗓 Месячное — месяцы, день месяца или день недели в месяце (например, последняя пятница).
Примеры расписаний:
| Задача | Как настроить |
|---|---|
| Выгрузка остатков каждые 15 минут в рабочее время | Дневное: начало 08:00, окончание 20:00, повторять через 900 с; Недельное: пн–пт |
| Ночной пересчёт цен | Дневное: начало 02:00, повторять каждый 1 день |
| Закрытие месяца в первый рабочий день | Месячное: 1-е число, начало 06:00 |
| Отчёт руководителю по понедельникам | Недельное: только понедельник, начало 07:30 |
Под окном видна строка-расшифровка вроде «каждый день; с 2:00:00 один раз в день». Читайте её перед сохранением — так проще поймать ошибку в настройке.
Если обработка работает 20 минут, а интервал повтора 10 минут, новый запуск не стартует, пока не закончился предыдущий: платформа не выполняет два экземпляра одного регламентного задания одновременно. Фактическая частота будет реже, чем в расписании.
Для тяжёлых обработок вроде закрытия месяца ставьте ночное время. Они нагружают сервер и ставят блокировки, а днём это мешает пользователям.
Как проверить, что обработка отработала по расписанию
Список фоновых заданий
Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания, вкладка с фоновыми заданиями. Каждый запуск регламентного задания здесь — отдельная строка.
| Состояние | Что значит |
|---|---|
| Активно | Обработка выполняется прямо сейчас |
| Завершено | Отработала без исключений |
| Завершено аварийно | Упала с ошибкой — откройте строку, там текст |
| Отменено | Остановлена вручную или при завершении сеанса |
Сообщения, которые обработка выводит через Сообщить() или СообщениеПользователю, в фоне никуда не показываются. Их видно в карточке фонового задания — удобный способ оставить себе протокол без доработок.
Журнал регистрации
Администрирование → Обслуживание → Журнал регистрации. Отберите события фоновых и регламентных заданий за нужный период. Если в обработке есть ЗаписьЖурналаРегистрации со своим именем события, как в примере выше, фильтруйте по нему — это самый быстрый способ найти конкретный запуск.
Для критичных выгрузок одного журнала мало: никто не смотрит его каждый день. Добавьте в обработку письмо ответственному при ошибке или запись в регистр, который выводится на начальную страницу.
Почему регламентное задание не запускает обработку
Ещё одна частая причина — пользователь задания. В карточке регламентного задания укажите отдельного пользователя («Робот» или похожего) с нужными правами. Если сотрудник, под которым шло задание, уволился и его запись отключили, задание начнёт падать.
Снятие блокировки регламентных заданий на копии базы опасно: тестовая база начнёт выгружать данные на сайт, отправлять письма и обмениваться с рабочей. Снимайте блокировку только на рабочей базе или отключите в копии все обмены заранее.
Альтернатива: запуск обработки планировщиком Windows
Если база файловая или доступа к Конфигуратору нет, обработку можно запускать параметром командной строки /Execute. Программа стартует, открывает указанную обработку и выполняет её.
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\Bases\Torg" /N"Робот" /P"пароль" /Execute"D:\Obrabotki\VygruzkaOstatkov.epf" /DisableStartupMessages
Для клиент-серверной базы вместо /F"путь" используется /S"сервер\имябазы". Задачу создают в «Планировщике заданий» Windows с нужным временем.
Обработка для такого запуска пишется иначе: основная работа выполняется при открытии формы, в конце вызывается ЗавершитьРаботуСистемы(Ложь). Иначе окно программы останется висеть, а сеанс займёт лицензию.
Пароль в командной строке виден всем, у кого есть доступ к планировщику. Дайте пользователю «Робот» минимальные права, нужные только этой обработке.