Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Не ВводДоступен() Тогда
Возврат;
КонецЕсли;
ПолучитьСерверТО().ОбработатьВнешнееСобытие(Источник, Событие, Данные, ЭтаФорма);
КонецПроцедуры
Показать
все работает, при сканировании в основной форме открывается произвольная там тоже обработка сканера ШК
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Не ВводДоступен() Тогда
Возврат;
КонецЕсли;
ПолучитьСерверТО().ОбработатьВнешнееСобытие(Источник, Событие, Данные, ЭтаФорма);
КонецПроцедуры
Показать
На локальном компьютере более менее работает из 10 сканирований 1 раз в ПРОИЗВОЛЬНОЙ форме почему то срабатывает внешнее событие ОСНОВНОЙ формы
а вот в терминале цитрикс всегда в сканировании в ПРОИЗВОЛЬНОЙ форме срабатывает внешнее событие в ОСНОВНОЙ форме.
по сути метод "ВводДоступен()" не работает.. или ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма); для ПРОИЗВОЛЬНОЙ формы
Сейчас активное окно ПРОИЗВОЛЬНОЙ формы срабатывает внешнее событие ОСНОВНОЙ формы которое не активное. После закрытия ПРОИЗВОЛЬНОЙ формы вылазит куча новых ПРОИЗВОЛЬНЫХ по кол-ву раз сканирования сканера ШК.
Пробывал методы ".Открыта()", "Активизировать" При открытии\перед открытием подключать клиента. Создание своих переменных "СканерНеДоступен" Истина\Ложь. Перепробывал ВСЁ! не работает
как в 1 обработке для разных форм обрабатывать внешние события от сканера?
P.S. код взят с документа "Чек ККМ", там есть основная форма "ФормаДокумента" и произвольная "ФормаАвторизации". Обработка аналогичная этим методам.
(2) Инфа ложная. ВводДоступен() в отладке выдает Ложь только в 2х случаях - вызов функции происходит из неактивной формы или вы додумались в отладке установить точку остановки на строке с этой функцией и тогда при ее достижении платформа переключает фокус на окно конфигуратора, что лишает пользователя возможности ввода в форму вызова.
(16)Вот я как раз "додумался" в отладке поставить точку именно на "ВводДоступен()" в результате, когда убрал точку - стало работать как Истина.
Спасибо за наводку.
(5) Я немного о другом.
Есть основная форма, которая "ловит" сканы через ВнешнееСобытие()
Есть дополнительные формы, которые открываются модально из основной для дополнительных операций, и тоже используют сканер, при этом скан в дополнительной формы не должен обрабатывать ВнешнееСобытие() основной формы. Для этого в основной форме прописано
Если Не ВводДоступен() Тогда
Возврат;
КонецЕсли;
Чем это плохо: Если сеанс 1С по каким-то причинам станет неактивен и потеряет фокус (когда открыта только основная форма, без дополнительных), и в этот момент будет скан ШК - этот скан будет утерян.
Полная версия здесь https://forum.infostart.ru/forum28/topic265662/
(6)если срабатывает обработка оповещения основной формы при модально открытой доп. форме, то вероятно, что в момент сканирования фокус перемещается таки на основную форму. Почему так происходит, думаю, вам мало кто сможет ответить, в том числе и разработчики платформы.
Так понимаю, выходом из ситуации будет открытие доп. формы с закрытием основной и открытие основной с закрытием доп. формы.
(7) Так работает сканер через COM. Даже если приложение 1С будет свёрнуто (без фокуса) - скан до РМК всё равно доходит, фокус при этом на основную форму не перемещается. Это нормально и ожидаемо. Но из-за приведённого фрагмента кода с ВводДоступен() ВнешнееСобытие сразу завершается. Загадок тут никаких нет, тем более для разработчиков платформы.
Вопрос в другом, возврат по "НЕ ВводДоступен()" нам сейчас мешает, пытаемся переделать.
(8)загадка тут ровно в том, почему модально открытая доп. форма теряет фокус и его приобретает основная форма.
даже если сделать
Если ВводДоступен() Тогда
Что-то там делаем:
КонецЕсли;
то это точно так же будет глючить
Если не проверять фокус на форме, то сканить будет в любую из открытых форм на момент сканирования.
Тут нужно внешнюю компоненту переделывать, чтобы можно было в нее уникальный идентификатор формы передать и чтобы потом по этому идентификатору определялся нужный обработчик оповещения.
(12) это известно, но результат сканирования присваивается только если ВводДоступен().
или в данном случае речь идет про то, что результат вообще никуда не попадает потому что фокус на доп форме, а сработала обработка оповещения основной формы?
(14)я читал по ссылке ваши проблемы, вы сами говорите о том, что если убрать проверку ВводДоступен() то результат сканирования попадает из черти-каких-форм в РМК.
Отказаться от ВводДоступен() вряд ли получится, т.к. платформа 1С только таким способом понимает, что фокус на форме и результат сканирования можно передавать в поле формы.
"Если обработка внешних событий в модуле формы зависит от активности формы (например, используется метод ВводДоступен()), то при появлении модального диалога обработка будет прекращена, так как форма становится неактивной." >>>>>>