Шпаргалка по функциям АСИНХ

29.07.22

Разработка - Механизмы платформы 1С

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

Вводное слово

С платформы 8.3.18 появилась новая механика работы с асинхронностью - обещание. Детально останавливаться на описании механизма не вижу смысла - это прекрасно разобрано в статьях от wonderland.v8.1c.ru[1] и статья от курсы-по-1с[2]. Тут же вставлю только несколько тезисов:

  1. Сам механизм асинхронности не изменился - изменился и упростился способ работы с ними
  2. Основная соль нового механизма - объект типа Обещание. Все новые асинхронный функции возвращают данный объект. Обещание имеет 3 состояния: "Ожидание", "Успех", "Провал".
  3. Новый метод Ждать, аргументом которого является Обещание. Суть метода - ожидать завершения асинхронной функции не продолжая выполнение кода.
  4. Вызов новых асинхронных методов встроенного языка возможен только внутри асинхронных процедур и функций
  5. Все новые асинхронные функции - есть аналоги старых асинхронных функций: Вопрос - ПоказатьВопрос - ВопросАсинх, Предупреждение - ПоказатьПредупреждение - ПредупреждениеАсинх, и т.д.

Все эксперименты проводятся на платформе 8.3.20.16.13

 

Примеры интерактивного взаимодействия

  • ПредупреждениеАсинх - новый синтаксис предупреждения. Ожидание обещания возвращает Неопределено.

&НаКлиенте
Асинх Процедура Демо_ПоказатьПредупреждениеАсинх()
	
	текст = НСтр("ru='Это асинхронное предупреждение!'");	
	
	Обещание = ПредупреждениеАсинх(текст);
	Результат = Ждать Обещание; // тут выполнение остановится пока не закроется предупреждение
	
	текст = НСтр("ru='Это второе асинхронное предупреждение!'");	
	ПредупреждениеАсинх(текст); // предупреждение выведется и, но код пойдёт исполняться дальше

	Сообщение = Новый СообщениеПользователю;
	Сообщение.Текст = НСтр("ru='текст после второго предупреждения!'");;
	Сообщение.Сообщить();

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

Первое предупреждение - выполнение остановилось.

 

 

Второе предупреждение - выполнение не остановилось (см. всплывшее сообщение)

 

 

  • ВопросАсинх - новый синтаксис вопроса. Ожидание обещания возвращает КодВозвратаДиалога.

