ОткрытьФормуАсинх()
Через костыли к звёздам...
😱 ОткрытьФормуАсинх() . (https://seiokami.github.io/assets/posts/general/kostil-ones.jpg)
➖ Асинхи в 1С уже давно, но до сих пор в платформе нет асинхронного открытия формы. Чтобы можно было сделать “как раньше” - открыть форму, подождать её закрытия и обработать результат. И всё это в одном методе без перепрыгиваний и разрезания кода обработчиками оповещения.
🤔 Но, как оказывается, в платформе уже есть такая возможность. Просто её используют только методы самой платформы, а обычным программистам 1С она недоступна.
Однако, не зря же я начал про это писать, верно?) 😁 Подъехала рубрика с недокументированными возможностями и вагоном костылей! 🩼
🕵️ Во-первых, надо убедиться, что существует такая возможность. Для этого можно взять один из методов Асинх платформы. И вот мой неожиданный выбор:
1
2
КЗ = Новый КонструкторЗапроса;
Результат = Ждать КЗ.ОткрытьАсинх();
Этот код откроет форму с конструктором запроса. Чем нам поможет этот метод? ➖ Открывает неблокирующую форму ➖ Не прерывает работу интерфейса. Мы можем вообще больше не трогать конструктор запроса и работать в других формах сеанса ➖ Метод доступен и в тонком и в веб клиенте (не все асинх работают в вебе) ➖ Конструктор запроса - это внешняя обработка, которую можно подменить (https://t.me/JuniorOneS/600)
Так может эта особая форма использует какой-то особый механизм для асинхронности? Чтобы это узнать, достаточно извлечь конструктор запроса во внешнюю обработку и посмотреть его содержимое (спойлер - ничего необычного). Далее мы можем подменить конструктор запроса на любую свою внешнюю обработку. Напоминаю про свой инструмент для Управления платформенными обработками (https://github.com/SeiOkami/ManagementPlatformDataProcessors)
❕И теперь этот код откроет нашу любую форму асинхронно. И будет ждать её закрытия. И получит результат, который форма передаёт при закрытии
1
2
КЗ = Новый КонструкторЗапроса;
Результат = Ждать КЗ.ОткрытьАсинх();
Таким образом мы можем убедиться, что платформа технически может открыть любую форму асинхронно и ждать её результата.
❓ А что это нам даёт?
😁 А ничего =) Просто небольшой пост про хитрости работы платформы и очередной пример того как она скрывает свои возможности от нас (обычных 1Сников).
😎 P.S.: а ещё при помощи более жутких костылей можно сделать свой общий метод “ОткрытьФормуАсинх()”. Он будет под капотом открывать конструктора запроса, потом на его место в окне подставлять целевую форму и ожидать закрытия окна. А для использующего метод программиста это будет просто как Ждать ОткрытьФормуАсинх(“МояФорма”,,,). Реализацию в виде внешней обработки приложил в комментарии (но лучше бы сжёг)
😎😎 P.S.S.: ещё можно ухитриться сделать ПаузаАсинх(), которая бы позволила прерывать на время выполнение клиентского метода без “зависания” сеанса пользователя. Но костылей будет больше =) Это тоже умеет платформа, но нам пользоваться не даёт.