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

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)

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

13.03.2024    2980    dsdred    16    

62

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

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

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    6946    dsdred    60    

88

Как готовить и есть массивы

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

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

24.01.2024    6913    YA_418728146    25    

68

Планы обмена VS История данных

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

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

11.12.2023    7497    dsdred    36    

115

1С-ная магия

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

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

06.10.2023    19774    SeiOkami    46    

122

Дефрагментация и реиндексация после перехода на платформу 8.3.22

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

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

14.09.2023    13674    human_new    27    

77

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    10038    YA_418728146    7    

147

Внешние компоненты Native API на языке Rust - Просто!

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

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6841    sebekerga    54    

100
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. infosoft-v 881 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. Для перехвата исключения асинхронной функции в вызывающей функции в секции Попытка необходимо использовать оператор Ждать (только для функции, для процедуры не требуется).
&НаКлиенте
Асинх Процедура Демо_ПоявлениеИсключенияСинх(Команда)
	
    Попытка
        Ждать ВызватьОшибку();
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
	
КонецПроцедуры
Показать
Rimmex; SagittariusA; METAL; rozer; kalyaka; bulpi; zeltyr; +7 Ответить
12. zeltyr 573 03.08.22 08:45 Сейчас в теме
(3) спасибо, наконец дошли руки и в обработке (в гите) добавил соответствующие функции для проверки. Интересный факт, подтверждающий работу процедуры асинх: перехватить исключение процедуры извне нельзя.


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

Показать


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

Да, может быть "каскадные вызовы" диалоговых окон - это единственное, что подобный подход упростит. Остальное останется примерно на том же уровне. Считать ли это достижением? Вряд ли, если только в части общения с внешним миром через веб-сервисы, но 1С тут клиент, а не сервер, поэтому чудес каких-то в части производительности тут не достичь, хотя микросервисы с асинхронностью позволяют утилизировать куда больше процессора, чем без, но не на 1С.
Devi; PrinzOfMunchen; o.nikolaev; +3 Ответить
7. Alxby 1149 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 112 09.08.22 15:36 Сейчас в теме
(13) в крайних типовых не увидел ни одного использования метода ПоместитьФайлыНаСерверАсинх )))))
17. SagittariusA 02.02.23 16:04 Сейчас в теме
(15)
Возможно просто пока не стали переписывать.
20. Westbound 27.11.23 11:05 Сейчас в теме
(13) в крайних типовых тоже была включена модальность) Хотя смотря с какого края посмотреть. Для последних – да, там уже она давно выключена)
11. bulpi 215 01.08.22 14:08 Сейчас в теме
(10)
Значительно приятнее писать код. Так что полезно.
14. serg33rus 28 05.08.22 10:18 Сейчас в теме
Работать с асинх на порядок удобнее, чем с обработчиками оповещений. И компактней и понятней получается.
И кстати код
	Обещание = ВвестиЧислоАсинх(1, НСтр("ru='укажите любое число!'"));
	Результат = Ждать Обещание;
можно смело заменить на
	Результат  = Ждать ВвестиЧислоАсинх(1, НСтр("ru='укажите любое число!'"));
Так получается еще короче и понятнее :-)
belyakooov; monkbest; triviumfan; NikeeNik; +4 Ответить
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"



А с одним параметром, как в примере из статьи, - заработало!
Оставьте свое сообщение