Как настроить запуск внешней обработки по расписанию и интерактивное открытие её формы?

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

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

Рассмотрим, как правильно зарегистрировать такую обработку в справочнике «Дополнительные отчеты и обработки» и разделить логику между фоновым заданием и интерактивным интерфейсом.

Шаг 1. Регистрация двух команд в СведенияОВнешнейОбработке

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

Разберем по шагам структуру функции регистрации. Мы добавим команду с типом запуска ВызовСерверногоМетода для регламентного задания и команду с типом запуска ОткрытиеФормы для работы пользователя:


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

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


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

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

Шаг 2. Реализация серверного метода обработки

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


Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды = Неопределено) Экспорт
    Если ИдентификаторКоманды = "АвтоОтправкаДДС" Тогда
        УстановитьПривилегированныйРежим(Истина);
        ВыполнитьВсюОбработкуАвтоматически();
        УстановитьПривилегированныйРежим(Ложь);
    КонецЕсли;
КонецПроцедуры

Процедура ВыполнитьВсюОбработкуАвтоматически()
    // Алгоритм автоматической работы на сервере.
    // Важно: здесь нельзя использовать интерактивные элементы (Предупреждение, Вопрос, ОткрытьФорму)
    // и нельзя обращаться к реквизитам формы!
КонецПроцедуры

Важные архитектурные нюансы

При совмещении серверного фонового и клиентского интерактивного режимов важно учитывать особенности контекстов выполнения в 1С:

  1. Изоляция контекста фонового задания: При выполнении процедуры ВыполнитьВсюОбработкуАвтоматически код работает на сервере в рамках фонового задания. У него нет формы и интерфейса. Если в интерактивном режиме вы использовали табличную часть формы для отображения данных пользователю, то в фоновом режиме вам необходимо заменить её логику на работу со структурами данных в памяти (например, использовать ТаблицаЗначений или Массив структур).
  2. Безопасный режим и сетевые запросы: По умолчанию БСП регистрирует внешние обработки в безопасном режиме. В безопасном режиме запрещена отправка писем по протоколу SMTP, HTTP-запросы и работа с файловой системой сервера. Чтобы автоматическая рассылка работала без сбоев, обязательно укажите в параметрах регистрации: ПараметрыРегистрации.БезопасныйРежим = Ложь, либо настройте профили безопасности в информационной базе.
  3. Передача и сохранение настроек: Чтобы регламентное задание знало, по каким параметрам делать рассылку (которые пользователь настроил в форме интерактивно), используйте стандартный механизм БСП. Настройки можно сохранять в справочник «Дополнительные отчеты и обработки» в поле настройки конкретного расписания. При запуске команды ссылка на элемент справочника будет передана в параметре ПараметрыВыполненияКоманды.ДополнительнаяОбработкаСсылка. Вы сможете прочитать сохраненные настройки на сервере и использовать их в алгоритме.

Шаг 3. Подключение и тестирование

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

  1. Перейдите в раздел НСИ и администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки.
  2. Обновите вашу обработку из файла.
  3. В таблице команд вы увидите две строки. Для первой строки (автоматической рассылки) настройте расписание выполнения. Для второй строки настройте размещение в разделах интерфейса программы (например, в разделе «Банк и касса» или «Продажи») и укажите пользователей, которым она будет доступна.
  4. Теперь пользователи смогут открывать полноценную интерактивную форму прямо из разделов интерфейса 1С, а регламентное задание будет каждую ночь без их участия запускать серверный алгоритм отправки.
← На главную