Только настоящий джедай сможет сдержать гнев и познать Силу Желтого программирования.
Make IT, not war
По всем вопросам: @SeiOkami
https://github.com/SeiOkami
https://seiokami.github.io/
https://infostart.ru/profile/309462/
Post #672
6.69K
😱 ОткрытьФормуАсинх() .
➖ Асинхи в 1С уже давно, но до сих пор в платформе нет асинхронного открытия формы. Чтобы можно было сделать "как раньше" - открыть форму, подождать её закрытия и обработать результат. И всё это в одном методе без перепрыгиваний и разрезания кода обработчиками оповещения.
🤔 Но, как оказывается, в платформе уже есть такая возможность. Просто её используют только методы самой платформы, а обычным программистам 1С она недоступна.
Однако, не зря же я начал про это писать, верно?) 😁
Подъехала рубрика с недокументированными возможностями и вагоном костылей! 🩼
🕵️ Во-первых, надо убедиться, что существует такая возможность. Для этого можно взять один из методов Асинх платформы.
И вот мой неожиданный выбор:
Этот код откроет форму с конструктором запроса. Чем нам поможет этот метод?
➖ Открывает неблокирующую форму
➖ Не прерывает работу интерфейса. Мы можем вообще больше не трогать конструктор запроса и работать в других формах сеанса
➖ Метод доступен и в тонком и в веб клиенте (не все асинх работают в вебе)
➖ Конструктор запроса - это внешняя обработка, которую можно подменить
Так может эта особая форма использует какой-то особый механизм для асинхронности? Чтобы это узнать, достаточно извлечь конструктор запроса во внешнюю обработку и посмотреть его содержимое (спойлер - ничего необычного).
Далее мы можем подменить конструктор запроса на любую свою внешнюю обработку. Напоминаю про свой инструмент для Управления платформенными обработками
❕И теперь этот код откроет нашу любую форму асинхронно. И будет ждать её закрытия. И получит результат, который форма передаёт при закрытии
Таким образом мы можем убедиться, что платформа технически может открыть любую форму асинхронно и ждать её результата.
❓ А что это нам даёт?
😁 А ничего =)
Просто небольшой пост про хитрости работы платформы и очередной пример того как она скрывает свои возможности от нас (обычных 1Сников).
😎 P.S.: а ещё при помощи более жутких костылей можно сделать свой общий метод "ОткрытьФормуАсинх()". Он будет под капотом открывать конструктора запроса, потом на его место в окне подставлять целевую форму и ожидать закрытия окна.
А для использующего метод программиста это будет просто как
😎😎 P.S.S.: ещё можно ухитриться сделать ПаузаАсинх(), которая бы позволила прерывать на время выполнение клиентского метода без "зависания" сеанса пользователя. Но костылей будет больше =) Это тоже умеет платформа, но нам пользоваться не даёт.
⬇️ А если у вас есть интересные необычности в платформе, которые можно разобрать, то пишите в комментариях
➖ Асинхи в 1С уже давно, но до сих пор в платформе нет асинхронного открытия формы. Чтобы можно было сделать "как раньше" - открыть форму, подождать её закрытия и обработать результат. И всё это в одном методе без перепрыгиваний и разрезания кода обработчиками оповещения.
🤔 Но, как оказывается, в платформе уже есть такая возможность. Просто её используют только методы самой платформы, а обычным программистам 1С она недоступна.
Однако, не зря же я начал про это писать, верно?) 😁
Подъехала рубрика с недокументированными возможностями и вагоном костылей! 🩼
🕵️ Во-первых, надо убедиться, что существует такая возможность. Для этого можно взять один из методов Асинх платформы.
И вот мой неожиданный выбор:
КЗ = Новый КонструкторЗапроса;
Результат = Ждать КЗ.ОткрытьАсинх();
Этот код откроет форму с конструктором запроса. Чем нам поможет этот метод?
➖ Открывает неблокирующую форму
➖ Не прерывает работу интерфейса. Мы можем вообще больше не трогать конструктор запроса и работать в других формах сеанса
➖ Метод доступен и в тонком и в веб клиенте (не все асинх работают в вебе)
➖ Конструктор запроса - это внешняя обработка, которую можно подменить
Так может эта особая форма использует какой-то особый механизм для асинхронности? Чтобы это узнать, достаточно извлечь конструктор запроса во внешнюю обработку и посмотреть его содержимое (спойлер - ничего необычного).
Далее мы можем подменить конструктор запроса на любую свою внешнюю обработку. Напоминаю про свой инструмент для Управления платформенными обработками
❕И теперь этот код откроет нашу любую форму асинхронно. И будет ждать её закрытия. И получит результат, который форма передаёт при закрытии
КЗ = Новый КонструкторЗапроса;
Результат = Ждать КЗ.ОткрытьАсинх();
Таким образом мы можем убедиться, что платформа технически может открыть любую форму асинхронно и ждать её результата.
❓ А что это нам даёт?
😁 А ничего =)
Просто небольшой пост про хитрости работы платформы и очередной пример того как она скрывает свои возможности от нас (обычных 1Сников).
😎 P.S.: а ещё при помощи более жутких костылей можно сделать свой общий метод "ОткрытьФормуАсинх()". Он будет под капотом открывать конструктора запроса, потом на его место в окне подставлять целевую форму и ожидать закрытия окна.
А для использующего метод программиста это будет просто как
Ждать ОткрытьФормуАсинх("МояФорма",,,). Реализацию в виде внешней обработки приложил в комментарии (но лучше бы сжёг)😎😎 P.S.S.: ещё можно ухитриться сделать ПаузаАсинх(), которая бы позволила прерывать на время выполнение клиентского метода без "зависания" сеанса пользователя. Но костылей будет больше =) Это тоже умеет платформа, но нам пользоваться не даёт.
⬇️ А если у вас есть интересные необычности в платформе, которые можно разобрать, то пишите в комментариях
- 🔥 80
- 👍 18
- 👏 8
- 👀 1