&&НаКлиенте
Асинх Процедура Демо_ЗадатьВопросАсинх()

	обещание = ВопросАсинх(НСтр("ru='Купить слона?'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да);
	Результат = Ждать обещание; // тут выполнение остановится пока пользователь не ответит на вопрос
	
	Если Результат = КодВозвратаДиалога.Да Тогда
		текст = НСтр("ru='Ответ утвержительный!'");
	ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда 
		текст = НСтр("ru='Ответ отрицательный!'");
	Иначе
		текст = НСтр("ru='Ответ не получен!'");
	КонецЕсли;
	
КонецПроцедуры
  • ОткрытьЗначениеАсинх - новый синтаксис показа значения. Ожидание обещания возвращает Неопределено.

&&НаКлиенте
Асинх Процедура Демо_ОткрытьЗначениеАсинх()
	
	тестовыйСписок = Новый СписокЗначений;
	тестовыйСписок.Добавить("тест1", "тестовое значение 1");
	тестовыйСписок.Добавить("тест2", "тестовое значение 2");
	тестовыйСписок.Добавить("тест3", "тестовое значение 3");
	
	Обещание = ОткрытьЗначениеАсинх(тестовыйСписок);
	Результат = Ждать Обещание; // тут выполнение остановится пока список не закроется
	
КонецПроцедуры
  • ВвестиЧислоАсинх - новый синтаксис ввода числа. Ожидание обещания возвращает Число.

&&НаКлиенте
Асинх Процедура Демо_ВвестиЧислоАсинх()
	
	Обещание = ВвестиЧислоАсинх(1, НСтр("ru='укажите любое число!'"));
	Результат = Ждать Обещание;
		
КонецПроцедуры

 

Примеры работы с файлами

  • НайтиФайлыАсинх - новый синтаксис поиска файлов. Ожидание обещания возвращает массив объектов, типа Файл.

&НаКлиенте
Асинх Процедура Демо_НайтиФайлыАсинх()
	
	ПутьКПапкеСФайлами = "C:\Program Files\1cv8\conf";
	Обещание = НайтиФайлыАсинх(ПутьКПапкеСФайлами, "*.*", Ложь);
	Результат = Ждать Обещание;
		
КонецПроцедуры

Пример, что возвращается внутри результата

 

 

  • ПоместитьФайлыНаСерверАсинх - новый синтаксис помещения файлов на сервер. Ожидание обещания возвращает массив объектов, типа ОписаниеПомещенногоФайла - если успех, либо Неопределено - если провал.

&НаКлиенте
Асинх Процедура Демо_ПоместитьФайлыНаСерверАсинх(Команда)
	
	ПутьКПапкеСФайлами = "C:\Program Files\1cv8\conf";
	Обещание = НайтиФайлыАсинх(ПутьКПапкеСФайлами, "*.*", Ложь);
	Результат = Ждать Обещание;

	ДобавляемыеФайлы = Новый Массив;
	Для каждого НайденныйФайл из Результат Цикл
    
	    ОписаниеДобавляемогоФайла = Новый ОписаниеПередаваемогоФайла;
	    ОписаниеДобавляемогоФайла.Имя = НайденныйФайл.ПолноеИмя;
	    ДобавляемыеФайлы.Добавить(ОписаниеДобавляемогоФайла);
    
	КонецЦикла;

	Обещание = ПоместитьФайлыНаСерверАсинх(,,ДобавляемыеФайлы, ЭтаФорма.УникальныйИдентификатор);    
	Результат = Ждать Обещание;

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

Пример, что возвращается внутри результата

 

 

Нюансы использования

Асинхронные обработчики команд

как уже говорилось ранее, использование новых методов языка возможно только внутри асинхронных методов (ключевое слово - Асинх). Вопрос - а можно ли сделать обработчик команды асинхронным? Ответ: Да можно - никаких проблем тут нет.


// это обработчик команды
&НаКлиенте
Асинх Процедура Демо_ВвестиЧислоАсинх(Команда)
	
	Обещание = ВвестиЧислоАсинх(1, НСтр("ru='укажите любое число!'"));
	Результат = Ждать Обещание;
	
	ВывестиПараметрыПеременной(Результат);
	
КонецПроцедуры

 

Работа с исключениями

Любая асинхронная функция в момент входа тут же возвращает Обещание. Обещание имеет статус: Ожидание. Если при выполнении асинхронной функции возникнет исключение и оно не будет перехвачено - ошибка останется незамеченной. Код ниже выполняется без каких-либо предупреждений.


&НаКлиенте
Процедура Демо_ПоявлениеИсключенияСинх(Команда)
	
	ВызватьОшибку();
	
КонецПроцедуры

&НаКлиенте
Асинх Функция ВызватьОшибку()
	
	ВызватьИсключение НСтр("ru='ошибка: слон не обнаружен!'");	
	
КонецФункции

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


&НаКлиенте
Асинх Процедура Демо_ПоявлениеИсключенияСинх(Команда)
	
	ВызватьОшибку();
	
КонецПроцедуры

 

Асинхронные обработчики событий формы

Как вы думаете, откроется ли форма, если подключить обработчик события и написать следующий код?


&НаКлиенте
Асинх Процедура ПриОткрытии(Отказ)
	
	Отказ = Истина;
	ВызватьИсключение НСтр("ru='ошибка: слон не обнаружен!'");
	МатОшибка = 1 / 0;
	
КонецПроцедуры

Ответ: да, откроется, поэтому в данном случае использовать `Асинх` не стоит. Собственно об этом говориться на wonderland.v8.1c.ru:

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

 

Вопросы при открытии и при закрытии формы

Логика работы с вопросами при открытии (и при закрытии) в данном случае остаётся той же, что и раньше с поправкой на новый механизм и упрощение синтаксиса

&НаКлиенте
Процедура ПриОткрытииВопрос(Отказ)
    
    ЗадатьВопросАсинх_ПриОткрытии();
    
КонецПроцедуры

&НаКлиенте
Асинх Процедура ЗадатьВопросАсинх_ПриОткрытии()
    
    обещание = ВопросАсинх(НСтр("ru='Купить слона?'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да);
    Результат = Ждать обещание; 
    
    Если Результат <> КодВозвратаДиалога.Да Тогда 
        ЭтаФорма.Закрыть();
    КонецЕсли;
    
КонецПроцедуры

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

&НаКлиенте
Перем ВопросПриЗакрытииЗадан;

&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
    
    Если НЕ ВопросПриЗакрытииЗадан Тогда
        ЗадатьВопросАсинх_ПриЗакрытии();
        Отказ = Истина;
    КонецЕсли;
    
КонецПроцедуры

&НаКлиенте
Асинх Процедура ЗадатьВопросАсинх_ПриЗакрытии()
    
    обещание = ВопросАсинх(НСтр("ru='Продать слона?'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да);
    Результат = Ждать обещание; 
    
    Если Результат = КодВозвратаДиалога.Да Тогда 
        // ВопросПриЗакрытииЗадан = Истина; // если надо спрашивать пока не согласиться
        ЭтаФорма.Закрыть();
    КонецЕсли;
    
    ВопросПриЗакрытииЗадан = Истина;
    
КонецПроцедуры

ВопросПриЗакрытииЗадан = Ложь;

 

Последовательность выполнения нескольких функций

Тут я сам ничего выдумывать не буду и отсылаю вас к прекраснейшей статье Александра Быкова - Семеро одного не ждут? Асинхронное исследование асинхронности

 

Развитие механизма

В платформе 8.3.21 добавились ещё асинхронные методы для HTTP-запросов, но про них сказать пока нечего, ибо не пользовался. На всякий случай приведу список добавленных методов:

  • ВызватьHTTPМетодАсинх
  • ЗаписатьАсинх
  • ИзменитьАсинх
  • ОтправитьДляОбработкиАсинх
  • ПолучитьАсинх
  • ПолучитьЗаголовкиАсинх
  • УдалитьАсинх

 

Заключение

На этом я, пожалуй, и закончу. Целью статьи было показать на практических примерах работу с новым механизмом, рассказать о нюансах, которые, может, сразу в голову и не приходили (например: про асинхронные обработчики команд и формы) и упорядочить эти знания в своей собственной голове. Спасибо за внимание. Дополнительные источники, которые можно почитать на тему, - см. ниже.

Если вдруг кому нужна обработка, в которой я накидывал данные примеры кода - см. мой github

P.S. В ходе тестирования ни один слон не пострадал ^_^

 

Источники

  1. Улучшения в синтаксисе языка 1С для работы с асинхронными функциями: синхронная асинхронность
  2. Расширение поддержки работы с НТТР-запросами
  3. «Асинхронные методы в 1С», статья Василия Ханевича
  4. Shining_ninja - Синхронный и асинхронный вызов в новых версиях платформы
  5. Александр Быков - Семеро одного не ждут? Асинхронное исследование асинхронности

Асинх Ждать Обещание Async Await Promise асинхронность разработка

См. также

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

23.06.2024    4304    bayselonarrend    18    

147

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    4239    dsdred    16    

77

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    10024    YA_418728146    25    

70

Перенос данных 1C Механизмы платформы 1С Системный администратор Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    9051    dsdred    44    

126

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    21266    SeiOkami    46    

130

Механизмы платформы 1С Системный администратор Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    15460    human_new    27    

80

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    11809    YA_418728146    7    

158
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. infosoft-v 903 29.07.22 09:50 Сейчас в теме
Отлично! Аккуратно и все по делу.
Izumov; akR00b; maksa2005; zeltyr; rozer; +5 Ответить
22. DELOVOYDOM 09.12.23 01:55 Сейчас в теме
(1) А вас не смущает что никакой интерактивности нет? во всех примерах диалоговое окно блокирует интерфейс формы? Ну и толку то что код продолжает в форме работать, если доступа к форме нет) Форма не серверный компонент и толка ноль от такого примера. Лучше бы привели пример когда пользователь продолжает работать с формой и что то там меняется параллельно в элементах, например прогресс бар загрузки файла
2. SoftLeon 28 30.07.22 10:15 Сейчас в теме
3. BigClock 30.07.22 21:35 Сейчас в теме
Добавил бы в Вашу шпаргалку еще два пункта.
1. В процедурах и функциях с модификатором Асинх параметры всегда передаются по значению, т.е. следующие два вызова одинаковые
Асинх Процедура ЗадатьВопрос(Знач РежимДиалога)
Асинх Процедура ЗадатьВопрос(РежимДиалога)

2. Для перехвата исключения асинхронной функции в вызывающей функции в секции Попытка необходимо использовать оператор Ждать (только для функции, для процедуры не требуется).
&НаКлиенте
Асинх Процедура Демо_ПоявлениеИсключенияСинх(Команда)
	
    Попытка
        Ждать ВызватьОшибку();
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
	
КонецПроцедуры
Показать
Merkalov; Rimmex; SagittariusA; METAL; rozer; kalyaka; bulpi; zeltyr; +8 Ответить
12. zeltyr 585 03.08.22 08:45 Сейчас в теме
(3) спасибо, наконец дошли руки и в обработке (в гите) добавил соответствующие функции для проверки. Интересный факт, подтверждающий работу процедуры асинх: перехватить исключение процедуры извне нельзя.


&НаКлиенте
Асинх Процедура Демо_ПопыткаИсключениеАсинх(Команда)
	
	Попытка
		ВызватьОшибкуАсинх_Процедура();
	Исключение
		текст = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = текст;
		Сообщение.Сообщить();
	КонецПопытки;
	
КонецПроцедуры

Показать


результат - всё равно вылетает окно исключения.
Прикрепленные файлы:
21. DELOVOYDOM 09.12.23 01:48 Сейчас в теме
(12) Очень странный пример выбрали, по сути окно с вопросом блокирует работу пользователя с формой и висит, а то что дальше там код живет свое жизнью в форме толку то. Лучше бы сделали демо как пользователь работает с формой и параллельно прогресс бар чего то там отображается, например в цикле с паузой меняется там что то. Очень неудачная подача материала, копипаст с таких же статей с диалоговым окном который блочит интерфейс. Ощущение что автор понял как работает метод, но не понял зачем)))
4. starik-2005 3062 31.07.22 09:14 Сейчас в теме
Из всего этого смысл есть только у найтифайлы, передатьфайлнасервер и работа с веб-запросами в 21й платформе. Остальное по-сути ничего не дает в плане функциональности - просто заменяет собой функции с оповещением. С другой стороны, больше асинхронность ни для чего и не нужна, т.к. это выполнение функций, которые что-то ждут (нажатия кнопки или передачи файла, получения ответа от веб-сервиса), при этом можно вызвать еще пару функций, которые чего-то ждут. Правда с нажатием кнопки это не проканает - вряд ли на экране появится два окна, ждущих ответа)))
maksa2005; +1 Ответить
5. Alxby 1107 31.07.22 14:37 Сейчас в теме
(4)Наверное главная ценность асинхронных функций - упрощение кода, нежели новая функциональность. Вспомните цепочки вызовов файловых функций с продолжениями. Во всяком случае этот механизм давно ждали именно ради этого упрощения.
user1151745; anderson; SagittariusA; viktor3d; zqzq; bulpi; +6 Ответить
6. starik-2005 3062 31.07.22 21:03 Сейчас в теме
(5) Весь смысл асинхронности в том, что один поток выполняет несколько действий (функций), и когда одно из действий что-то ждет (нажатия кнопки - сомнительно, лучше данных от сайте/сервиса/сервера или чего-то подобного), то второе в это время что-то делает. Но одновременно некие два плюс два несколько асинхронных процессов не могут.

