Синхронные и асинхронные методы в 1С

С появлением управляемого приложения, web-клиентов и т.д. изменилась и философия программирования на платформе 1С:Предприятие. Если раньше все применяемые методы были синхронными, то теперь появляются еще и асинхронные. И если вы хотите, чтобы ваша конфигурация работала не только на толстом или тонком клиенте, но и на web-клиенте, мобильном приложении или в облаке 1С:Fresh, то придется пользоваться именно асинхронными методами.

В чем же разница? Если коротко, то:

  • Синхронные методы блокируют выполнение кода до их завершения.
  • Асинхронные методы позволяют коду выполняться дальше, при этом отслеживается момент их завершения.

Асинхронные методы на сегодняшний день существуют только для некоторых операций:

  • с блокирующими/диалоговыми окнами для пользователя;
  • с файлами;
  • с криптографией;
  • с внешними компонентами.

Асинхронные методы существуют только на клиенте. На сервере по-прежнему доступны синхронные методы (если они вообще существуют).

Общие принципы использования асинхронных методов

Асинхронные методы обычно имеют в своем названии слова Начать или Показать.

Для их использования необходимо создать один новый объект — ОписаниеОповещения. С помощью этого объекта мы будем показывать системе, какую процедуру нужно выполнить после завершения асинхронного метода.

Рассмотрим наиболее часто встречающиеся задачи, выполняемые с помощью асинхронных методов.

Вызов диалогового окна асинхронно

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

    Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопроса", ЭтотОбъект);
  2. С помощью функции ПоказатьВопрос вызываем диалоговое окно. Первым параметром передаем созданное оповещение. Остальные параметры определяют поведение диалогового окна.
    ПоказатьВопрос(Оповещение,
    "Будет выполнена передача каталога товаров на web-сайт. Продолжить?",
    РежимДиалогаВопрос.ДаНет,
    0, // таймаут в секундах
    КодВозвратаДиалога.Нет, // кнопка по умолчанию
    "Подтверждение действия"); // заголовок диалогового окна 
  3. Создаем экспортную процедуру, которая будет выполняться после закрытия диалогового окна. В параметр Результат  будет передан результат работы диалога.
    &НаКлиенте
    Процедура ПослеЗакрытияВопроса(Результат, Параметры) Экспорт
    Если Результат = КодВозвратаДиалога.Да Тогда
    ВыполнитьОбменНаСервере();
    КонецЕсли;
    КонецПроцедуры

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

&НаКлиенте
Процедура ВыполнитьОбмен(Команда)

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

КонецПроцедуры

&НаКлиенте
Процедура ПослеЗакрытияВопроса(Результат, Параметры) Экспорт

Если Результат = КодВозвратаДиалога.Да Тогда
ВыполнитьОбменНаСервере();
КонецЕсли;

КонецПроцедуры

Вызов диалога открытия файла асинхронно

Диалог выбора/открытия файлов создается аналогично:

  1. Создаем описание оповещения
  2. Вызываем диалоговое окно
  3. Создаем экспортную процедуру, которая будет выполняться после закрытия диалога.

Продемонстрируем это на примере открытия диалога выбора каталога.

&НаКлиенте
Процедура КаталогНаДискеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

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

КонецПроцедуры

&НаКлиенте
Процедура КаталогВыбран(ВыбранныеФайлы, ДополнительныеПараметры)  Экспорт

Если ВыбранныеФайлы <> Неопределено и ВыбранныеФайлы.Количество() > 0 Тогда
КаталогНаДиске=ВыбранныеФайлы[0];
КонецЕсли;

КонецПроцедуры

Более подробное описание диалогов выбора файлов смотрите в этой статье.

Синхронные и асинхронные методы в 1С: 2 комментария

  1. Екатерина

    Интересно, спасибо большое, но..Прежде чем опубликовать проверили б ошибки в листинге.

    1. Нестандартные решения в 1С Автор записи

      Спасибо, Екатерина.

      Вы бы написали, где у нас там ошибки :-)

      Одну ошибку нашли и исправили. Если есть еще где-то, укажите, пожалуйста.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *