В практике автоматизации на платформе 1С:Предприятие 8 часто возникает задача автоматического формирования документов по расписанию. Это может быть создание ежедневных отчетов, актов выполненных работ или установка цен. В рамках данной статьи мы разберем, как правильно реализовать программное создание и проведение документа через регламентное задание, а также выясним, почему созданные задания могут не запускаться.
Регламентные задания могут вызывать только экспортные процедуры, расположенные в общих модулях. Рассмотрим ситуацию на примере создания документа УстановкаСкидокНоменклатуры. Первым делом нам необходимо создать или выбрать существующий общий модуль.
Важное требование к общему модулю: так как регламентные задания выполняются на стороне сервера, у общего модуля обязательно должен быть установлен флаг "Сервер". Флаг "Вызов сервера" обычно не требуется, если только процедура не будет вызываться напрямую с клиента, но для работы самого задания критичен именно серверный контекст.
Проанализируем пример кода для создания и записи документа:
Процедура СозданиеДокумента() Экспорт
// Создаем новый объект документа
НовыйДок = Документы.УстановкаСкидокНоменклатуры.СоздатьДокумент();
// Заполняем обязательные реквизиты
НовыйДок.Дата = ТекущаяДата();
// Если нужно просто сохранить черновик:
// НовыйДок.Записать(РежимЗаписиДокумента.Запись);
// Для автоматического проведения используем:
Попытка
НовыйДок.Записать(РежимЗаписиДокумента.Проведение);
Исключение
// Обязательно записываем ошибку в журнал, чтобы понять причину сбоя
ЗаписьЖурналаРегистрации("РегламентноеЗадание.СозданиеДокумента",
УровеньЖурналаРегистрации.Ошибка, , ,
ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
После написания кода перейдем в дерево метаданных (конфигуратор) и создадим новый объект РегламентноеЗадание. В свойствах задания укажем:
ИмяОбщегоМодуля.СозданиеДокумента.Часто программисты сталкиваются с тем, что код написан верно, задание создано, но в Журнале регистрации нет никаких записей о выполнении. Рассмотрим основные причины этой ситуации.
1. Особенности файлового режима базы данных
Если вы работаете в файловой базе (как это часто бывает в конфигурациях типа "Управление торговым предприятием"), регламентные задания не запускаются сами по себе. В отличие от клиент-серверного варианта, где за это отвечает менеджер кластера, в файловом режиме необходим запущенный сеанс 1С, который будет выполнять функции планировщика. В старых конфигурациях для этого нужно либо держать открытой специальную обработку, либо настроить параметр "Выполнять регламентные задания на данном компьютере" в настройках программы.
2. Блокировка заданий в консоли администрирования
В клиент-серверном варианте проверьте настройки информационной базы через Консоль администрирования кластера 1С. Если база была скопирована из рабочей в тестовую, платформа часто автоматически устанавливает флаг "Блокировка регламентных заданий". Пока эта галочка стоит, ни одно задание не запустится.
3. Проблемы с контекстом пользователя (Параметры сеанса)
Регламентное задание выполняется в фоновом режиме. В коде проведения документа часто встречаются обращения к параметрам сеанса, таким как ПараметрыСеанса.ТекущийПользователь. У фонового задания эти параметры могут быть не инициализированы, что приведет к ошибке при попытке записи. Разберем, как этого избежать:
// Пример заполнения обязательных полей для УТП/УПП
НовыйДок.Ответственный = Справочники.Пользователи.НайтиПоНаименованию("Робот");
НовыйДок.Организация = Справочники.Организации.НайтиПоКоду("000000001");
Иногда удобнее вынести логику во внешнюю обработку. В современных типовых конфигурациях (на базе БСП) можно добавить внешнюю обработку в справочник "Дополнительные отчеты и обработки", где прямо в интерфейсе "1С:Предприятие" настроить для неё расписание. Однако в старых конфигурациях (УТП 1.2) лучше придерживаться классического метода через ОбщийМодуль и РегламентноеЗадание в метаданных.
Чтобы оперативно выявлять причины сбоев, воспользуемся следующими приемами:
Проанализировав ситуацию, мы видим, что создание и проведение документов через РегламентныеЗадания — это мощный инструмент автоматизации, требующий, однако, внимательного отношения к серверному контексту и правам доступа. Соблюдая описанные шаги, вы сможете настроить стабильную работу системы без участия оператора.