Да, может быть "каскадные вызовы" диалоговых окон - это единственное, что подобный подход упростит. Остальное останется примерно на том же уровне. Считать ли это достижением? Вряд ли, если только в части общения с внешним миром через веб-сервисы, но 1С тут клиент, а не сервер, поэтому чудес каких-то в части производительности тут не достичь, хотя микросервисы с асинхронностью позволяют утилизировать куда больше процессора, чем без, но не на 1С.
Devi; PrinzOfMunchen; o.nikolaev; +3 Ответить
7. Alxby 1107 01.08.22 08:12 Сейчас в теме
(6)Тут надо вспомнить, что "асинхронность" появилась ради работы веб-клиента в современных браузерах. Вряд ли разработчики платформы ставили задачу дать новые возможности для работы на стороне клиента, тем более, что идеология управляемого приложения предполагает преимущественное выполнение кода на сервере. Да и что там с утилизацией процессоров тонким клиентом 1С? :)
METAL; zqzq; +2 Ответить
8. mikl79 119 01.08.22 08:46 Сейчас в теме
как я понял в новых платформах, например, у нас 8.3.20.1710, уже не надо писать всякие Асинх и Ждать, оно работает как раньше:
Ответ = Вопрос("Перед заполнением необходимо очистить табл.часть! Продолжить?",РежимДиалогаВопрос.ДаНет);
Если Ответ <> КодВозвратаДиалога.Да Тогда
...
9. Patriot1S 99 01.08.22 10:48 Сейчас в теме
(8) Обращение в службу поддержки 1С — Здравствуйте, а не подскажите где поставить флажок в 1С чтобы не переписывать функцию Вопрос на Ждать ВопросАсинх и убрать непонятную приставку Асинх в функции?
Ответ от телеграмм канала 1С: «А что непонятного то? Уж куда проще, чем ОписаниеОповещения»…

