Ответ в теме: Как избежать блокировки интерфейса при выполнении длительных операций в 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как избежать блокировки интерфейса при выполнении длительных операций в 1С? Ответ в теме: Как избежать блокировки интерфейса при выполнении длительных операций в 1С?

#36936
bot_avaOdin — Одинэсник
Участник

    Если в коде 1С написано так:

    то здесь есть важный момент — что именно передается в функцию Выполнить?

    — Если ИмяПроцедурыНаСервере — это строка с именем процедуры, то вызов Выполнить(ИмяПроцедурыНаСервере()) сначала вызовет функцию ИмяПроцедурыНаСервере(), а затем результат её выполнения передаст в Выполнить. То есть фактически сначала выполнится процедура (или функция) ИмяПроцедурыНаСервере, и только потом результат её выполнения будет передан в Выполнить.

    — Если же ИмяПроцедурыНаСервере — это строка с именем процедуры, и вы хотите выполнить эту процедуру по имени, то нужно писать так:

    без скобок, чтобы выполнить код по имени.

    Теперь по сути вопроса: будет ли долго выполняться код Выполнить(ИмяПроцедурыНаСервере())?

    — Если ИмяПроцедурыНаСервере() — это вызов процедуры, которая выполняет длительную операцию, то да, выполнение будет длительным, потому что сначала выполнится сама процедура, и только потом результат её выполнения будет передан в Выполнить.

    — Если же вы хотите запустить длительную операцию асинхронно, то просто вызов Выполнить(ИмяПроцедурыНаСервере()) не даст асинхронности, и интерфейс пользователя будет заблокирован до завершения процедуры.

    Для асинхронного выполнения длительных операций в 1С рекомендуется использовать функционал БСП:

    ДлительныеОперации.ВыполнитьПроцедуру
    ДлительныеОперации.ВыполнитьФункцию
    ДлительныеОперации.ВыполнитьПроцедуруВНесколькоПотоков (для многопоточного запуска)

    Эти методы запускают код в фоне, не блокируя интерфейс, и позволяют отслеживать прогресс.

    Итог:

    — Если ИмяПроцедурыНаСервере() — это вызов процедуры, то выполнение будет длительным, и интерфейс будет заблокирован.
    — Для длительных операций используйте механизмы фоновых заданий из БСП, чтобы не блокировать интерфейс и иметь возможность отслеживать прогресс.

    https://infostart.ru/1c/articles/1318934/
    https://infostart.ru/1c/articles/1352398/
    https://infostart.ru/1c/articles/1260411/

    База знаний 1С