ВнешнееСобытие() и ВводДоступен()

1. Re:аниматор 338 27.05.16 07:01 Сейчас в теме
Конфигурация УТ 10.3. Платформа: 1С:Предприятие 8.3 (8.3.4.496) и 1С:Предприятие 8.3 (8.3.8.1652) эффект одинаковый

Обработка содержит основную форму и произвольную. Добавлен код работы со сканером ШК.

В основной форме
Процедура ПриОткрытии()
	
	ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
...


Процедура ВнешнееСобытие(Источник, Событие, Данные)
	
	Если Не ВводДоступен() Тогда
		Возврат;
	КонецЕсли;
	
	ПолучитьСерверТО().ОбработатьВнешнееСобытие(Источник, Событие, Данные, ЭтаФорма);
	
КонецПроцедуры
Показать


все работает, при сканировании в основной форме открывается произвольная там тоже обработка сканера ШК

В произвольной форме
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
	
	ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
	
КонецПроцедуры


Процедура ВнешнееСобытие(Источник, Событие, Данные)
	
	Если Не ВводДоступен() Тогда
		Возврат;
	КонецЕсли;
	
	ПолучитьСерверТО().ОбработатьВнешнееСобытие(Источник, Событие, Данные, ЭтаФорма);
	
КонецПроцедуры
Показать


На локальном компьютере более менее работает из 10 сканирований 1 раз в ПРОИЗВОЛЬНОЙ форме почему то срабатывает внешнее событие ОСНОВНОЙ формы
а вот в терминале цитрикс всегда в сканировании в ПРОИЗВОЛЬНОЙ форме срабатывает внешнее событие в ОСНОВНОЙ форме.

по сути метод "ВводДоступен()" не работает.. или ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма); для ПРОИЗВОЛЬНОЙ формы


Сейчас активное окно ПРОИЗВОЛЬНОЙ формы срабатывает внешнее событие ОСНОВНОЙ формы которое не активное. После закрытия ПРОИЗВОЛЬНОЙ формы вылазит куча новых ПРОИЗВОЛЬНЫХ по кол-ву раз сканирования сканера ШК.

Пробывал методы ".Открыта()", "Активизировать" При открытии\перед открытием подключать клиента. Создание своих переменных "СканерНеДоступен" Истина\Ложь. Перепробывал ВСЁ! не работает

как в 1 обработке для разных форм обрабатывать внешние события от сканера?

P.S. код взят с документа "Чек ККМ", там есть основная форма "ФормаДокумента" и произвольная "ФормаАвторизации". Обработка аналогичная этим методам.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. free-lancer-2018 179 14.01.19 19:14 Сейчас в теме
ВводДоступен() в режиме отладки всегда выдает Ложь (есть такая инфа)
Oxygraphis; murat_; i4ii4i; METAL; wolder; +5 Ответить
3. wolder 131 25.02.20 10:05 Сейчас в теме
(2)
ладки всегда выдает Ложь (есть такая инфа)
Подтверждаю!!
17. Monex 21.12.22 06:18 Сейчас в теме
(3) Подтверждение ложное, полагаю в силу незнания )
16. Monex 21.12.22 06:17 Сейчас в теме
(2) Инфа ложная. ВводДоступен() в отладке выдает Ложь только в 2х случаях - вызов функции происходит из неактивной формы или вы додумались в отладке установить точку остановки на строке с этой функцией и тогда при ее достижении платформа переключает фокус на окно конфигуратора, что лишает пользователя возможности ввода в форму вызова.
user889714; SuperSpade; +2 Ответить
19. SuperSpade 04.04.23 13:34 Сейчас в теме
(16)Вот я как раз "додумался" в отладке поставить точку именно на "ВводДоступен()" в результате, когда убрал точку - стало работать как Истина.
Спасибо за наводку.
4. METAL 290 16.07.21 14:30 Сейчас в теме
Интересно, можно ли реализовать данный сценарий без использования ВводДоступен() ?
5. nomad_irk 76 16.07.21 14:54 Сейчас в теме
(4)отключить при возможности ВводДоступен() на момент отладки.
6. METAL 290 16.07.21 15:10 Сейчас в теме
(5) Я немного о другом.
Есть основная форма, которая "ловит" сканы через ВнешнееСобытие()
Есть дополнительные формы, которые открываются модально из основной для дополнительных операций, и тоже используют сканер, при этом скан в дополнительной формы не должен обрабатывать ВнешнееСобытие() основной формы. Для этого в основной форме прописано
Если Не ВводДоступен() Тогда
     Возврат;