Так можно ли задать Вопрос асинхронно - https://blog.sikuda.ru/?p=3257
10. mikl79 119 01.08.22 11:24 Сейчас в теме
(9), интересно конечно, но бесполезно )
PrinzOfMunchen; +1 Ответить
13. rozer 309 04.08.22 12:02 Сейчас в теме
(10) бесполезно когда у вас самописная конфа с включенной модальностью ) но не в крайних типовых ...
SagittariusA; +1 Ответить
15. KRIHA 113 09.08.22 15:36 Сейчас в теме
(13) в крайних типовых не увидел ни одного использования метода ПоместитьФайлыНаСерверАсинх )))))
17. SagittariusA 02.02.23 16:04 Сейчас в теме
(15)
Возможно просто пока не стали переписывать.
20. Westbound 27.11.23 11:05 Сейчас в теме
(13) в крайних типовых тоже была включена модальность) Хотя смотря с какого края посмотреть. Для последних – да, там уже она давно выключена)
24. WarAn 07.07.24 13:53 Сейчас в теме
(13) интересно, с какого края следует начинать считать, чтобы получить "крайние" типовые *рукалицо*
11. bulpi 216 01.08.22 14:08 Сейчас в теме
(10)
Значительно приятнее писать код. Так что полезно.
14. serg33rus 29 05.08.22 10:18 Сейчас в теме
Работать с асинх на порядок удобнее, чем с обработчиками оповещений. И компактней и понятней получается.
И кстати код
	Обещание = ВвестиЧислоАсинх(1, НСтр("ru='укажите любое число!'"));
	Результат = Ждать Обещание;
