Столкнулся со странным багом.
Внешняя обработка на УФ.
Два реквизита на форме - строка и число (15,3).
При открытии подключается обработчик ожидания с интервалом 0,1 сек.
В обработчике переменной числу присваивается какое-то значение.
И тут происходит фигня.
Перезаписывается пустым значение переменная строки.
Подскажите, плиз, что происходит? А то кукуха собралась улетать.
(21) Да ладно. Старые костыли всегда уютнее новых. Поставь свойство "ОбновлениеТекстаРедактирования" у поля со строкой в "При изменении значения" или "Не использовать" и пользуйся на здоровье тем что есть.
(8) Я уже ниже написал.
Только таким образом можно добиться интервала 0.1 секунда. Смотрите документацию. Последний параметр Истина указывает на разовый вызов ожидания
Нет никакого зацикливания
Даже если так сделать, то ничего не поменяется
&НаКлиенте
Процедура ОбработкаОжидания() Экспорт
ТекущийВес = 111;
КонецПроцедуры
(9) про 3 параметр однократность я в курсе.
Но вы не понимаете что написали.
Вы однократно выполнили код при открытии.
Далее код вызвал процедуру и закончился.
Но в этом коде снова вызов однократный процедуры.
И она снова однократно ее вызывает это называется рекурсия. Если бы вы 3 параметр в ложь поставили, у вас скорее всего 1С вообще бы зависла)))
(15) Ну все правильно. Мне нужно с частотой 0.1 секунда опрашивать весы.
Можно каким-то другим способом это решить?
Да и не рекурсия это. Пока код обработчика не выполнится - другой обработчик одновременно не запуститься.
(18) Мой драйвер для весов не создает внешнее событие.
И потом, это все работает нормально. Данные с весов успешно снимаются.
Просто вдруг обнаружилось, что нельзя на форме ввести строковые или числовые поля.
(19) это стандартное явление, что фокус сбивается.
Делайте драйвер по стандартам через внешнее событие и околесицу городить не придется. И типовые будут с коробки работать!
Кстати драйвер на чем пишите?
Хочу на джаве учиться такие вещи писать.
Если говорить конкретно про пример, который вы приложили внешней обработкой, то из-за обработчика ожидания не отрабатывает событие присвоения значения реквизиту ШК. Это событие возникает в момент перевода фокуса на другой элемент формы.
(5) Могу подсказать в зависимости от задачи, которую решаете. Тот пример, который в обработке, он бессмысленный. И хорошего решение для него одно. Не использовать обработчик ожидания.
(10) Задача простая. АРМ взвешивания туш. Обработчик ожидания должен снимать данные с весов реальном времени.
В реальной задаче в реквизит ТекущийВес пишутся данные полученные с весов.
Такой интервал нужен для большей точности при взвешивании.
Но даже если поставить секунду, то в строковый (или числовой) реквизит все равно ничего не ввести руками.
Даже если я реквизит ТекущийВес не выношу на форму, но пишу в него. Все равно не дает вносить данные руками в другие строковые или числовые реквизиты на форме.
(12) Как минимум, логику получения данных с весов надо реализовывать на стороне сервера. Не стоит клиенту напрямую отдавать эти данные.
Обработчик ожидания для сбора данных - так себе решение. Более правильно было бы организовать между сервером 1С и клиентским сеансом сокет, и траслировать данные с сервера. И не стоит забывать, что у клиента 1С с асинхронностью есть проблемы.
(14) (13) Точность нужна в реальном времени. Операторы должны видеть вес, который у них лежит на весах.
Не представляю, как я могу обработать на сервере получение данных с весов. Весов много, они разные. Подключены к разным ПК по COM порту. Для каждого типа весов свой драйвер. Соответственно самым очевидным решением выглядит считывать данные с весов на клиенте.
Так концептуально менять архитектуру всей системы из-за того, что фокус пропадает - ну это совсем не рационально, на мой взгляд.
К тому же у же несколько АРМов уже так работают без проблем. Просто весь ввод был организован через тачскрины и не было необходимости вручную заполнять какие-то поля на форме.
А тут вдруг такой сюрприз. Почему вообще при записи в реквизит формы внутри обработчика ожидания пропадает фокус? Это баг или фича?
Обработчик ожидания должен снимать данные с весов реальном времени
Обработчик ожидания весьма далек от реального времени так как вызывается во время простоя программы через указанные временные интервалы. Т.е. если активно шуровать мышкой, то обработчик может и не запускаться "в реальном времени". От лукавого это все для вашей задачи.
(20) Весы подключены по COM порту к клиентскому ПК. Есть драйвер весов. У драйвера есть метод Update(), после выполнения которого можно прочитать поле Weight.
Я ничего лучше не придумал, чем выполнять опрос обработчиком ожидания.
Точности при таком методе для предприятия достаточно.
Работает уже 10 лет (просто раньше было на обычных формах).
(21) Да ладно. Старые костыли всегда уютнее новых. Поставь свойство "ОбновлениеТекстаРедактирования" у поля со строкой в "При изменении значения" или "Не использовать" и пользуйся на здоровье тем что есть.
Примечание:
В режиме совместимости конфигурации Версия8_2_13 не влияет на поведение поля ввода управляемой формы.
В остальных случаях влияет на то, в каких ситуациях будет обновляться текст в поле ввода при установке значения.
(32)Весь гемор был при переходе на новую версию совместимости был связан с закрытием форы, только на клиенте. Что при закрытии программы нельзя вызывать серверные вызовы. А все типовые формы выполняли отключение подключаемого оборудования на сервере. Т.к. что было сложновато, да и не во всех формах сделали)