Имя: Пароль:
1C
1С v8
Как сообщить форме, что ее реквизит изменился?
,
0 vacvant
 
25.11.21
18:45
Здравствуйте!
Я не знаток УФ. Поэтому вопрос наверное "избитый". Но прокопавшись в "помойке" пол дня, так и не смог решить проблему.
1. В простых формах есть какие-то действия при изменении реквизита, сделанные давно и профи. Я в своем коде изменяю этот реквизит, затем спокойно дергаю эту процедуру (При Изменении) и дальше не задумываюсь.
2. В УФ, я на сервере изменил реквизит, как мне дернуть клиентское событие ПриИзменении. Я понимаю, что простого пути нет. С сервера клиента не дернешь. Но ведь эта проблема как-то решается.
Наведите на мысль. Заранее спасибо!
1 runoff_runoff
 
25.11.21
18:47
вызвать серверный код, который дергает клиентская ПриИзменении()
2 vacvant
 
25.11.21
18:50
(1) Это понятно. Но ведь там не только серверный, в общем случае. Допустим при каком-то значении поля должна измениться видимость другого поля. Ну или типа того... Вот тут как быть?
3 runoff_runoff
 
25.11.21
18:53
(2) задублировать код на сервере
4 vacvant
 
25.11.21
18:59
(3) Вот в этом то и проблема! Простой дубляж клиентского кода не пройдет. Ну как Вы на сервере скроете видимость поля формы? Значит приходится перерабатывать, перелопачивать тонны кода. Вот и спрашиваю, может есть какие хитрые (ну в смысле отработанные) ходы. Облегчающие жизнь???
Или я туплю и там все просто?
5 RomanYS
 
25.11.21
19:07
(4) >> Ну как Вы на сервере скроете видимость поля формы?
....Видимость = Ложь;//как и на клиенте
6 vacvant
 
25.11.21
19:12
(5) Вот тут то я и плыву... Разве на сервере есть контекст формы? Как к ней можно обратиться? Если не трудно пример???
7 Василий Алибабаевич
 
25.11.21
19:12
(0) "я на сервере изменил реквизит".
Как? Если командой из этой же формы - просто код после вызова серверной процедуры.
Если из другой формы - В коде клиентской процедуры "той" формы сказать Оповестить(). В коде "этой" формы прописать ОбработкаОповещения()
8 Василий Алибабаевич
 
25.11.21
19:15
+ (7) Если данные изменены в другом сеансе (например данные динамического списка) - периодически дергать для нужного реквизита Обновить().
9 RomanYS
 
25.11.21
19:15
(6) Если вызов контекстный конечно есть контекст.
Элементы.ТвойЭлемент.Видимость = Ложь;
10 vacvant
 
25.11.21
19:15
(7) Не, ну если бы это было так прямолинейно - вопроса бы не было. На сервере то своя логика, я ведь не про изменение одного реквизита спрашиваю.
11 vacvant
 
25.11.21
19:17
(6) Ага, понял, спасибо. Буду про это читать. Почему-то мне влезло в голову, что на сервере контекст объекта...
12 Василий Алибабаевич
 
25.11.21
19:18
(10) Код на сервере сам по себе не начнет выполняться. Его выполнение можно вызвать с клиента. Или из модуля внешнего соединения. Или регламентным заданием. В общем зависит от места вызова.
13 vacvant
 
25.11.21
19:20
(10) Понял, понял. Просто я же не могу потом после вызова сервера, все скопом на клиенте отрабатывать... Мне надо логику на сервере отработать.
14 Василий Алибабаевич
 
25.11.21
19:23
(11) А-а-а... Ты вот о чем. Я думал вопрос за то как обновить данные в форме списка, если изменился реквизит объекта. Например. Или на форме объекта выведены данные связанного объекта. А он в свою очередь редактируется в своей форме. В общем если реквизит отображается и изменяется в разных формах. А если все в одной - сервер вполне знает контекст формы. Если ничего не делать. А вот чтобы вызвать код вне контекста нужно тек и сказать НаСервереБезКонтекста.
15 vacvant
 
25.11.21
19:26
(14) Пазл сложился)))
Всем спасибо!!!