![]() |
![]() |
|
Обновить отображение реквизита формы через точку в другом сеансе. | ☑ | ||
---|---|---|---|---|
0
CepeLLlka
04.08.25
✎
10:12
|
Есть к примеру форма документа с ТЧ "Товары" и колонкой "Номенклатура", дополнительно через точку в эту таблицу выведена колонка "Номенклатура.Артикул".
Если открыть форму этого документа в одном сеансе и одновременно во втором, затем в первом сеансе карточку номенклатуры открыть и изменить артикул, то отображение поля Артикул в форме документа во втором сеансе никак не меняется, даже если закрыть форму и открыть. Помогает только перезапустить сеанс. ЭтаФорма.ОбновитьОтображениеДанных(); ЭтаФорма.Элементы.Товары.Обновить(); ЭтаФорма.Прочитать(); Это не помогает. Подскажите как обновить отображение реквизита в форме второго сеанса? 1С 8.3.24.1586 |
|||
1
CepeLLlka
04.08.25
✎
10:24
|
Проблема достаточно старая, вот в далеком 2014 году аналогичная тема была.
Проблема с кэшированием данных формы |
|||
2
Fedor-1971
04.08.25
✎
10:25
|
(0) Вот тут посмотри
https://forum.mista.ru/topic.php?id=764068&ysclid=mdws6x8f9g365317961 |
|||
3
CepeLLlka
04.08.25
✎
10:26
|
(2)Там речь идёт об одном сеансе, а не о разных
|
|||
4
Fedor-1971
04.08.25
✎
10:29
|
2+ По факту, предлагают использовать динамический список + ОповеститьОбИзменении(), такая связка работает между сеансами
просто Оповестить только в одном сеансе |
|||
5
arsik
гуру
04.08.25
✎
10:32
|
||||
6
Fedor-1971
04.08.25
✎
10:32
|
(3) как вариант, добавить колонку формы и заполнять её по событию (например, при чтении), только останется вопрос: как оповестить то другой сеанс?
т.е. тупо при чтении данных для формы заполняем новые данные минуя стандартное кэширование |
|||
7
CepeLLlka
04.08.25
✎
10:34
|
(4)У меня табличная часть документа, вместо ТЧ документа дин. список юзать или что?
|
|||
8
CepeLLlka
04.08.25
✎
10:39
|
(6)Это в крайнем случае, да. Ну тут хоть переоткрытие формы поможет или обработчик ожидания.
|
|||
9
Fedor-1971
04.08.25
✎
10:44
|
(7) в таком раскладе ДС не вариант, тогда (6) или давить 1С с кэшированием данных формы
|
|||
10
CepeLLlka
04.08.25
✎
10:46
|
Пока что пробую решение из (1), но какое-то оно костыльное. Но это лучше чем перезапускать сеанс
|
|||
11
craxx
04.08.25
✎
10:48
|
(0) старый баг. Видать до сих пор не поправили
|
|||
12
ldo6
04.08.25
✎
13:05
|
ОбработчикОжидания можно попробовать.
|
|||
13
CepeLLlka
04.08.25
✎
11:12
|
(12)И что в обработчике написать?
|
|||
14
timurhv
04.08.25
✎
11:17
|
(5) Интересно, колом сервер встанет или нет, если запустить групповую обработку на перезаполнение 10тыс элементов справочника при условных 100 пользователях в базе)
|
|||
15
youalex
04.08.25
✎
11:30
|
В каком-то сочетании работают
ОповеститьОбИзменении(стр.Номенклатура) (на клиенте) ОбновитьПовторноИспользуемыеЗначения() (на сервере) |
|||
16
ldo6
04.08.25
✎
11:21
|
(13) Перезаполнение твоих динамически обновляемых реквизитов руками.
|
|||
17
Fedor-1971
04.08.25
✎
11:27
|
(15) Тут важен момент - как узнать в другом сеансе, что изменился реквизит? (либо, тупо кнопкой обновлять всё, что использовано в документе)
(16) на УФ нет доступа к колонкам с данными через "." (например, Номенклтура.Артикул) |
|||
18
youalex
04.08.25
✎
11:30
|
(17) тут речь о другом. Не о том, чтобы в другом сеансе породить событие, а в том, что эти значения кэшируются намертво, и даже переоткрытие формы не помогает
|
|||
19
CepeLLlka
04.08.25
✎
11:43
|
(15)Я делаю как в (1), только не перечитываю форму, в этом нет необходимости, а обновляю отображение только одной ТЧ.
Делаю это при открытии и ещё отдельную кнопку вывел для обновления. Через обработчик ожидания как-то не хочется пока что делать, хоть и размер ТЧ у меня игрушечный будет. Если уж пользюки завоют что неудобно, то попробуем. &НаКлиенте Процедура ПриОткрытии(Отказ) ОчиститьКешНоменклатурыИОбновитьОтображение(); КонецПроцедуры &НаКлиенте Процедура Обновить(Команда) ОчиститьКешНоменклатурыИОбновитьОтображение(); КонецПроцедуры &НаКлиенте Процедура ОчиститьКешНоменклатурыИОбновитьОтображение() ОповеститьОбИзменении(Тип("СправочникСсылка.Номенклатура")); Элементы.Товары.Обновить(); КонецПроцедуры |
|||
20
Fedor-1971
04.08.25
✎
11:44
|
(18) Это понятно, обновлять все данные для документа при каждом открытии не смысл, т.к. непонятно, есть ли изменения в справочниках, например, номенклатуры
потому, сносить кэш нужно дозированно, т.к. документ может иметь тысячи позиций |
|||
21
Fedor-1971
04.08.25
✎
11:46
|
(19) только не весь справочник чисти, а конкретную номенклатуру из ТЧ как в (15)
|
|||
22
CepeLLlka
04.08.25
✎
14:05
|
(21)Как я в другом сеансе узнаю, какая номенклатура изменилась?
|
|||
23
arsik
гуру
04.08.25
✎
12:36
|
(14) Вряд ли.
1) скуль результат на эти 10тыс. положит в свой кеш 2) Не нужно на каждый элемент ОповеститьОбИзменении, можно просто передать тип справочника. Тогда все кеши этого справочника очистятся. 3) Ну не все же 100 юзеров затребуют сразу эти 10 тысяч. Там порционно будет. |
|||
24
lEvGl
гуру
04.08.25
✎
13:33
|
вообще прикольно будет: сидишь такой с открытой таблицей, а в ней номенклатура все время скачет вверх-вниз, потому что кто-то там меняет наименования ссылок
|
|||
25
CepeLLlka
04.08.25
✎
14:05
|
(23) Насколько я понимаю, ОповеститьОбИзменении() работает только в рамках одного сеанса.
Ну, в моём примере, если в первом сеансе ОповеститьОбИзменении(), то во втором никакой реакции нет. |
|||
26
Fedor-1971
04.08.25
✎
13:46
|
(25) не совсем, динамические списки всех сеансов получают оповещение об изменении (этим ОповеститьОбИзменении отличается от Оповестить - оно чисто в одном сеансе), если вызвать в локальном сеансе, то просто почистишь кэш сохранённых реквизитов
Как-то так |
|||
27
CepeLLlka
04.08.25
✎
13:49
|
(26)хз, тут про это не написано https://its.1c.ru/db/pubv8devui#content:229:hdoc
Ну и у меня не динамические списки. К тому же проблема ещё в том, что метод для всех открытых форм, а если форма закрыта, в ней кеш не почистится насколько я понимаю. |
|||
28
Fedor-1971
04.08.25
✎
15:56
|
(27) проведи эксперимент:
1. Добавь кнопку с очисткой кэша для всего справочника номенклатура (как в (19)) - открой ломаную форму 2. такую же кнопку положи в форму по результатам будет понятно, где достаточно вызывать |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |