|
Динамически обновляемые данные на управляемой форме? | ☑ | ||
---|---|---|---|---|
0
bigdenis22
31.03.25
✎
15:36
|
Есть необходимость выводить на форме документа динамически обновляемые данные (1-2 раза в секунду), такие как вес с весов или температура с бесконтактного термометра.
Проблема в том, что когда я задаю значение для реквизита или заголовок для декорации: ЭтаФорма.текВес = Число(Вес); Элементы.НадписьВес.Заголовок = Число(Вес); - происходит перерисовка всей формы, и если пользователь пытается редактировать какой-то элемент, - то значение сбрасывается в изначальное. Как обновить отдельный элемент формы, не перерисовывая всю форму? - Я не нашел. (И возможно ли это вообще?) Я читал, что с такой же проблемой столкнулись люди, которые пытались вывести часы/таймер на форму, но решений так и не увидел. ЗЫ платформа 8.3.18, режим совместимости 8.2.16 |
|||
1
Fragster
гуру
31.03.25
✎
15:42
|
использовать не заголовок а реквизит с типом элемента управления "надпись"
|
|||
2
bigdenis22
31.03.25
✎
16:08
|
(1) Реквизит формы с типом число, элемент диалога Поле с видом "поле надписи" - таже самая петруха - форма перерисовывается, редактирование сбрасывается.
Или я не правильно вас понял? У меня в элементах диалога нет типа "Надпись". |
|||
3
Fragster
гуру
31.03.25
✎
16:15
|
(2) в коде из (0) устанавливается Заголовок. Надо убрать это.
при изменении реквизита на клиенте форма не "перерисовывается". И вообще - это не "перерисовывание", а контекстное хождение на сервер - вот при возврате оно так и происходит. в некоторых случаях от хождения на сервер не избавится, тогда спасет свойство поля ввода ОбновлениеТекстаРедактирования (но это костыль, правильнее избавиться от вызова сервера, а это изменение видимости, изменение заголовков, сортировки всякие и пр.) |
|||
4
bigdenis22
31.03.25
✎
16:31
|
(3) извиняюсь, забыл добавить в (2):
строку Элементы.НадписьВес.Заголовок = Число(Вес); закоментировал, для числового реквизита "текВес" элемент диалога "поле", с видом "Поле надписи", как уже сказал выше, ситуация не поменялась. Или может значение надо как-то иначе задавать, чем ЭтаФорма.текВес = Число(Вес); ? Я предполагал, что при обращении к "ЭтаФорма" и происходит "хождение на сервер" за колекцией элементов формы... - не, не прав? Как избавиться от хождения на сервер? Посмотрю про "ОбновлениеТекстаРедактирования", если есть примеры - буду признателен. |
|||
5
Мультук
гуру
31.03.25
✎
16:35
|
(0)
Небольшой вопрос. А откуда на форме берется собственно вес ? При этом аж 2 раза в секунду. Он появляется чудодейственным образом ? или ПодключитьОбработчикОжидания ? |
|||
6
bigdenis22
31.03.25
✎
16:40
|
(5) да, через
... ПодключитьОбработчикОжидания("ОбновитьВес", Таймаут, Истина); ... &НаКлиенте Асинх Процедура ОбновитьВес() |
|||
7
Галахад
гуру
31.03.25
✎
16:41
|
А за данными о весе на сервер? ))
|
|||
8
Fedor-1971
31.03.25
✎
16:47
|
(4) Не ставь свойство ДС Интервал обновления, а подключи обработчик ожидания (как в (5)).
Когда пользователь будет вводить данные, твои поля не будут обновляться и фокус с поля ввода не сдвинется. Когда навводится, то через 2 секунды обновятся данные И, таки, лучше сделать отдельное поле (или надпись) и не трогать заголовок + бесконтекстное получение данных веса |
|||
9
bigdenis22
31.03.25
✎
16:46
|
(7) нет, весы подключаются и опрашиваются на клиенте.
|
|||
10
Fedor-1971
31.03.25
✎
16:58
|
(9) Попробуй создать реквизит формы и заполнять значение оного, будет точеное обновление реквизита
|
|||
11
bigdenis22
31.03.25
✎
17:02
|
(10) как я писал уже выше:
текВес это числовой реквизит формы, связан с элементом формы "Поле" с видом "Поле надписи". опрос весов инициируется: ПодключитьОбработчикОжидания("ОбновитьВес", Таймаут, Истина); // Таймаут 0.5 в процедуре: Асинх Процедура ОбновитьВес() ... ЭтаФорма.текВес = Число(Вес); ... происходит опрос весов и присвоение реквизиту текВес значения веса. |
|||
12
АгентБезопасной Нацио
31.03.25
✎
17:05
|
(11) а весы не могут генерить событие, типа "вес обновлен"?
|
|||
13
Fedor-1971
31.03.25
✎
17:08
|
(11) Чисто в качестве эксперимента: поставь полеВвода
|
|||
14
bigdenis22
31.03.25
✎
17:22
|
(12) нет, весы по запросу, и слушания событий нигде не делалось.
(13) уже пробовал, и Декорация-надпись тоже. (3) попробовал, как было предложено "ОбновлениеТекстаРедактирования" - вроде работает. У меня в этом документе 4 реквизита редактируемых (в шапке), поставлю свойство ОбновлениеТекстаРедактирования - При изменении значения, - понаблюдаю как оно... Понятно, что костыль, но похоже других решений для "точечного" обновления одного элемента диалога, без дЁргания всей формы - нет. |
|||
15
АгентБезопасной Нацио
31.03.25
✎
17:40
|
(14) а что за весы, что за драйвер?
|
|||
16
Fragster
гуру
31.03.25
✎
17:52
|
такого быть не должно, так что надо сделать замер и посмотреть, в каких строках есть "обр. сервером" и думать почему так.
|
|||
17
Fedor-1971
31.03.25
✎
18:03
|
(16) Не факт, что выловится замером, т.к. на сервер форма может ломануться, например, для пересчёта размеров полей - т.е. работа платформы в замер не попадёт
|
|||
18
Гений 1С
гуру
31.03.25
✎
22:18
|
(0) попробуй на платформе повыше, там вроде обновили.
а ваще сделай поле браузера и туда выводи через JS |
|||
19
bigdenis22
01.04.25
✎
09:34
|
(15) (16) UniproScalesComSrv, да, он умеет генерить внешнее событие, но я же говорю - внешние события нигде не слушаются.
Отладчик перехватывает только то, что и задуманно - обновление веса на клиенте, без обращений к серверу. Не исключаю, что платформа неявно общается с сервером, но отладчик этого не видит. (18) Не уверен, но есть сомнения, что платформа "Выше" при установленном режиме совместимости, поможет... Или я не прав? "поле браузера и туда выводи через JS" - не силен в этой теме, и на данном этапе страстного желания разбираться - нет, да по сути это также костыли, как и те что использовал я. Хотя спасибо за совет. |
|||
20
bigdenis22
01.04.25
✎
09:44
|
Меня в данной ситуации, больше всего возмущает то, что в НЕуправляемых формах 7-ки и 8-ки - это работает, а в "УПРАВЛЯЕМЫХ формах" невозможно обновить один элемент диалога, не передЁргивая всю форму.
|
|||
21
Ёпрст
01.04.25
✎
09:47
|
(0) поле html на форму и в нём, что угодно.
|
|||
22
Мультук
гуру
01.04.25
✎
10:33
|
(20)
Потому что обычная форма (я про толстый клиент) она сразу вся здесь. Ибо программа сразу и клиент и сервер. А управляемая, она как фотон (смайлик) и тут (на клиенте) и там (на сервере) |
|||
23
bigdenis22
01.04.25
✎
10:58
|
(18) (21) блин, дайте пример вывода на форму через поле html, данных, которые уже есть в 1с клиенте (вес уже полученный в реквизит) ?
|
|||
24
Fedor-1971
01.04.25
✎
14:18
|
(23) Вот пример создания HTML
&НаСервере Функция НоваяHTMLСтраницаОшибки() ШаблонСтраницы = "<html> |<head> | <meta http-equiv=""Content-Type"" content=""text/html; charset=UTF-8""> | <style type=""text/css""> | html { | overflow:auto; | } | body { | margin: 10px; | font-family: Arial, sans-serif; | font-size: 10pt; | overflow: auto; | position: absolute; | top: 0; | left: 0; | bottom: 0; | right: 0; | } | div.main { | overflow: auto; | height: 100%; | } | div.error { | font-size: 12pt; | } | div.presentation { | font-size: 11pt; | } | h3 { | color: #009646 | } | li { | padding-bottom: 16px; | } | a { | text-decoration: none; | color: #0066CC; | } | a:hover { | text-decoration: underline; | } | </style> |</head> |<body> | <div class=""main""> | <div class=""error"">%1</div> | <p>%2</p> | </div> |</body> |</html>"; РекомендацииHTML = НСтр("ru = '<h3>Рекомендации:</h3> |<ul> | %1 | %2 | <li> | <b>Воспользуйтесь поиском по началу слова.</b><br> | Используйте звездочку (*) в качестве окончания.<br> | Например, поиск стро* найдет все документы, которые содержат слова, начинающиеся на стро - | Журнал ""Строительство и ремонт"", ""ООО СтройКомплект"" и.т.д. | </li> | <li> | <b>Воспользуйтесь нечетким поиском.</b><br> | Используйте решетку (#).<br> | Например, Ромашка#2 найдет все документы, содержащие такие слова, которые отличаются от слова | Ромашка на одну или две буквы. | </li> |</ul> |<div class ""presentation""><a href=""%3"">Полное описание формата поисковых выражений</a></div>'"); УказаныОбластиПоиска = ОбластиПоиска.Количество() > 0; РекомендацияОбластиПоискаHTML = ""; РекомендацияТекстЗапросаHTML = ""; Если КодОшибки = "НичегоНеНайдено" Тогда Если ИскатьВРазделах И УказаныОбластиПоиска Тогда РекомендацияОбластиПоискаHTML = НСтр("ru = '<li><b>Уточните область поиска.</b><br> |Попробуйте выбрать больше областей поиска или все разделы.</li>'"); КонецЕсли; РекомендацияТекстЗапросаHTML = НСтр("ru = '<li><b>Упростите запрос, исключив из него какое-либо слово.</b></li>'"); ИначеЕсли КодОшибки = "СлишкомМногоРезультатов" Тогда Если Не ИскатьВРазделах Или Не УказаныОбластиПоиска Тогда РекомендацияОбластиПоискаHTML = НСтр("ru = '<li><b>Уточните область поиска.</b><br> |Попробуйте выбрать область поиска, задав точный раздел или список.</li>'"); КонецЕсли; КонецЕсли; РекомендацииHTML = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(РекомендацииHTML, РекомендацияОбластиПоискаHTML, РекомендацияТекстЗапросаHTML, "v8help://1cv8/QueryLanguageFullTextSearchInData"); Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтраницы, ОписаниеОшибки, РекомендацииHTML); КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |