Является ли переписывание кода с Вопрос на ПоказатьВопрос переходом к асинхронному программированию?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе разработки на платформе 1С:Предприятие 8.3 многие разработчики сталкиваются с необходимостью замены привычных синхронных методов, таких как Вопрос(), на их асинхронные аналоги, например, ПоказатьВопрос(). Давайте разберем, почему это происходит, является ли это «маркетинговым ходом» или реальной необходимостью, и что на самом деле меняется в архитектуре вашего приложения.

Понимание разницы: синхронный vs асинхронный вызов

Чтобы осознать суть изменений, рассмотрим, как ведут себя эти два метода в контексте исполнения программного кода:

  1. Синхронный подход (Вопрос): Когда исполнение программы достигает этой строки, весь поток выполнения полностью блокируется. Приложение «замирает», интерфейс перестает реагировать на действия пользователя до тех пор, пока не будет получен ответ в диалоговом окне. Весь код, который идет после этой строки, ожидает завершения диалога.
  2. Асинхронный подход (ПоказатьВопрос): При вызове этого метода выполнение кода не останавливается. Платформа отправляет команду на отрисовку окна и мгновенно переходит к следующей строке кода. Вся логика, которая должна сработать после получения ответа от пользователя, переносится в отдельную функцию-обработчик (callback).

Разберем на примерах

Посмотрим на классический пример использования синхронного метода, который привычен многим разработчикам:


// Пример старого кода
Ответ = Вопрос("Вы уверены?", РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
    ВыполнитьДействие();
КонецЕсли;

В этом случае код выглядит последовательным и простым для чтения. Однако, при работе в веб-клиенте или тонком клиенте, такой подход блокирует поток, что недопустимо для современных браузерных интерфейсов. Теперь разберем асинхронный вариант:


// Пример нового кода
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВопроса", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, "Вы уверены?", РежимДиалогаВопрос.ДаНет);

&НаКлиенте
Процедура ПослеВопроса(Результат, ДополнительныеПараметры) Экспорт
    Если Результат = КодВозвратаДиалога.Да Тогда
        ВыполнитьДействие();
    КонецЕсли;
КонецПроцедуры

Здесь мы видим использование объекта ОписаниеОповещения. Основная процедура завершает свою работу, не дожидаясь ответа пользователя, а управление передается в указанную процедуру ПослеВопроса только после того, как пользователь нажмет кнопку в окне.

Почему это техническая необходимость, а не маркетинг

Часто возникает вопрос: является ли это полноценным асинхронным программированием? С точки зрения архитектуры платформы — безусловно, да. 1С адаптирует свой код под событийную модель (event-driven), которая принята в веб-разработке.

Рассмотрим ключевые аргументы:

Практические советы при рефакторинге

Если вы решили перевести свой проект на работу с асинхронными методами, придерживайтесь следующих правил:

  1. Не пытайтесь выстроить синхронную логику поверх асинхронных методов: Попытки сделать «заглушки» или «ожидания» внутри асинхронных функций приведут к потере производительности и ошибкам платформы.
  2. Используйте ОписаниеОповещения с умом: Передавайте контекст выполнения через параметры ДополнительныеПараметры, чтобы процедура-обработчик имела доступ к нужным переменным.
  3. Переходите на Обещания: Если ваша версия платформы позволяет, используйте методы, возвращающие Обещание. Это позволит писать код в стиле, максимально приближенном к последовательному, используя конструкции, которые выглядят как синхронные, но при этом остаются асинхронными внутри.

В заключение проанализируем ситуацию: переход к ПоказатьВопрос — это не просто смена названия функции, это адаптация под реалии современных вычислений, где время ожидания ответа пользователя или сервера не должно останавливать работу всей информационной системы.

← На главную