Добрый день.
Не могу разобраться как при открытии формы ДОЖДАТЬСЯ нажатия на ней определенной кнопки и только потом продолжать выполнять код дальше. На клиенте.
1/ВызываюДопФорму из активной, она открывается
ОткрытьФорму("Обработка.API_WILDBERRIES_УТ.Форма.ДопФорма",,,,,,,РежимОткрытияокнаФормы.БлокироватьВесьИнтерфейс);
Нужно чтобы по нажатию кнопки ОК или ОТМЕНА в Доп Форме продолжалось выполнение кода
Нужно Так:
Форма открывается,
пользователь вводит значения,
после этого проверка,
закрытие формы
и ПРОДОЛЖЕНИЕ кода

после открытия формы код продолжается
Данные="";
ввестистроку(Данные,"Выберитеноменклатуру",ложь);

Сейчас я получаю окно доп формы открытое и ввести строку поверх формы открытой
Заранее спасибо
---
Шаг 1.
```1c
    Оповещение = Новый ОписаниеОповещения("КакоетоИмя", ЭтаФорма);
```

ОткрытьФорму("Обработка.API_WILDBERRIES_УТ.Форма.ДопФорма",,,,,,,РежимОткрытияокнаФормы.БлокироватьВесьИнтерфейс); - в одном из параметров передается созданное оповещение.
После вызова пишешь Возврат;

Шаг 2.

```1c
    &НаКлиенте
    Процедура КакоетоИмя(Результат, ДополнительныеПараметры) Экспорт
    Если Результат = Неопределено Тогда
    Возврат;
    КонецЕсли;

    // Обработка результат
    КонецПроцедуры
```

Шаг 3. В открываемой форме делаешь кнопку "ОК" или любую другую. В ее код помещаешь нечто такое:

```1c
    СтруктураЗакрытия = Новый Структура;
    СтруктураЗакрытия.Вставить("Значение1", Значение1);
    // можно и не структуру, а что удобно будет обрабатывать в дальнейшем.
    Закрыть(СтруктураЗакрытия);
```

В результате на шаге 2 получаем в переменной "Результат" структуру из шага 3.
---
Шаг 1.
```1c
    Оповещение = Новый ОписаниеОповещения("КакоетоИмя", ЭтаФорма);
```

ОткрытьФорму("Обработка.API_WILDBERRIES_УТ.Форма.ДопФорма",,,,,,,РежимОткрытияокнаФормы.БлокироватьВесьИнтерфейс); - в одном из параметров передается созданное оповещение.
После вызова пишешь Возврат;

Шаг 2.

```1c
    &НаКлиенте
    Процедура КакоетоИмя(Результат, ДополнительныеПараметры) Экспорт
    Если Результат = Неопределено Тогда
    Возврат;
    КонецЕсли;

    // Обработка результат
    КонецПроцедуры
```

Шаг 3. В открываемой форме делаешь кнопку "ОК" или любую другую. В ее код помещаешь нечто такое:

```1c
    СтруктураЗакрытия = Новый Структура;
    СтруктураЗакрытия.Вставить("Значение1", Значение1);
    // можно и не структуру, а что удобно будет обрабатывать в дальнейшем.
    Закрыть(СтруктураЗакрытия);
```

В результате на шаге 2 получаем в переменной "Результат" структуру из шага 3.
---
```1c
    Оповещение = Новый ОписаниеОповещения("КакоетоИмя", ЭтаФорма);
    Параметр = Новый Структура("Оповещение",Оповещение);
    ОткрытьФорму("Обработка.API_WILDBERRIES_УТ.Форма.ДопФорма",Параметр,,,,,,РежимОткрытияокнаФормы.БлокироватьВесьИнтерфейс);

    ***Здесь получаю ошибку
    по причине:
    Ошибка преобразования данных XDTO:
    Запись значения свойства 'val':
    форма: Элемент
    имя: {http://v8.1c.ru/8.2/mngsrv/ws}val
    по причине:
    Ошибка отображения типов:
    Отсутствует отображение для типа 'ОписаниеОповещения'
    ***
    и он не останавливается. Я пыталась делать через ПоказатьВводЗначения, тоже не помогло. Что нужно еще сделать?
    Похоже я очень сильно туплю((

    &НаКлиенте
    Процедура КакоетоИмя(Результат, ДополнительныеПараметры) Экспорт
    Если Результат = Неопределено Тогда
    Возврат;
    КонецЕсли;

    // Обработка результат
    КонецПроцедуры
```
---
ОткрытьФорму("Обработка.API_WILDBERRIES_УТ.Форма.ДопФорма",Параметр,,,,,,РежимОткрытияокнаФормы.БлокироватьВесьИнтерфейс);
заменить на

```1c
    ОткрытьФорму("Обработка.API_WILDBERRIES_УТ.Форма.ДопФорма",,,,,,Оповещение,РежимОткрытияокнаФормы.БлокироватьВесьИнтерфейс);
```
---
продолжает выполнение кода
---
ОткрытьФорму() - должно быть последним оператором в процедуре.
---
Внимательнее читать надо)
следовательно:

```1c
    ОткрытьФорму("Обработка.API_WILDBERRIES_УТ.Форма.ДопФорма",,,,,,Оповещение,РежимОткрытияокнаФормы.БлокироватьВесьИнтерфейс);
    Возврат;
```
---
Зачем писать Возврат?
---
Чтобы код дальше не выполнялся, если он есть. А если нет, то можно и не писать
---
Он и не будет выполняться, если это последняя строчка в процедуре.
А иначе - зачем писать последующий код, если перед ним жестоко написать Возврат?
---
ну судя по 8 ответу код там все же есть
---
И? То есть предлагаете оставить последующий говнокод, воткнув перед ним оператор Возврат?
---
код выполнялся дальше,разделила на разные процедуры,все ок,спасибо
---
в конфигураторе есть инструменты, которые могут помочь.

Пишите:

```1c
    ОткрытьФормуМодально("Обработка.API_WILDBERRIES_УТ.Форма.ДопФорма");
```

Далее, на слове ОткрытьФормуМодально нажимаете ПКМ, выбираете: Рефакторинг -> Нерекомендуемые серверные вызовы -> Преобразовать вызов.
Соглашаетесь с созданием новой процедуры и даете ей имя.
Все что нужно будет преобразовано в асинхронное выполнение.
---
при открытии заполнять параметр ОповещениеОЗакрытии
или прямо из формы оповещать, в форме, из которой открывается, ловить оповещение
---
вот пример

```1c
    &НаКлиенте
    Процедура Инструментарий(Команда)

    лкПараметры = Новый Структура("Событие", "ОбработкаВыбораКоманды");
    лкОповещение = Новый ОписаниеОповещения("ОбработчикОповещения", ЭтаФорма, лкПараметры);

    лкФорма = ОткрытьФорму("ВнешняяОбработка.КонсольЗапросовУФ.Форма.ФормаКоманд",,Этаформа,,,,лкОповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
    КонецПроцедуры
```
---
Может следует попробовать новые методы от 1С "Асинх и Ждать", которые Реализовано в версии 8.3.18.1128.
Сам не пробовал еще, но это как раз замена модальности. подробности тут

Заметки из Зазеркалья