Загрузка...

обратиться в техподдержку

Как запустить расчет в фоновом задании с выводом на форму

Служба заботы
15 августа 2025

Основные ограничения

  1. Регламентные задания не могут “возвращать” результаты в формы - они выполняются в фоновом режиме и не имеют прямой связи с пользовательским интерфейсом
  2. Нельзя запустить регламентное задание по открытию формы - регламентные задания запускаются по расписанию, а не по событиям форм
  3. Процесс “форма → регламентное задание → оповещение” технически невозможен

Правильные варианты решения:

Вариант 1: Фоновое задание (рекомендуемый)

Модуль формы:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ЗапуститьФоновоеЗадание();
КонецПроцедуры

&НаКлиенте
Процедура ЗапуститьФоновоеЗадание()
    ИдентификаторЗадания = ЗапуститьФоновоеЗаданиеНаСервере();
    ОжиданиеВыполнения = Новый ОписаниеОповещения("ПроверитьВыполнениеЗадания", ЭтотОбъект);
    ПодключитьОбработчикОжидания(ОжиданиеВыполнения, 1, Ложь);
КонецПроцедуры

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

&НаКлиенте
Процедура ПроверитьВыполнениеЗадания()
    Результат = ПроверитьВыполнениеЗаданияНаСервере();
    
    Если Результат.Выполнено Тогда
        ОтключитьОбработчикОжидания("ПроверитьВыполнениеЗадания");
        ПоказатьОповещениеПользователя("Результат обработки", , Результат.ТекстРезультата);
    КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ПроверитьВыполнениеЗаданияНаСервере()
    Результат = Новый Структура("Выполнено, ТекстРезультата", Ложь, "");
    
    ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания);
    
    Если ФоновоеЗадание <> Неопределено И ФоновоеЗадание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда
        Результат.Выполнено = Истина;
        Результат.ТекстРезультата = ФоновоеЗадание.ПолучитьРезультат();
    КонецЕсли;
    
    Возврат Результат;
КонецФункции

Общий модуль (серверный):

Функция ВыполнитьОбработкуДанных(ПараметрыЗадания) Экспорт
    // Здесь ваша обработка данных
    ТекстРезультата = "НАДПИСЬ";
    Возврат ТекстРезультата;
КонецФункции

Вариант 2: Простое серверное выполнение

Если обработка быстрая (до 30 секунд):

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Результат = ВыполнитьОбработкуНаСервере();
    ПоказатьОповещениеПользователя("Результат", , Результат);
КонецПроцедуры

&НаСервере
Функция ВыполнитьОбработкуНаСервере()
    // Ваша обработка
    Возврат "НАДПИСЬ";
КонецФункции

Почему именно так:

  1. Фоновые задания предназначены для выполнения длительных операций без блокировки интерфейса
  2. ПоказатьОповещениеПользователя() - правильный способ показа оповещений
  3. Асинхронная проверка через ОжиданиеВыполнения обеспечивает отзывчивость интерфейса

Нужна помощь?

Если у Вас возникли трудности и Вы не можете справиться самостоятельно, наши специалисты готовы оказать удаленную помощь.

Эту и другие технические статьи написали наши программисты 1С и получили за них премии. Если вы тоже работаете с 1С и любите делиться опытом, приходите разработчиком в МИТ

заполните, пожалуйста
укажите Ваш e-mail
укажите Ваш номер телефона для связи