Основные ограничения
- Регламентные задания не могут “возвращать” результаты в формы - они выполняются в фоновом режиме и не имеют прямой связи с пользовательским интерфейсом
- Нельзя запустить регламентное задание по открытию формы - регламентные задания запускаются по расписанию, а не по событиям форм
- Процесс “форма → регламентное задание → оповещение” технически невозможен
Правильные варианты решения:
Вариант 1: Фоновое задание (рекомендуемый)
Модуль формы:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ЗапуститьФоновоеЗадание();
КонецПроцедуры
&НаКлиенте
Процедура ЗапуститьФоновоеЗадание()
ИдентификаторЗадания = ЗапуститьФоновоеЗаданиеНаСервере();
ОжиданиеВыполнения = Новый ОписаниеОповещения("ПроверитьВыполнениеЗадания", ЭтотОбъект);
ПодключитьОбработчикОжидания(ОжиданиеВыполнения, 1, Ложь);
КонецПроцедуры
&НаСервере
Функция ЗапуститьФоновоеЗаданиеНаСервере()
ПараметрыЗадания = Новый Структура;
ФоновоеЗадание = ФоновыеЗадания.Выполнить("ВыполнитьОбработкуДанных", ПараметрыЗадания);
Возврат ФоновоеЗадание.УникальныйИдентификатор;
КонецФункции
&НаКлиенте
Процедура ПроверитьВыполнениеЗадания()
Результат = ПроверитьВыполнениеЗаданияНаСервере();
Если Результат.Выполнено Тогда
ОтключитьОбработчикОжидания("ПроверитьВыполнениеЗадания");
ПоказатьОповещениеПользователя("Результат обработки", , Результат.ТекстРезультата);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПроверитьВыполнениеЗаданияНаСервере()
Результат = Новый Структура("Выполнено, ТекстРезультата", Ложь, "");
ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);
Если ФоновоеЗадание <> Неопределено И ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда
Результат.Выполнено = Истина;
Результат.ТекстРезультата = ФоновоеЗадание.ПолучитьРезультат();
КонецЕсли;
Возврат Результат;
КонецФункции
Общий модуль (серверный):
Функция ВыполнитьОбработкуДанных(ПараметрыЗадания) Экспорт
// Здесь ваша обработка данных
ТекстРезультата = "НАДПИСЬ";
Возврат ТекстРезультата;
КонецФункции
Вариант 2: Простое серверное выполнение
Если обработка быстрая (до 30 секунд):
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Результат = ВыполнитьОбработкуНаСервере();
ПоказатьОповещениеПользователя("Результат", , Результат);
КонецПроцедуры
&НаСервере
Функция ВыполнитьОбработкуНаСервере()
// Ваша обработка
Возврат "НАДПИСЬ";
КонецФункции
Почему именно так:
- Фоновые задания предназначены для выполнения длительных операций без блокировки интерфейса
- ПоказатьОповещениеПользователя() - правильный способ показа оповещений
- Асинхронная проверка через ОжиданиеВыполнения обеспечивает отзывчивость интерфейса