Как настроить автоматический запуск внешней обработки по расписанию в 1С?

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

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

Рассмотрим подробнее весь процесс адаптации и настройки внешней обработки по шагам: от рефакторинга кода до отладки фонового выполнения на сервере.

Шаг 1. Перенос бизнес-логики в модуль объекта

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

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

Шаг 2. Подготовка программного интерфейса (API) для БСП

Чтобы система БСП смогла распознать нашу обработку и предоставить интерфейс для настройки расписания, в модуле объекта необходимо разместить экспортную функцию СведенияОВнешнейОбработке(). Данная функция описывает свойства нашей обработки и регистрирует команду выполнения.

Разберем пример кода, который регистрирует внешнюю обработку:


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

Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
    Возврат Команды;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры

Важный нюанс: В параметрах регистрации мы устанавливаем свойство БезопасныйРежим = Ложь. Это необходимо, так как в безопасном режиме платформа 1С блокирует работу с внешними интернет-ресурсами и файловой системой, что сделает невозможным отправку электронных писем по SMTP-протоколу.

Шаг 3. Реализация точки входа

Когда регламентное задание сработает по расписанию, БСП вызовет предопределенную экспортную процедуру ВыполнитьКоманду в модуле объекта обработки. Именно здесь мы должны прописать последовательность вызова наших методов.


Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды = Неопределено) Экспорт
    Если ИдентификаторКоманды = "ЗапускРассылки" Тогда
        ВыполнитьЗаполнениеИОтправку();
    КонецЕсли;
КонецПроцедуры

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

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

Шаг 4. Настройка регламентного задания в пользовательском режиме

После подготовки кода обработки выполним ее интеграцию в информационную базу:

  1. Откройте конфигурацию 1С в режиме "1С:Предприятие".
  2. Перейдите в раздел Администрирование -> Печатные формы, отчеты и обработки -> Дополнительные отчеты и обработки.
  3. Нажмите кнопку Добавить из файла... и укажите вашу внешнюю обработку.
  4. В открывшейся карточке регистрации выберите созданную команду выполнения.
  5. В колонке "Расписание" нажмите на ссылку для настройки временных параметров.
  6. Установите требуемый интервал (например, каждый день, каждые 60 секунд для тестов или в определенные часы).
  7. Запишите и сохраните изменения. На этом этапе БСП автоматически сгенерирует новое регламентное задание в системе.

Шаг 5. Отладка фонового выполнения

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

  1. Убедитесь, что сервер 1С запущен с ключом отладки -debug.
  2. В Конфигураторе перейдите в меню Отладка -> Подключение... -> Автоматическое подключение и установите галочку напротив пункта Фоновые задания.
  3. Установите точку останова в модуле объекта внешней обработки внутри процедуры ВыполнитьКоманду.
  4. В режиме "1С:Предприятие" откройте обработку "Регламентные и фоновые задания" (или перейдите к списку фоновых заданий через администрирование), найдите созданное регламентное задание для вашей обработки и нажмите кнопку Выполнить сейчас. Отладчик автоматически перехватит выполнение кода.

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

← На главную