Skip to content

Длительные операции

ВыполнитьФункцию

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

Пример вызова

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

ВыполнитьПроцедуру

Описание, пример вызова
// АПК: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 = Неопределено, Экспорт

Пример вызова

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

ВыполнитьФункциюВНесколькоПотоков

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

Пример вызова

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

ВыполнитьПроцедуруВНесколькоПотоков

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

Пример вызова

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

ПараметрыВыполненияФункции

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

Пример вызова

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

ПараметрыВыполненияПроцедуры

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

Пример вызова

Результат = ДлительныеОперации.ПараметрыВыполненияПроцедуры()

ВыполнитьВФоне

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

Пример вызова

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

ПараметрыВыполненияВФоне

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

Пример вызова

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

СообщитьПрогресс

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

Пример вызова

ДлительныеОперации.СообщитьПрогресс(Процент, Текст, ДополнительныеПараметры);

ПрочитатьПрогресс

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

Пример вызова

Результат = ДлительныеОперации.ПрочитатьПрогресс(ИдентификаторЗадания)

ОтменитьВыполнениеЗадания

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

Пример вызова

ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания)

ЗаданиеВыполнено

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

Пример вызова

Результат = ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания, РасширенныйРезультат);

СообщенияПользователю

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

Пример вызова

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

ЗапуститьВыполнениеВФоне

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

Пример вызова

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

© 2024, ООО 1С-Софт
Все права защищены. Эта программа и сопроводительные материалы предоставляются
в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0).