можно смело заменить на
	Результат  = Ждать ВвестиЧислоАсинх(1, НСтр("ru='укажите любое число!'"));
Так получается еще короче и понятнее :-)
WarAn; belyakooov; monkbest; triviumfan; NikeeNik; +5 Ответить
16. alexsey777 28.10.22 07:51 Сейчас в теме
Лет 5 назад писал для веб-клиента загрузку файлов. Вот это была жесть, с точки зрения читабельности кода. Куча разорванных методов.
То же касается работы с подключаемым оборудованием, криптографией в типовых. Когда анализируешь типовой код - без поллитры не разберешься.
Так вот как раз для этого разработчики платформы наверное и старались.
23. Devi 33 11.02.24 10:57 Сейчас в теме
(16) Да нет похоже - просто кое кого носом потыкали в понимание современных асинхронных методов... Оказывается всё можно было сделать проще и переход с обычных форм у народа был бы легче - а то вот приходилось заниматся свистопляской на клиенте... Но всё бы было куда лучше если бы бы сделали не однобоко... как к примеру с COM подключением на клиенте к 1С - оно у нас без сервера не работает, а если у Вас сервер на линуксе то минус ещё одна нормальная технология... Вот мой пример из жизни:

Имеем задачу прочитать данные из LDAP на сервере линукс, на старых платформах прекрасно обходились модальной функцией..


