Задать вопрос
@Dima231

Как сделать аналог модального окна в управляемых формах?

Привет! Известно, что в управляемых формах использовать модальные окна не желательно. Есть такая задача:
в функции(именно в функции) надо вывести произвольную форму выбора документа. Таблица документов на этой форме
заполняется запросом. И после выбора пользователем надо продолжить выполнение функции. Понятно, что можно
действовать через ОткрытьФорму с обработкой оповещения и если бы этот вызов был бы в процедуре, то можно было бы
так сделать. Но здесь именно функция и когда форма открывается, основной поток двигается дальше и функция заканчивается.
Т.е. нужно каким-то образом остановить выполнение функции, открыть форму, выбрать в ней значение, закрыть ее и
продолжить выполнение функции. Т.е. аналог модального окна.
Предваряя вопрос о том, зачем такая сложность. Это доработка подключаемого модуля Диадок. Нужно в нем открыть окно, пользователь
выберет значение и результат выбора должен передаться на сервер в модуль обработки. У клиента такое сделано в УПП, но там толстый клиент и все просто))
Есть какие-нибудь идеи?
  • Вопрос задан
  • 78 просмотров
Подписаться 2 Средний 1 комментарий
Помогут разобраться в теме Все курсы
  • Stepik
    ПБУ 18/02 "Учет расчетов по налогу на прибыль"
    1 неделя
    Далее
  • Skillbox
    Главный бухгалтер
    7 месяцев
    Далее
  • Академия Eduson
    1С: Бухгалтерия 8.3
    2 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 2
@Dementor
программист, архитектор, аналитик
Известно, что в управляемых формах использовать модальные окна не желательно.

Точнее "запрещено" после того как Google Chrome запретил модальные окна. В тонком клиенте сделали для единообразия.

Т.е. нужно каким-то образом остановить выполнение функции, открыть форму, выбрать в ней значение, закрыть ее и продолжить выполнение функции. Т.е. аналог модального окна.

Тут два варианта:

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

2. Переписать на асинхронные вызовы, если ваша платформа версии 8.3.18 или новее. Вам нужно для вашей верхней процедуры/функции и вложенной функции с открытием формы указать ключевое слово "Асинх". Вызов вложенной функции и открытие формы делать через ключевое слово "Ждать". В результате получите поведение подобное обычным формам из УПП.

Примеры с теорией на оба варианта можете подсмотреть тут: https://infostart.ru/1c/articles/1595214/
Ответ написан
Комментировать
Fragster
@Fragster
помогло? отметь решением!
Да, это одно из самых больных мест в 1с. Проще всего исходную процедуру-обраобтчик разбить на части и вызывать последовательно в обработках оповещения, передавая промежуточные значения через ДополнительныеПараметры.

Но есть костыль https://seiokami.github.io/posts/open-form-async/ который не добрался еще до основной платформы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы