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

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

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #36935
      Фото аватараOdineski
      Участник

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

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

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

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

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

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

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

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

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

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

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

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

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

          Итог:

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

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

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С