1C-Company / v8-code-style

Расширение для 1C:EDT, которое помогает разрабатывать конфигурации/приложения по стандартам 1С для платформы "1С:Предприятие 8".
Eclipse Public License 2.0
175 stars 53 forks source link

Код расположен после асинхронного вызова #1224

Closed iArtemv closed 1 year ago

iArtemv commented 1 year ago

Название проверки

Код расположен после асинхронного вызова

Английское название проверки

The code is located after the asynchronous call

Правило анализа кода/метаданных

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

Для правильного решения нужно вынести весь код, который должен быть выполнен после выполнения асинхронного действия, в экспортный метод и указать его имя в обработке оповещения, которая будет вызвана после завершения асинхронного действия. Или использовать асинхронность через обещания, например, Ждать ПредупреждениеАсинх(Текст);

Мета-информация (пожалуйста, заполните если знаете):

Параметры проверки

Текст ошибки

Код выполняются без ожидания выполнения асинхронного метода.

Пример некорректного решения

Текст = "Текст предупреждения";
ПоказатьПредупреждение( , Текст);
Сообщить("Закрыли предупреждение");

Описание, почему так делать нельзя

Пример корректного решения

Текст = "Текст предупреждения";
Ждать ПредупреждениеАсинх(Текст);
Сообщить("Закрыли предупреждение");
&НаКлиенте
Процедура Команда1(Команда)
    Оповещение = Новый ОписаниеОповещения("ПредупреждениеЗавершение", ЭтотОбъект);
    Текст = "Текст предупреждения";
    ПоказатьПредупреждение(Оповещение, Текст);
КонецПроцедуры

&НаКлиенте
Процедура ПредупреждениеЗавершение(ДополнительныеПараметры) Экспорт
    Сообщить("Закрыли предупреждение");
КонецПроцедуры;

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