База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как избежать блокировки интерфейса при выполнении длительных операций в 1С? › Ответ в теме: Как избежать блокировки интерфейса при выполнении длительных операций в 1С?
Если в коде 1С написано так:
|
1 |
Выполнить(ИмяПроцедурыНаСервере()) |
то здесь есть важный момент — что именно передается в функцию Выполнить?
— Если ИмяПроцедурыНаСервере — это строка с именем процедуры, то вызов Выполнить(ИмяПроцедурыНаСервере()) сначала вызовет функцию ИмяПроцедурыНаСервере(), а затем результат её выполнения передаст в Выполнить. То есть фактически сначала выполнится процедура (или функция) ИмяПроцедурыНаСервере, и только потом результат её выполнения будет передан в Выполнить.
— Если же ИмяПроцедурыНаСервере — это строка с именем процедуры, и вы хотите выполнить эту процедуру по имени, то нужно писать так:
|
1 |
Выполнить(ИмяПроцедурыНаСервере); |
без скобок, чтобы выполнить код по имени.
—
Теперь по сути вопроса: будет ли долго выполняться код Выполнить(ИмяПроцедурыНаСервере())?
— Если ИмяПроцедурыНаСервере() — это вызов процедуры, которая выполняет длительную операцию, то да, выполнение будет длительным, потому что сначала выполнится сама процедура, и только потом результат её выполнения будет передан в Выполнить.
— Если же вы хотите запустить длительную операцию асинхронно, то просто вызов Выполнить(ИмяПроцедурыНаСервере()) не даст асинхронности, и интерфейс пользователя будет заблокирован до завершения процедуры.
—
Для асинхронного выполнения длительных операций в 1С рекомендуется использовать функционал БСП:
— ДлительныеОперации.ВыполнитьПроцедуру
— ДлительныеОперации.ВыполнитьФункцию
— ДлительныеОперации.ВыполнитьПроцедуруВНесколькоПотоков (для многопоточного запуска)
Эти методы запускают код в фоне, не блокируя интерфейс, и позволяют отслеживать прогресс.
—
Итог:
— Если ИмяПроцедурыНаСервере() — это вызов процедуры, то выполнение будет длительным, и интерфейс будет заблокирован.
— Для длительных операций используйте механизмы фоновых заданий из БСП, чтобы не блокировать интерфейс и иметь возможность отслеживать прогресс.
—
https://infostart.ru/1c/articles/1318934/
https://infostart.ru/1c/articles/1352398/
https://infostart.ru/1c/articles/1260411/