Добрый день.
Проблема: Перед записью документа открывается модальная форма (обычные формы) для ввода штрихкода пользователя. Штрихкод подхватывается внешним событием (в сканере все настроено как надо). В итоге когда сканируем ШК ничего не происходит, либо срабатывает ВС из основной формы.
В соседних темах читал про подобный косяк. там пишут, что обработка ожидания нужна для запуска модальных форм, только как ее применить не понял.
---
ЭтаФормаПросмотр=Истина;
или
Создайте глобальную переменную Флаг и пусть она будет управлять
---
спасибо) глобальная переменная решает)
В общем добавил в модуль объекта экспортную переменную НеВыполнятьВС и ставлю ей значение "истина" перед открытием мод.окна и возвращаю "ложь" после его закрытия. В ВС основной формы проверяю данную переменную
---
Во время вызова модальной формы, в основной вызвать
ЗаблокироватьДанныеФормыДляРедактирования();

При обработке внешнего события проверять доступность формы как в управляемых формах

ВводДоступен()

http://prntscr.com/ullfxo - типовой код управляемых форм
зы после обработки не забыть разблокировать

РазблокироватьДанныеФормыДляРедактирования()
---
ЗаблокироватьДанныеФормыДляРедактирования();
На обычных формах по моему такой метод недоступен
---
Возможно. Введите переменную.

НеОбрабатыватьВЭтойФормеВнешнееСобытие = Истина;
Результат = ОткрытьФормуМодально(ИмяФормы);
НеОбрабатыватьВЭтойФормеВнешнееСобытие = Ложь;

в ОбработкаОповещения:

```1c
    Если Источник = "ПодключаемоеОборудование" И НеОбрабатыватьВЭтойФормеВнешнееСобытие = Ложь Тогда
    Если ИмяСобытия = "ScanData" И МенеджерОборудованияУТКлиент.ЕстьНеобработанноеСобытие() Тогда
    ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр));
    КонецЕсли;
    КонецЕсли;
```
---
Если Источник = "ПодключаемоеОборудование" И НеОбрабатыватьВЭтойФормеВнешнееСобытие = Ложь Тогда
        Если ИмяСобытия = "ScanData" И МенеджерОборудованияУТКлиент.ЕстьНеобработанноеСобытие() Тогда
            ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр));
        КонецЕсли;
    КонецЕсли;

Обработка оповещения в основной форме? или в модальной?
---
Это в основной.

Подключаемое оборудование при получении данных из компоненты устанавливает переменную глПодключаемоеОборудованиеСобытиеОбработано = Ложь, и оповещает все формы о событии. Первая форма, которая обработает событие, установит глобальную переменную глПодключаемоеОборудованиеСобытиеОбработано = Истина; (возможно в вашей конфигурации переменная несколько иначе называется), чтобы это событие не обрабатывалось повторно.

Смысл того, что я написал в том, чтобы основная форма не обрабатывала событие, пока открыта модальная. Сомневаюсь, что какие то обработчики ожидания помогут вам решить вашу проблему. Если можете, пришлите ссылку на эту тему, я прочитаю и подумаю, что там предлагают
---
Если можете, пришлите ссылку на эту тему, я прочитаю и подумаю, что там предлагают

Извините. что с запозданием. Был занят
https://forum.infostart.ru/forum9/topic138505/
---
Если речь шла об этом

у себя обошел эту проблему открытием формы модально, но из обработчика ожидания.
т.е. даем завершится внешнему событию.
Подключаем в нем обработчик ожидания на открытие модальной формы. И все работает.

то видимо человек ловит внешнее событие и сразу после него пытается открыть модальное окно.
Если я правильно вас понял, то у вас уже открыто модальное окно, и в нем нужно обработать внешнее событие.

К слову, где то ниже сказали о том, что в основной форме хорошо бы отключить ТО. Т.е в событии при закрытии должна быть строчка, которая отключает ТО от формы. Ее бы тоже вызвать не мешало бы перед открытием модальной формы, а после вызвать подключение ТО назад.
---
ЭтаФормаПросмотр=Истина;
или
Создайте глобальную переменную Флаг и пусть она будет управлять
---
ЭтаФормаПросмотр=Истина;

