---
title: Длительные операции
slug: bsp/длительные-операции
---


## ВыполнитьФункцию
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// АПК:142-выкл - Необязательных параметров более 3 для поддержки разных прикладных функций.
// АПК:134-выкл - Количество параметров более 7 для поддержки разных прикладных функций.

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

Пример вызова
```bsl
Результат = ДлительныеОперации.ВыполнитьФункцию(ПараметрыВыполнения, ИмяФункции, Параметр1, );
```
</details>

## ВыполнитьПроцедуру
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// АПК:141-выкл - Первый необязательный параметр перед обязательным выбран
// для сохранения порядка параметров как в функции ВыполнитьФункцию.

// Запустить выполнение процедуры в фоновом задании, если это возможно.
// Вызываемая процедура может быть с произвольным числом параметров, но не более 7.
// Значения передаваемых параметров процедуры, а также возвращаемое значение должны быть сериализуемыми.
// Параметры процедуры не должны быть возвращаемыми.
//
// Не следует использовать эту функцию, если необходимо безусловно запускать фоновое задание.
// Рекомендуется применять совместно с функцией ДлительныеОперацииКлиент.ОжидатьЗавершение,
// если невозможно, тогда для проверки завершения операции использовать функцию ЗаданиеВыполнено.
//
// Параметры:
//
//  ПараметрыВыполнения - см. ДлительныеОперации.ПараметрыВыполненияПроцедуры
//
//  ИмяПроцедуры - Строка - имя экспортной процедуры общего модуля, модуля менеджера объекта
//                          или модуля обработки, которую необходимо выполнить в фоне.
//                          Например, "МойОбщийМодуль.МояПроцедура", "Отчет.ЗагруженныеДанные.Сформировать"
//                          или "Обработка.ЗагрузкаДанных.МодульОбъекта.Загрузить".
//
//  Параметр1 - Произвольный - произвольные параметры вызова процедуры. Количество параметров может быть от 0 до 7.
//  Параметр2 - Произвольный
//  Параметр3 - Произвольный
//  Параметр4 - Произвольный
//  Параметр5 - Произвольный
//  Параметр6 - Произвольный
//  Параметр7 - Произвольный
//
// Возвращаемое значение:
//  Структура - параметры выполнения задания:
//   * Статус               - Строка - "Выполняется", если задание еще не завершилось;
//                                     "Выполнено", если задание было успешно выполнено;
//                                     "Ошибка", если задание завершено с ошибкой;
//                                     "Отменено", если задание отменено пользователем или администратором.
//   * ИдентификаторЗадания - УникальныйИдентификатор - если Статус = "Выполняется", то содержит
//                                     идентификатор запущенного фонового задания.
//                          - Неопределено - если Статус <> "Выполняется" и фоновое задание не запускалось.
//   * ИнформацияОбОшибке    - ИнформацияОбОшибке - если Статус = "Ошибка".
//                           - Неопределено - если Статус <> "Ошибка".
//   * Сообщения - ФиксированныйМассив - если Статус <> "Выполняется", то массив объектов СообщениеПользователю,
//                                      которые были сформированы в фоновом задании.
//   * КраткоеПредставлениеОшибки   - Строка - устарел.
//   * ПодробноеПредставлениеОшибки - Строка - устарел.
//
// Пример:
//  В общем виде процесс запуска и обработки результата длительной операции в модуле формы выглядит следующим образом:
//
//   1) Процедура, которая будет исполняться в фоне, располагается в модуле менеджера объекта или в серверном общем модуле:
//    Процедура ВыполнитьРасчет(Знач МойПараметр1, Знач МойПараметр2) Экспорт
//     ...
//    КонецПроцедуры
//
//   2) Запуск операции на сервере и подключение обработчика ожидания (при необходимости):
//    &НаКлиенте
//    Процедура ВыполнитьРасчет()
//     ДлительнаяОперация = НачатьВыполнениеНаСервере();
//     ОповещениеОЗавершении = Новый ОписаниеОповещения("ОбработатьРезультат", ЭтотОбъект);
//     ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
//     ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, ОповещениеОЗавершении, ПараметрыОжидания);
//    КонецПроцедуры
//
//    &НаСервере
//    Функция НачатьВыполнениеНаСервере()
//     Возврат ДлительныеОперации.ВыполнитьПроцедуру(, "Обработка.МояОбработка.ВыполнитьРасчет",
//      МойПараметр1, МойПараметр2);
//    КонецФункции
//
//   3) Обработка результата длительной операции:
//    &НаКлиенте
//    Процедура ОбработатьРезультат(Результат, ДополнительныеПараметры) Экспорт
//     Если Результат = Неопределено Тогда
//      Возврат;
//     КонецЕсли;
//     Если Результат.Статус = "Ошибка" Тогда
//      СтандартныеПодсистемыКлиент.ВывестиИнформациюОбОшибке(Результат.ИнформацияОбОшибке);
//      Возврат;
//     КонецЕсли;
//     ПриЗавершенииРасчета();
//    КонецПроцедуры
//
//@skip-check method-optional-parameter-before-required
//
Функция ВыполнитьПроцедуру(Знач ПараметрыВыполнения = Неопределено, ИмяПроцедуры, Знач Параметр1 = Неопределено, Экспорт
```

Пример вызова
```bsl
Результат = ДлительныеОперации.ВыполнитьПроцедуру(ПараметрыВыполнения, ИмяПроцедуры, Параметр1, );
```
</details>

## ВыполнитьФункциюВНесколькоПотоков
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// АПК:141-вкл
// АПК:134-вкл
// АПК:142-вкл

// Запустить выполнение функции в многопоточном фоновом задании, если это возможно.
// Вызываемая процедура может быть с произвольным числом параметров, но не более 7.
// Значения передаваемых параметров процедуры, а также возвращаемое значение должны быть сериализуемыми.
// Параметры процедуры не должны быть возвращаемыми.
// Многопоточные длительные операции в неразделенном сеансе не поддерживаются.
//
// Не следует использовать эту функцию, если необходимо безусловно запускать фоновое задание.
// Рекомендуется применять совместно с функцией ДлительныеОперацииКлиент.ОжидатьЗавершение,
// если невозможно, тогда для проверки завершения операции использовать функцию ЗаданиеВыполнено.
//
// Параметры:
//  ИмяФункции - Строка - имя экспортной функции общего модуля, модуля менеджера объекта
//                        или модуля обработки, которую необходимо выполнить в фоне.
//                        Например, "МойОбщийМодуль.МояПроцедура", "Отчеты.ЗагруженныеДанные.Сформировать"
//                        или "Обработки.ЗагрузкаДанных.МодульОбъекта.Загрузить".
//  ПараметрыВыполнения - см. ПараметрыВыполненияФункции
//  НаборПараметровФункции - Соответствие из КлючИЗначение - произвольный набор параметров вызова функции:
//    * Ключ - Произвольный - ключ набора
//    * Значение - Массив - параметры вызова функции. Количество параметров может быть от 0 до 7.
//
// Возвращаемое значение:
//  Структура:
//   * Статус               - Строка - "Выполняется", если задание еще не завершилось;
//                                     "Выполнено", если задание было успешно выполнено;
//                                     "Ошибка", если задание завершено с ошибкой;
//                                     "Отменено", если задание отменено пользователем или администратором.
//   * ИдентификаторЗадания - УникальныйИдентификатор - если Статус = "Выполняется", то содержит
//                                     идентификатор запущенного фонового задания.
//                          - Неопределено - если Статус <> "Выполняется" и фоновое задание не запускалось.
//   * АдресРезультата       - Строка - адрес временного хранилища, в которое будет помещено Соответствие:
//                                      ** Ключ - Произвольный
//                                      ** Значение - см. ВыполнитьФункцию
//   * ИнформацияОбОшибке    - ИнформацияОбОшибке - если Статус = "Ошибка".
//                           - Неопределено - если Статус <> "Ошибка".
//   * Сообщения - ФиксированныйМассив - если Статус <> "Выполняется", то массив объектов СообщениеПользователю,
//                                      которые были сформированы в фоновом задании.
//   * КраткоеПредставлениеОшибки   - Строка - устарел.
//   * ПодробноеПредставлениеОшибки - Строка - устарел.
//
Функция ВыполнитьФункциюВНесколькоПотоков(ИмяФункции, Знач ПараметрыВыполнения, Знач НаборПараметровФункции = Неопределено) Экспорт
```

Пример вызова
```bsl
Результат = ДлительныеОперации.ВыполнитьФункциюВНесколькоПотоков(ИмяФункции, ПараметрыВыполнения, НаборПараметровФункции);
```
</details>

## ВыполнитьПроцедуруВНесколькоПотоков
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Запускает выполнение процедуры в многопоточном фоновом задании, если это возможно.
// Вызываемая процедура может быть с произвольным числом параметров, но не более 7.
// Значения передаваемых параметров процедуры, а также возвращаемое значение должны быть сериализуемыми.
// Параметры процедуры не должны быть возвращаемыми.
// Многопоточные длительные операции в неразделенном сеансе не поддерживаются.
//
// Не следует использовать эту функцию, если необходимо безусловно запускать фоновое задание.
// Рекомендуется применять совместно с функцией ДлительныеОперацииКлиент.ОжидатьЗавершение,
// если невозможно, тогда для проверки завершения операции использовать функцию ЗаданиеВыполнено.
//
// Параметры:
//  ИмяПроцедуры - Строка - имя экспортной процедуры общего модуля, модуля менеджера объекта
//                          или модуля обработки, которую необходимо выполнить в фоне.
//  ПараметрыВыполнения - см. ПараметрыВыполненияПроцедуры
//  НаборПараметровПроцедуры - Соответствие из КлючИЗначение - произвольный набор параметров вызова процедуры:
//    * Ключ - Произвольный - ключ набора
//    * Значение - Массив - параметры вызова процедуры. Количество параметров может быть от 0 до 7.
//
// Возвращаемое значение:
//  Структура:
//   * Статус               - Строка - "Выполняется", если задание еще не завершилось;
//                                     "Выполнено", если задание было успешно выполнено;
//                                     "Ошибка", если задание завершено с ошибкой;
//                                     "Отменено", если задание отменено пользователем или администратором.
//   * ИдентификаторЗадания - УникальныйИдентификатор - если Статус = "Выполняется", то содержит
//                                     идентификатор запущенного фонового задания.
//                          - Неопределено - если Статус <> "Выполняется" и фоновое задание не запускалось.
//   * АдресРезультата       - Строка - адрес временного хранилища, в которое будет помещено Соответствие:
//                                       ** Ключ - Произвольный
//                                       ** Значение - см. ВыполнитьПроцедуру
//   * ИнформацияОбОшибке    - ИнформацияОбОшибке - если Статус = "Ошибка".
//                           - Неопределено - если Статус <> "Ошибка".
//   * Сообщения - ФиксированныйМассив - если Статус <> "Выполняется", то массив объектов СообщениеПользователю,
//                                      которые были сформированы в фоновом задании.
//   * КраткоеПредставлениеОшибки   - Строка - устарел.
//   * ПодробноеПредставлениеОшибки - Строка - устарел.
//
Функция ВыполнитьПроцедуруВНесколькоПотоков(ИмяПроцедуры, Знач ПараметрыВыполнения, Знач НаборПараметровПроцедуры = Неопределено) Экспорт
```

Пример вызова
```bsl
Результат = ДлительныеОперации.ВыполнитьПроцедуруВНесколькоПотоков(ИмяПроцедуры, ПараметрыВыполнения, НаборПараметровПроцедуры);
```
</details>

## ПараметрыВыполненияФункции
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Конструктор коллекции ПараметрыВыполненияФункции для функции ВыполнитьФункцию.
//
// Если ЗапуститьВФоне = Ложь и ЗапуститьНеВФоне = Ложь, то задание будет выполнено в фоне по возможности.
// Запуск с расширениями сеанса выполняется сразу в основном потоке при выполнении любого из следующих условий:
//  * если вызов выполняется в файловой базе во внешнем соединении (в этом режиме фоновые задания не поддерживаются);
//  * если приложение запущено в режиме отладки (параметр /C РежимОтладки) - для упрощения отладки конфигурации;
//  * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя.
//
// Параметры:
//   ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы,
//                               во временное хранилище которой надо поместить результат выполнения процедуры.
//
// Возвращаемое значение:
//   Структура - параметры выполнения длительной операции:
//     * ИдентификаторФормы  - УникальныйИдентификатор - уникальный идентификатор формы,
//                             во временное хранилище которой надо поместить результат выполнения процедуры.
//     * ОжидатьЗавершение   - Неопределено - ждать до момента завершения фонового задания.
//                           - Число - таймаут в секундах ожидания завершения фонового задания.
//                               Если задано 0, то ждать завершения задания не требуется.
//                               По умолчанию - 0.8 секунды, а для низкой скорости соединения - 4.
//     * НаименованиеФоновогоЗадания - Строка - описание фонового задания. По умолчанию - имя процедуры.
//     * КлючФоновогоЗадания - Строка - уникальный ключ активных фоновых заданий с одинаковым именем процедуры,
//                                      чтобы в приложении нельзя было запустить более одного задания одновременно.
//                                      По умолчанию не задан.
//     * АдресРезультата     - Строка - адрес временного хранилища, в которое должен быть помещен результат
//                                      работы процедуры. Если не задан, адрес формируется автоматически.
//     * ЗапуститьВФоне           - Булево - если Истина, то задание будет всегда выполняться в фоне, кроме ситуаций:
//                                  а) если вызов выполняется в файловой базе во внешнем соединении
//                                  (в этом режиме фоновые задания не поддерживаются);
//                                  б) если выполняется функция модуля внешней обработки или внешнего отчета.
//                                  Кроме того, в файловом варианте при наличии ранее запущенных фоновых заданий,
//                                  новое задание становится в очередь и начинает выполняться после завершения предыдущих.
//                                  Если Ложь, то задание будет выполнено в фоне по возможности.
//     * ЗапуститьНеВФоне         - Булево - если Истина, задание всегда будет запускаться непосредственно,
//                                  без использования фонового задания.
//     * БезРасширений            - Булево - если Истина, то фоновое задание будет запущено без подключения
//                                  расширений конфигурации. Имеет приоритет над параметром ЗапуститьНеВФоне.
//     * СРасширениямиБазыДанных  - Булево - если Истина, то фоновое задание будет запущено с последней версией
//                                  расширений конфигурации. Имеет приоритет над параметром ЗапуститьНеВФоне.
//     * ВнешнийОтчетОбработка    - Неопределено - по умолчанию.
//                                - ДвоичныеДанные - когда указано имя метода, которое начинается
//                                    с "ВнешнийОтчет." или "ВнешняяОбработка.".
//                                    Для вызова такого метода требуется право интерактивного открытия
//                                    внешнего отчета или обработки соответственно.
//                                    Внешний отчет или обработка подключаются с защитой от опасных действий.
//     * ПрерватьВыполнениеЕслиОшибка - Булево - если Истина, то при возникновении ошибки в одном из дочерних фоновых
//                                  заданий, выполнение многопоточного фонового задания будет прервано.
//                                  Выполнение уже запущенных дочерних фоновых задания будет отменно.
//                                  Параметр только для функции ВыполнитьФункциюВНесколькоПотоков.
//     * УточнениеОшибки          - Строка - если не пустая строка, тогда для пользователя текст ошибки
//                                   будет уточнен указанным начальным текстом. Пример уточнения:
//                                   НСтр("ru = 'Не удалось очистить адресный классификатор по причине:'")
//
Функция ПараметрыВыполненияФункции(Знач ИдентификаторФормы) Экспорт
```

Пример вызова
```bsl
Результат = ДлительныеОперации.ПараметрыВыполненияФункции(ИдентификаторФормы) 
```
</details>

## ПараметрыВыполненияПроцедуры
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Конструктор коллекции ПараметрыВыполненияПроцедуры для функции ВыполнитьПроцедуру.
//
// Если ЗапуститьВФоне = Ложь и ЗапуститьНеВФоне = Ложь, то задание будет выполнено в фоне по возможности.
// Запуск с расширениями сеанса выполняется сразу в основном потоке при выполнении любого из следующих условий:
//  * если вызов выполняется в файловой базе во внешнем соединении (в этом режиме фоновые задания не поддерживаются);
//  * если приложение запущено в режиме отладки (параметр /C РежимОтладки) - для упрощения отладки конфигурации;
//  * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя.
//
// Возвращаемое значение:
//   Структура - параметры выполнения длительной операции:
//     * ОжидатьЗавершение   - Неопределено - ждать до момента завершения фонового задания.
//                           - Число - таймаут в секундах ожидания завершения фонового задания.
//                               Если задано 0, то ждать завершения задания не требуется.
//                               По умолчанию - 0.8 секунды, а для низкой скорости соединения - 4.
//     * НаименованиеФоновогоЗадания - Строка - описание фонового задания. По умолчанию - имя процедуры.
//     * КлючФоновогоЗадания - Строка - уникальный ключ для активных фоновых заданий, имеющих такое же имя процедуры.
//                                      По умолчанию не задан.
//     * ЗапуститьВФоне           - Булево - если Истина, то задание будет всегда выполняться в фоне, кроме ситуаций:
//                                  а) если вызов выполняется в файловой базе во внешнем соединении
//                                  (в этом режиме фоновые задания не поддерживаются);
//                                  б) если выполняется функция модуля внешней обработки или внешнего отчета.
//                                  Кроме того, в файловом варианте при наличии ранее запущенных фоновых заданий,
//                                  новое задание становится в очередь и начинает выполняться после завершения предыдущих.
//                                  Если Ложь, то задание будет выполнено в фоне по возможности.
//     * ЗапуститьНеВФоне         - Булево - если Истина, задание всегда будет запускаться непосредственно,
//                                  без использования фонового задания.
//     * БезРасширений            - Булево - если Истина, то фоновое задание будет запущено без подключения
//                                  расширений конфигурации. Имеет приоритет над параметром ЗапуститьНеВФоне.
//     * СРасширениямиБазыДанных  - Булево - если Истина, то фоновое задание будет запущено с последней версией
//                                  расширений конфигурации. Имеет приоритет над параметром ЗапуститьНеВФоне.
//     * ВнешнийОтчетОбработка    - Неопределено - по умолчанию.
//                                - ДвоичныеДанные - когда указано имя метода, которое начинается
//                                    с "ВнешнийОтчет." или "ВнешняяОбработка.".
//                                    Для вызова такого метода требуется право интерактивного открытия
//                                    внешнего отчета или обработки соответственно.
//                                    Внешний отчет или обработка подключаются с защитой от опасных действий.
//     * ПрерватьВыполнениеЕслиОшибка - Булево - если Истина, то при возникновении ошибки в одном из дочерних фоновых
//                                  заданий, выполнение многопоточного фонового задания будет прервано.
//                                  Выполнение уже запущенных дочерних фоновых задания будет отменно.
//                                  Параметр только для функции ВыполнитьПроцедуруВНесколькоПотоков.
//     * УточнениеОшибки          - Строка - если не пустая строка, тогда для пользователя текст ошибки
//                                   будет уточнен указанным начальным текстом. Пример уточнения:
//                                   НСтр("ru = 'Не удалось очистить адресный классификатор по причине:'")
//
Функция ПараметрыВыполненияПроцедуры() Экспорт
```

Пример вызова
```bsl
Результат = ДлительныеОперации.ПараметрыВыполненияПроцедуры() 
```
</details>

## ВыполнитьВФоне
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

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

Пример вызова
```bsl
Результат = ДлительныеОперации.ВыполнитьВФоне(ИмяПроцедуры, ПараметрыПроцедуры, ПараметрыВыполнения) 
```
</details>

## ПараметрыВыполненияВФоне
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Возвращает новую структуру для параметра ПараметрыВыполнения функции ВыполнитьВФоне.
//
// Если ЗапуститьВФоне = Ложь и ЗапуститьНеВФоне = Ложь, то задание будет выполнено в фоне по возможности.
// Запуск с расширениями сеанса выполняется сразу в основном потоке при выполнении любого из следующих условий:
//  * если вызов выполняется в файловой базе во внешнем соединении (в этом режиме фоновые задания не поддерживаются);
//  * если приложение запущено в режиме отладки (параметр /C РежимОтладки) - для упрощения отладки конфигурации;
//  * если в файловой ИБ имеются активные фоновые задания - для снижения времени ожидания пользователя.
//
// Параметры:
//   ИдентификаторФормы - УникальныйИдентификатор - уникальный идентификатор формы, во временное хранилище которой
//                                                  необходимо поместить результат выполнения процедуры.
//                      - Неопределено - если временное хранилище не нужно создавать автоматически на время жизни
//                                       формы, а его адрес предполагается задавать явно в свойстве АдресРезультата.
//                                       В таком случае, временное хранилище нужно очищать явно при обработке результата
//                                       длительной операции с помощью метода УдалитьИзВременногоХранилища.
// Возвращаемое значение:
//   Структура:
//     * ИдентификаторФормы      - УникальныйИдентификатор - уникальный идентификатор формы,
//                                 во временное хранилище которой надо поместить результат выполнения процедуры.
//     * ДополнительныйРезультат - Булево     - признак использования дополнительного временного хранилища для передачи
//                                 результата из фонового задания в родительский сеанс. По умолчанию - Ложь.
//     * ОжидатьЗавершение       - Неопределено - ждать до момента завершения фонового задания.
//                               - Число - таймаут в секундах ожидания завершения фонового задания.
//                                   Если задано 0, то ждать завершения задания не требуется.
//                                   По умолчанию - 0.8 секунды, а для низкой скорости соединения - 4.
//     * НаименованиеФоновогоЗадания - Строка - описание фонового задания. По умолчанию - имя процедуры.
//     * КлючФоновогоЗадания      - Строка    - уникальный ключ для активных фоновых заданий, имеющих такое же имя процедуры.
//                                              По умолчанию не задан.
//     * АдресРезультата          - Строка - адрес временного хранилища, в которое должен быть помещен результат
//                                           работы процедуры. Если не задан, адрес формируется автоматически
//                                           на время жизни формы с помощью идентификатора ИдентификаторФормы.
//     * ЗапуститьВФоне           - Булево - если Истина, то задание будет всегда выполняться в фоне, кроме ситуаций:
//                                  а) если вызов выполняется в файловой базе во внешнем соединении
//                                  (в этом режиме фоновые задания не поддерживаются);
//                                  б) если выполняется функция модуля внешней обработки или внешнего отчета.
//                                  Кроме того, в файловом варианте при наличии ранее запущенных фоновых заданий,
//                                  новое задание становится в очередь и начинает выполняться после завершения предыдущих.
//                                  Если Ложь, то задание будет выполнено в фоне по возможности.
//     * ЗапуститьНеВФоне         - Булево - если Истина, задание всегда будет запускаться непосредственно,
//                                  без использования фонового задания.
//     * БезРасширений            - Булево - если Истина, то фоновое задание будет запущено без подключения
//                                  расширений конфигурации. Имеет приоритет над параметром ЗапуститьНеВФоне.
//     * СРасширениямиБазыДанных  - Булево - если Истина, то фоновое задание будет запущено с последней версией
//                                  расширений конфигурации. Имеет приоритет над параметром ЗапуститьНеВФоне.
//     * ВнешнийОтчетОбработка    - Неопределено - по умолчанию.
//                                - ДвоичныеДанные - когда указано имя метода, которое начинается
//                                    с "ВнешнийОтчет." или "ВнешняяОбработка.".
//                                    Для вызова такого метода требуется право интерактивного открытия
//                                    внешнего отчета или обработки соответственно.
//                                    Внешний отчет или обработка подключаются с защитой от опасных действий.
//     * УточнениеОшибки          - Строка - если не пустая строка, тогда для пользователя текст ошибки
//                                   будет уточнен указанным начальным текстом. Пример уточнения:
//                                   НСтр("ru = 'Не удалось очистить адресный классификатор по причине:'")
//
Функция ПараметрыВыполненияВФоне(Знач ИдентификаторФормы = Неопределено) Экспорт
```

Пример вызова
```bsl
Результат = ДлительныеОперации.ПараметрыВыполненияВФоне(ИдентификаторФормы);
```
</details>

## СообщитьПрогресс
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Регистрирует информацию о ходе выполнения длительной операции.
// Не следует использовать для передачи результата работы длительной операции по частям.
//
// Во избежание избыточного потребления памяти и ее утечек при выполнении одной длительной операции
// не следует сообщать прогресс более 100 раз.
//
// Если прогресс сообщается менее чем через 3 сек после предыдущего вызова, то последнее сообщение
// удаляется и заменяется на новое (если используется система взаимодействия, то отправка нового
// сообщения не выполняется, а будет выполнена спустя некоторое время - не быстрее 3 сек).
//
// Перед отправкой прогресса отправляются все сообщения, накопленные в очереди сообщений фонового задания.
//
// Для того чтобы выводить ход выполнения длительной операции для пользователя в стандартной форме ожидания,
// следует установить свойство ВыводитьПрогрессВыполнения в Истина (см. ДлительныеОперацииКлиент.ПараметрыОжидания).
//
// Параметры:
//  Процент                 - Число        - процент выполнения.
//  Текст                   - Строка       - информация о текущей операции.
//  ДополнительныеПараметры - Произвольный - любая дополнительная информация, которую необходимо передать на клиент.
//                                           Значение должно быть простым (сериализуемым в XML-строку).
//                                           Размер данных не должен превышать размер, указанный для параметра Результат
//                                           процедуры СерверныеОповещения.ОтправитьСерверноеОповещение.
//
Процедура СообщитьПрогресс(Знач Процент = Неопределено, Знач Текст = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт
```

Пример вызова
```bsl
ДлительныеОперации.СообщитьПрогресс(Процент, Текст, ДополнительныеПараметры);
```
</details>

## ПрочитатьПрогресс
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Считывает информацию о ходе выполнения длительной операции,
// записанную процедурой ДлительныеОперации.СообщитьПрогресс.
//
// Рекомендуется получать прогресс через обработчик оповещения,
// который подключается с помощью ДлительныеОперацииКлиент.ОжидатьЗавершение.
//
// Параметры:
//   ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания.
//
// Возвращаемое значение:
//  Неопределено - нет информации о ходе выполнения.
//  Структура:
//    * Процент                 - Число  - необязательный. Процент выполнения.
//    * Текст                   - Строка - необязательный. Информация о текущей операции.
//    * ДополнительныеПараметры - Произвольный - необязательный. Любая дополнительная информация.
//
Функция ПрочитатьПрогресс(Знач ИдентификаторЗадания) Экспорт
```

Пример вызова
```bsl
Результат = ДлительныеОперации.ПрочитатьПрогресс(ИдентификаторЗадания) 
```
</details>

## ОтменитьВыполнениеЗадания
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Отменяет выполнение фонового задания по переданному идентификатору.
// При этом если в длительной операции открывались транзакции, то будет произведен откат последней открытой транзакции.
//
// Таким образом, если длительная операция выполняет обработку (запись) данных, то для полной отмены всей операции
// следует выполнять запись в одной транзакции (в таком случае, будет отменена вся транзакция целиком).
// Если же достаточно, чтобы длительная операция была не отменена целиком, а прервана на достигнутом этапе,
// то, напротив, открывать одну длинную транзакцию не требуется.
//
// Параметры:
//  ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания, полученный при запуске
//                           длительной операции. Смотри ДлительныеОперации.ВыполнитьВФоне.
//
Процедура ОтменитьВыполнениеЗадания(Знач ИдентификаторЗадания) Экспорт
```

Пример вызова
```bsl
ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания) 
```
</details>

## ЗаданиеВыполнено
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Проверяет состояние фонового задания по переданному идентификатору.
// При аварийном завершении задания вызывает исключение с текстом ошибки,
// возникшим в нем, и уточнением вида "См. также журнал регистрации".
//
// Параметры:
//  ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания.
//  РасширенныйРезультат - Булево - если Истина, вернуть структуру.
//
// Возвращаемое значение:
//  Булево - состояние выполнения задания.
//  Структура:
//   * Статус      - Строка - "Выполняется", если задание еще не завершилось;
//                            "Выполнено", если задание было успешно выполнено;
//                            "Ошибка", если задание завершено с ошибкой;
//                            "Отменено", если задание отменено пользователем или администратором.
//
//   * ИнформацияОбОшибке - ИнформацияОбОшибке - если Статус = "Ошибка" или Статус = "Отменено".
//                        - Неопределено - если Статус <> "Ошибка" и Статус <> "Отменено".
//
//   * ИдентификаторЗадания - УникальныйИдентификатор - последний идентификатор задания,
//                              если были перезапуски (например, при многопоточной длительной операции)
//                              или тот же идентификатор, что передан в функцию, когда перезапусков не было.
//
//   * Задание - Неопределено   - задание не найдено.
//             - ФоновоеЗадание - когда задание найдено.
//
//   * ТекстОшибки                  - Строка - устарел.
//   * КраткоеПредставлениеОшибки   - Строка - устарел.
//   * ПодробноеПредставлениеОшибки - Строка - устарел.
//
Функция ЗаданиеВыполнено(Знач ИдентификаторЗадания, РасширенныйРезультат = Ложь) Экспорт
```

Пример вызова
```bsl
Результат = ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания, РасширенныйРезультат);
```
</details>

## СообщенияПользователю
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

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

Пример вызова
```bsl
Результат = ДлительныеОперации.СообщенияПользователю(УдалятьПолученные, ИдентификаторЗадания);
```
</details>

## ЗапуститьВыполнениеВФоне
<details style="margin: 1em 0; padding: 0.5em; border: 1px solid #ccc; border-radius: 6px;">

<summary style="font-weight: bold; cursor: pointer;">Описание, пример вызова</summary>

```bsl

// Устарела. Следует использовать ВыполнитьВФоне.
//
// Запускает выполнение процедуры в фоновом задании.
// Является менее функциональным аналогом ВыполнитьВФоне, предусмотрена для обратной совместимости.
//
// Параметры:
//  ИдентификаторФормы     - УникальныйИдентификатор - идентификатор формы,
//                           из которой выполняется запуск длительной операции.
//  ИмяЭкспортнойПроцедуры - Строка - имя экспортной процедуры,
//                           которую необходимо выполнить в фоне.
//  Параметры              - Структура - все необходимые параметры для
//                           выполнения процедуры ИмяЭкспортнойПроцедуры.
//  НаименованиеЗадания    - Строка - наименование фонового задания.
//                           Если не задано, то будет равно ИмяЭкспортнойПроцедуры.
//  ИспользоватьДополнительноеВременноеХранилище - Булево - признак использования
//                           дополнительного временного хранилища для передачи данных
//                           в родительский сеанс из фонового задания. По умолчанию - Ложь.
//
// Возвращаемое значение:
//  Структура              - параметры выполнения задания:
//   * АдресХранилища  - Строка     - адрес временного хранилища, в которое будет
//                                    помещен результат работы задания;
//   * АдресХранилищаДополнительный - Строка - адрес дополнительного временного хранилища,
//                                    в которое будет помещен результат работы задания (доступно только если
//                                    установлен параметр ИспользоватьДополнительноеВременноеХранилище);
//   * ИдентификаторЗадания - УникальныйИдентификатор - уникальный идентификатор запущенного фонового задания;
//                          - Неопределено - если фоновое задание не запускалось;
//   * ЗаданиеВыполнено - Булево - Истина если задание было успешно выполнено за время вызова функции.
//
Функция ЗапуститьВыполнениеВФоне(Знач ИдентификаторФормы, Знач Имя Экспорт
```

Пример вызова
```bsl
Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне(ИдентификаторФормы, ИмяЭкспортнойПроцедуры, Параметры, );
```
</details>

---

© 2024, **ООО 1С-Софт**  
Все права защищены. Эта программа и сопроводительные материалы предоставляются  
в соответствии с условиями лицензии [Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/legalcode).

---
