Как программно создавать и проводить документы с помощью регламентных заданий в 1С:Предприятие 8

Программист 1С v8.3 (Обычные формы) Управленческий учет
← На главную

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

Шаг 1. Разработка процедуры в общем модуле

Регламентные задания могут вызывать только экспортные процедуры, расположенные в общих модулях. Рассмотрим ситуацию на примере создания документа УстановкаСкидокНоменклатуры. Первым делом нам необходимо создать или выбрать существующий общий модуль.

Важное требование к общему модулю: так как регламентные задания выполняются на стороне сервера, у общего модуля обязательно должен быть установлен флаг "Сервер". Флаг "Вызов сервера" обычно не требуется, если только процедура не будет вызываться напрямую с клиента, но для работы самого задания критичен именно серверный контекст.

Проанализируем пример кода для создания и записи документа:


Процедура СозданиеДокумента() Экспорт 
    // Создаем новый объект документа
    НовыйДок = Документы.УстановкаСкидокНоменклатуры.СоздатьДокумент();
    
    // Заполняем обязательные реквизиты
    НовыйДок.Дата = ТекущаяДата();
    
    // Если нужно просто сохранить черновик:
    // НовыйДок.Записать(РежимЗаписиДокумента.Запись);
    
    // Для автоматического проведения используем:
    Попытка
        НовыйДок.Записать(РежимЗаписиДокумента.Проведение);
    Исключение
        // Обязательно записываем ошибку в журнал, чтобы понять причину сбоя
        ЗаписьЖурналаРегистрации("РегламентноеЗадание.СозданиеДокумента",
            УровеньЖурналаРегистрации.Ошибка, , , 
            ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Шаг 2. Настройка регламентного задания в Конфигураторе

После написания кода перейдем в дерево метаданных (конфигуратор) и создадим новый объект РегламентноеЗадание. В свойствах задания укажем:

Шаг 3. Почему задание не выполняется: диагностика и решение

Часто программисты сталкиваются с тем, что код написан верно, задание создано, но в Журнале регистрации нет никаких записей о выполнении. Рассмотрим основные причины этой ситуации.

1. Особенности файлового режима базы данных

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

2. Блокировка заданий в консоли администрирования

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

3. Проблемы с контекстом пользователя (Параметры сеанса)

Регламентное задание выполняется в фоновом режиме. В коде проведения документа часто встречаются обращения к параметрам сеанса, таким как ПараметрыСеанса.ТекущийПользователь. У фонового задания эти параметры могут быть не инициализированы, что приведет к ошибке при попытке записи. Разберем, как этого избежать:


// Пример заполнения обязательных полей для УТП/УПП
НовыйДок.Ответственный = Справочники.Пользователи.НайтиПоНаименованию("Робот");
НовыйДок.Организация = Справочники.Организации.НайтиПоКоду("000000001");

Шаг 4. Работа с внешними обработками

Иногда удобнее вынести логику во внешнюю обработку. В современных типовых конфигурациях (на базе БСП) можно добавить внешнюю обработку в справочник "Дополнительные отчеты и обработки", где прямо в интерфейсе "1С:Предприятие" настроить для неё расписание. Однако в старых конфигурациях (УТП 1.2) лучше придерживаться классического метода через ОбщийМодуль и РегламентноеЗадание в метаданных.

Рекомендации по отладке

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

  1. Консоль регламентных заданий: Используйте внешнюю обработку "Консоль регламентных заданий" (есть на дисках ИТС). Она позволяет увидеть точное время последнего запуска и текст ошибки, если задание завершилось аварийно.
  2. Логирование через Попытка...Исключение: Всегда оборачивайте код создания документа в блок обработки исключений. В регламентных заданиях это единственный способ понять, почему документ не провелся (например, из-за нехватки остатков на складе или незаполненного обязательного реквизита).
  3. Ручной запуск: Перед включением расписания попробуйте вызвать процедуру общего модуля через простую внешнюю обработку, чтобы убедиться, что у сервера хватает прав на создание объектов.

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

← На главную