Доступность формы никак не влияет на внешнее событие
---
спасибо) глобальная переменная решает)
В общем добавил в модуль объекта экспортную переменную НеВыполнятьВС и ставлю ей значение "истина" перед открытием мод.окна и возвращаю "ложь" после его закрытия. В ВС основной формы проверяю данную переменную
---
Штрихкод подхватывается внешним событием
У ВС есть дополнительные параметры, добавь условие чтоб отработало только в открытой форме
---
Должно быть

По примеру УТ из Реализации Товаров и услуг можно посмотреть как делается
При открытии

```1c
    ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
```

При закрытии

```1c
    ПолучитьСерверТО().ОтключитьКлиента(ЭтаФорма);
```

Внешнее событие вставляешь условие

```1c
    Если Источник="Сканер штрихкода" и Событие="ПолученШтрихкод" Тогда
    ПолучитьСерверТО().ОбработатьВведенныйШтрихкод(Штрихкод, ЭтаФорма);
```

Типовой код обработки штрихкода

```1c
    Функция ПоддерживаетсяВидТО(Вид) Экспорт

    Результат = Ложь;

    Если Вид = Перечисления.ВидыТорговогоОборудования.СканерШтрихКода
    Или Вид = Перечисления.ВидыТорговогоОборудования.СчитывательМагнитныхКарт
    Или Вид = Перечисления.ВидыТорговогоОборудования.ТерминалСбораДанных
    Или Вид = Перечисления.ВидыТорговогоОборудования.СчитывательRFIDМеток
    Или Вид = Перечисления.ВидыТорговогоОборудования.ККТ Тогда
    Результат = Истина;
    КонецЕсли;

    Возврат Результат;

    КонецФункции

    Функция СШКНоменклатура(Номенклатура, Характеристика, Серия, Качество,
    Единица, Количество, СШК) Экспорт

    Результат = Истина;
    СтруктураПодбора = РаботаСТорговымОборудованием.СформироватьСтруктуруПодбора(неопределено, Номенклатура, Характеристика,
    Серия, неопределено, Единица,
    Количество, неопределено,
    Неопределено, неопределено,
    неопределено, , неопределено, неопределено);

    Возврат Результат;
    КонецФункции // СШКНоменклатура()

    Функция СШКНеизвестныйКод(Штрихкод, ТипКода, СШК) Экспорт

    Возврат Ложь;

    КонецФункции // СШКНеизвестныйКод()

    Процедура СШКОшибка(Ошибка, Штрихкод, ТипШК, СШК) Экспорт
    ГлобПроверкаОшибки=Ложь;
    Текст = ПолучитьСерверТО().ПолучитьТекстОшибкиСШКТО(Ошибка, Штрихкод, ТипШК);
    ОшибочныйШтрихкод=Текст;
    Сигнал();
    Если Вопрос(Текст,РежимДиалогаВопрос.ОК) = КодВозвратаДиалога.ОК тогда
    ГлобПроверкаОшибки=Истина;
    КонецЕсли;

    КонецПроцедуры // СШКОшибка()
```
---
забыл
Добавить реквизиты формы ИспользоватьПодключаемоеОборудование (Булево), ПоддерживаемыеТипыПодключаемогоОборудования (Строка).
---
Если срабатывает процедура ВнешнееСобытие в основной форме, видимо там после этого происходит что-то блокирующее.
Обычно происходит вызов этой процедуры во всех открытых формах, где она прописана в свойствах. (Но глюки тоже случаются, не редко)

Как уже писали выше, в модуле основной формы добавить ВводДоступен()

Например так

```1c
    Процедура ВнешнееСобытие(Источник, Событие, Данные)
    Если Не ВводДоступен() Тогда
    Возврат;
    КонецЕсли;
```

Ну и в свойствах формы ввода ШК в разделе Событий, проверьте выбрана ли процедура для ВнешнегоСобытия.