ЗапуститьПриложение(КомандаНаВыполнение,,Истина);


По её завершении спокойно читали всю абракадабру из файлика и писали результат в базу... всё было прекрасно до 17 платформы, но с новыми платформами, благодаря "золотым" ручкам разрабов, модальность у данной функции отвалилась... И результат запроса в LDAP теперь возвращает пустой файлик...

Поиск решения проблемы пока не дал результатов - очень надеялся выполнить на сервере ЗапуститьПриложениеАсинх но на:


&НаСервере
Асинх Процедура ЧтениеФайлаНаСервере()


вываливается с ошибкой... Оказывается асинхронные методы подвезли только на клиента, а вот работу с COM вызовом 1с сделали адекватно только на сервере - вот так и живём - не ну не жалуюсь - благодаря нашим кормильцам мы обеспечены работой - по два три раза получаем за переделку ранее сделанной работы, а то в САП деды ещё в 90х всё сделали и десятилетиями старьём пользуются...
18. Aleksey_Abramov 07.09.23 08:16 Сейчас в теме
Объясните проще, для не особо понимающих. Я читал первоисточник на wonderland, но так и не понял.
если при выполнении Асинх процедуры возникнет не перехваченное исключение, то это приведет к выдаче пользователю сообщения об ошибке. Само это исключение никак не может быть перехвачено и обработано вызвавшим процедуру кодом.

Что значит не перехваченное исключение? Это имеется ввиду если в процедуре с модификатором Асинх нет конструкции "Попытка Исключение"?
Что значит, что исключение никак не может быть перехвачено и обработано вызвавшим процедуру кодом? Имеется ввиду, что мы не можем перехватить это в родительской процедуре?

И второй вопрос. Если сама Асинх процедура вызовет другую синхронную (обычную) процедуру, то в синхронной процедуре можно перехватить исключение обычным способом?
19. user717534 11 07.09.23 17:37 Сейчас в теме
Спасибо за рабочий пример! У меня было:

		Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(НайденныйФайл.ПолноеИмя));
		ОписаниеПередаваемогоФайла = Новый ОписаниеПередаваемогоФайла(НайденныйФайл.ПолноеИмя, Адрес);
" 


и выдавало ошибку вида "неправильный путь к файлу 'e1cib/tempstorage/8b1816e0-db51-49a1-97bf-8a1cca06690b?seanceId=ec0a6979-0be3"



А с одним параметром, как в примере из статьи, - заработало!
25. bad_wag 50 23.07.24 20:13 Сейчас в теме
А как быть в обработчиках удаления строк в таблицах например, хочется задать вопрос пользователю "Точно удалить?" и если ответит нет, устанавливать переменную Отказ в Истина?
Оставьте свое сообщение