КонецЕсли;

Чем это плохо: Если сеанс 1С по каким-то причинам станет неактивен и потеряет фокус (когда открыта только основная форма, без дополнительных), и в этот момент будет скан ШК - этот скан будет утерян.
Полная версия здесь https://forum.infostart.ru/forum28/topic265662/
7. nomad_irk 76 16.07.21 16:40 Сейчас в теме
(6)если срабатывает обработка оповещения основной формы при модально открытой доп. форме, то вероятно, что в момент сканирования фокус перемещается таки на основную форму. Почему так происходит, думаю, вам мало кто сможет ответить, в том числе и разработчики платформы.

Так понимаю, выходом из ситуации будет открытие доп. формы с закрытием основной и открытие основной с закрытием доп. формы.
8. METAL 290 16.07.21 17:21 Сейчас в теме
(7) Так работает сканер через COM. Даже если приложение 1С будет свёрнуто (без фокуса) - скан до РМК всё равно доходит, фокус при этом на основную форму не перемещается. Это нормально и ожидаемо. Но из-за приведённого фрагмента кода с ВводДоступен() ВнешнееСобытие сразу завершается. Загадок тут никаких нет, тем более для разработчиков платформы.
Вопрос в другом, возврат по "НЕ ВводДоступен()" нам сейчас мешает, пытаемся переделать.
9. nomad_irk 76 16.07.21 17:31 Сейчас в теме
(8)загадка тут ровно в том, почему модально открытая доп. форма теряет фокус и его приобретает основная форма.

даже если сделать

Если ВводДоступен() Тогда
Что-то там делаем:
КонецЕсли;

то это точно так же будет глючить

Если не проверять фокус на форме, то сканить будет в любую из открытых форм на момент сканирования.

Тут нужно внешнюю компоненту переделывать, чтобы можно было в нее уникальный идентификатор формы передать и чтобы потом по этому идентификатору определялся нужный обработчик оповещения.
10. METAL 290 16.07.21 17:43 Сейчас в теме
(9)
загадка тут ровно в том, почему модально открытая доп. форма теряет фокус и его приобретает основная форма

модально открытая доп. форма фокус не теряет
11. nomad_irk 76 16.07.21 17:48 Сейчас в теме
(10)в таком случае почему сканирование происходит в основную форму вместо дополнительной?
12. METAL 290 16.07.21 17:52 Сейчас в теме
(11) так устроена эта подсистема, ВнешнееСобытие() срабатывает во всех открытых формах, где было выполнено ТОСервер.ПодключитьКлиента(ЭтаФорма)
13. nomad_irk 76 16.07.21 17:55 Сейчас в теме
(12) это известно, но результат сканирования присваивается только если ВводДоступен().

или в данном случае речь идет про то, что результат вообще никуда не попадает потому что фокус на доп форме, а сработала обработка оповещения основной формы?
14. METAL 290 16.07.21 17:58 Сейчас в теме
(13)
результат сканирования присваивается только если ВводДоступен()

Вот от этого мы и хотим избавиться, почему и зачем, полную предысторию я привёл по ссылке
15. nomad_irk 76 16.07.21 20:02 Сейчас в теме
(14)я читал по ссылке ваши проблемы, вы сами говорите о том, что если убрать проверку ВводДоступен() то результат сканирования попадает из черти-каких-форм в РМК.

Отказаться от ВводДоступен() вряд ли получится, т.к. платформа 1С только таким способом понимает, что фокус на форме и результат сканирования можно передавать в поле формы.
18. Torin 754 21.12.22 07:24 Сейчас в теме
"Если обработка внешних событий в модуле формы зависит от активности формы (например, используется метод ВводДоступен()), то при появлении модального диалога обработка будет прекращена, так как форма становится неактивной." >>>>>>
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот