Всех приветствую!
Столкнулся со странным багом.
Внешняя обработка на УФ.
Два реквизита на форме - строка и число (15,3).
При открытии подключается обработчик ожидания с интервалом 0,1 сек.
В обработчике переменной числу присваивается какое-то значение.
И тут происходит фигня.
Перезаписывается пустым значение переменная строки.
Подскажите, плиз, что происходит? А то кукуха собралась улетать.
Релиз 1С - 8.3.10.2772.
Текст обработки:
Столкнулся со странным багом.
Внешняя обработка на УФ.
Два реквизита на форме - строка и число (15,3).
При открытии подключается обработчик ожидания с интервалом 0,1 сек.
В обработчике переменной числу присваивается какое-то значение.
И тут происходит фигня.
Перезаписывается пустым значение переменная строки.
Подскажите, плиз, что происходит? А то кукуха собралась улетать.
Релиз 1С - 8.3.10.2772.
Текст обработки:
&НаКлиенте
Процедура ОбработкаОжидания() Экспорт
ТекущийВес = 111;
ПодключитьОбработчикОжидания("ОбработкаОжидания", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключитьОбработчикОжидания("ОбработкаОжидания", 0.1, Истина);
КонецПроцедуры
ПоказатьПрикрепленные файлы:
БредСобачий.epf
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(8) Я уже ниже написал.
Только таким образом можно добиться интервала 0.1 секунда. Смотрите документацию. Последний параметр Истина указывает на разовый вызов ожидания
Нет никакого зацикливания
Даже если так сделать, то ничего не поменяется
&НаКлиенте
Процедура ОбработкаОжидания() Экспорт
ТекущийВес = 111;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключитьОбработчикОжидания("ОбработкаОжидания", 1, Ложь);
КонецПроцедуры
Только таким образом можно добиться интервала 0.1 секунда. Смотрите документацию. Последний параметр Истина указывает на разовый вызов ожидания
Нет никакого зацикливания
Даже если так сделать, то ничего не поменяется
&НаКлиенте
Процедура ОбработкаОжидания() Экспорт
ТекущийВес = 111;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПодключитьОбработчикОжидания("ОбработкаОжидания", 1, Ложь);
КонецПроцедуры
(9) про 3 параметр однократность я в курсе.
Но вы не понимаете что написали.
Вы однократно выполнили код при открытии.
Далее код вызвал процедуру и закончился.
Но в этом коде снова вызов однократный процедуры.
И она снова однократно ее вызывает это называется рекурсия. Если бы вы 3 параметр в ложь поставили, у вас скорее всего 1С вообще бы зависла)))
Но вы не понимаете что написали.
Вы однократно выполнили код при открытии.
Далее код вызвал процедуру и закончился.
Но в этом коде снова вызов однократный процедуры.
И она снова однократно ее вызывает это называется рекурсия. Если бы вы 3 параметр в ложь поставили, у вас скорее всего 1С вообще бы зависла)))
(19) это стандартное явление, что фокус сбивается.
Делайте драйвер по стандартам через внешнее событие и околесицу городить не придется. И типовые будут с коробки работать!
Кстати драйвер на чем пишите?
Хочу на джаве учиться такие вещи писать.
Делайте драйвер по стандартам через внешнее событие и околесицу городить не придется. И типовые будут с коробки работать!
Кстати драйвер на чем пишите?
Хочу на джаве учиться такие вещи писать.
Если говорить конкретно про пример, который вы приложили внешней обработкой, то из-за обработчика ожидания не отрабатывает событие присвоения значения реквизиту ШК. Это событие возникает в момент перевода фокуса на другой элемент формы.
(10) Задача простая. АРМ взвешивания туш. Обработчик ожидания должен снимать данные с весов реальном времени.
В реальной задаче в реквизит ТекущийВес пишутся данные полученные с весов.
Такой интервал нужен для большей точности при взвешивании.
Но даже если поставить секунду, то в строковый (или числовой) реквизит все равно ничего не ввести руками.
Даже если я реквизит ТекущийВес не выношу на форму, но пишу в него. Все равно не дает вносить данные руками в другие строковые или числовые реквизиты на форме.
В реальной задаче в реквизит ТекущийВес пишутся данные полученные с весов.
Такой интервал нужен для большей точности при взвешивании.
Но даже если поставить секунду, то в строковый (или числовой) реквизит все равно ничего не ввести руками.
Даже если я реквизит ТекущийВес не выношу на форму, но пишу в него. Все равно не дает вносить данные руками в другие строковые или числовые реквизиты на форме.
(12) Как минимум, логику получения данных с весов надо реализовывать на стороне сервера. Не стоит клиенту напрямую отдавать эти данные.
Обработчик ожидания для сбора данных - так себе решение. Более правильно было бы организовать между сервером 1С и клиентским сеансом сокет, и траслировать данные с сервера. И не стоит забывать, что у клиента 1С с асинхронностью есть проблемы.
Может быть вам может помочь это .
Обработчик ожидания для сбора данных - так себе решение. Более правильно было бы организовать между сервером 1С и клиентским сеансом сокет, и траслировать данные с сервера. И не стоит забывать, что у клиента 1С с асинхронностью есть проблемы.
Может быть вам может помочь это .
(14) (13) Точность нужна в реальном времени. Операторы должны видеть вес, который у них лежит на весах.
Не представляю, как я могу обработать на сервере получение данных с весов. Весов много, они разные. Подключены к разным ПК по COM порту. Для каждого типа весов свой драйвер. Соответственно самым очевидным решением выглядит считывать данные с весов на клиенте.
Так концептуально менять архитектуру всей системы из-за того, что фокус пропадает - ну это совсем не рационально, на мой взгляд.
К тому же у же несколько АРМов уже так работают без проблем. Просто весь ввод был организован через тачскрины и не было необходимости вручную заполнять какие-то поля на форме.
А тут вдруг такой сюрприз. Почему вообще при записи в реквизит формы внутри обработчика ожидания пропадает фокус? Это баг или фича?
может дело в релизе платформы?
Не представляю, как я могу обработать на сервере получение данных с весов. Весов много, они разные. Подключены к разным ПК по COM порту. Для каждого типа весов свой драйвер. Соответственно самым очевидным решением выглядит считывать данные с весов на клиенте.
Так концептуально менять архитектуру всей системы из-за того, что фокус пропадает - ну это совсем не рационально, на мой взгляд.
К тому же у же несколько АРМов уже так работают без проблем. Просто весь ввод был организован через тачскрины и не было необходимости вручную заполнять какие-то поля на форме.
А тут вдруг такой сюрприз. Почему вообще при записи в реквизит формы внутри обработчика ожидания пропадает фокус? Это баг или фича?
может дело в релизе платформы?
(12)
Обработчик ожидания весьма далек от реального времени так как вызывается во время простоя программы через указанные временные интервалы. Т.е. если активно шуровать мышкой, то обработчик может и не запускаться "в реальном времени". От лукавого это все для вашей задачи.
Обработчик ожидания должен снимать данные с весов реальном времени
Обработчик ожидания весьма далек от реального времени так как вызывается во время простоя программы через указанные временные интервалы. Т.е. если активно шуровать мышкой, то обработчик может и не запускаться "в реальном времени". От лукавого это все для вашей задачи.
(20) Весы подключены по COM порту к клиентскому ПК. Есть драйвер весов. У драйвера есть метод Update(), после выполнения которого можно прочитать поле Weight.
Я ничего лучше не придумал, чем выполнять опрос обработчиком ожидания.
Точности при таком методе для предприятия достаточно.
Работает уже 10 лет (просто раньше было на обычных формах).
Вы можете предложить лучшее решение?
Я ничего лучше не придумал, чем выполнять опрос обработчиком ожидания.
Точности при таком методе для предприятия достаточно.
Работает уже 10 лет (просто раньше было на обычных формах).
Вы можете предложить лучшее решение?
(28)Из синтакс-помощника по свойству:
Примечание:
В режиме совместимости конфигурации Версия8_2_13 не влияет на поведение поля ввода управляемой формы.
В остальных случаях влияет на то, в каких ситуациях будет обновляться текст в поле ввода при установке значения.
В режиме совместимости конфигурации Версия8_2_13 не влияет на поведение поля ввода управляемой формы.
В остальных случаях влияет на то, в каких ситуациях будет обновляться текст в поле ввода при установке значения.
(32)Весь гемор был при переходе на новую версию совместимости был связан с закрытием форы, только на клиенте. Что при закрытии программы нельзя вызывать серверные вызовы. А все типовые формы выполняли отключение подключаемого оборудования на сервере. Т.к. что было сложновато, да и не во всех формах сделали)
Значение веса можно выводить не реквизит формы, а в поле HTML.
&НаКлиенте
Процедура ОбработкаОжидания() Экспорт
//ТекущийВес = 111;
ГСЧ = Новый ГенераторСлучайныхЧисел;
Элементы.Реквизит1.Документ.showWeight(ГСЧ.СлучайноеЧисло());
ПодключитьОбработчикОжидания("ОбработкаОжидания", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Реквизит1 =
"<ht ml>
| <sc ript language='JavaScript' type='text/javascript'>
| document.showWeight = function(weight) {document.body.innerHTML = weight};
| </sc ript>
|</html>";
ПодключитьОбработчикОжидания("ОбработкаОжидания", 0.1, Истина);
КонецПроцедуры ПоказатьПрикрепленные файлы:
БредСобачий.epf
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот
