|
8.2-8.3 глюк с кешированием | ☑ | ||
---|---|---|---|---|
0
EvgeniuXP
13.01.14
✎
20:30
|
Делаем очень просто:
1. Создаем документ, создаем в нем реквизит 1. 2. В этом же документе создаем табличную часть. Для табличной части создаем реквизит, который ссылается на этот же документ. 3. Создаем форму документа, выкладываем номер, дату документа и табличную часть с добавленным реквизитом ссылающегося на этот же документ и выкладываем еще один реквизит, типа ТабличнаяЧасть.СсылкаНаДокумент.Реквизит1. Заходим в пользовательский режим создаем несколько документов. Далее открываем один документ и заполняем табличную часть, в качестве ссылок на документы указываем любые документы. Теперь всё просто: Открываем документ у которого табличная часть заполнена и оставляем. Открываем другие документы, которые есть в этой же табличной части и меняем значение реквизита 1. Закрываем их. Открываем первый документ и смотрим, значение реквизитов в табличной части остались старые! т.к. все данные берутся из кеша... ждем 20 минут минимум, открываем снова форму - значения новые :) |
|||
1
EvgeniuXP
13.01.14
✎
20:32
|
другие документы, которые открываем и меняем значение реквизита 1 - меняем всё это под другим пользователем.
Под первым пользователем смотрим как меняется табличная часть - после открытия снова того же документа :))) |
|||
2
EvgeniuXP
13.01.14
✎
20:37
|
Если на форму выложить динамический список, который отображает табличную часть, а табличную часть ограничить параметром на документссылка этого документа, то в нем всё сразу меняется и можно наглядно посмотреть, что данные считываются при открытии формы, а у объекта табличная часть берется постоянно из кеша в течении мин. 20 минут.
|
|||
3
H A D G E H O G s
13.01.14
✎
21:09
|
Давай dt демки.
|
|||
4
fmrlex
13.01.14
✎
21:19
|
(2) В <s>Спортлото</s> 1C звонил?
|
|||
5
ifso
13.01.14
✎
22:15
|
+(3)
без dt не взлетает |
|||
6
Ranger_83
13.01.14
✎
22:18
|
это ж что покурить надо было...?
|
|||
7
EvgeniuXP
13.01.14
✎
23:02
|
http://yadi.sk/d/E6wnIY6lFzC6j - вот, 1-ый документ, табличную часть отображает, в других менять можете под этим же пользователем, но в другом сеансе. Закрыв и открыв 1-ый документ - данные не меняются, пока не закроешь полностью 1С и вновь ее не запустишь.
|
|||
8
ifso
13.01.14
✎
23:20
|
Все верно, ибо при открытии формы реквизиту формы единовременно присваивается значение реквизита документа при создании формы на сервере.
|
|||
9
EvgeniuXP
13.01.14
✎
23:38
|
(8) в смысле всё верно? открываем форму и видим старые значения в табличной части, а через 20 минут видим новые - сделали бы тогда уж через 2 года, чего уж там :)
|
|||
10
EvgeniuXP
13.01.14
✎
23:41
|
(8) при открытии формы объект должен заново считываться с базы данных, а не с кеша - есть такая функция у формы "Перечитать данные" - тоже берем из кеша получается? - по крайне мере, этот пример показывает, что функция "Перечитать данные" читает из кеша, а не из БД.
|
|||
11
ifso
14.01.14
✎
00:05
|
Данные реквизита формы (не реквизита документа) хранятся только в форме и, т.к. форма не менялась, то не происходит обновление кэша.
Сделай "Вывести список" и увидишь данные с сервера (измененные). Т.о. это скорее фича, чем баг. Другой вопрос, зачем таким образом использовать реквизит формы. Хочешь, чтобы обновлялось - создай реквизит документа и уже его отобрази на форме. |
|||
12
EvgeniuXP
14.01.14
✎
00:16
|
(11) в том-то и дело, что данные хранятся в другом документе, а этот (первый) документ отображает сведения других документов - другие документы, другие пользователи корректируют.
|
|||
13
EvgeniuXP
14.01.14
✎
00:18
|
(11) проще ТЗ на форму вывести :), а из ТЗ в табличную часть грузить перед записью.
|
|||
14
EvgeniuXP
14.01.14
✎
00:21
|
(11) кстати, выведи динамический список табличных частей всех, ограничь одним документом через параметр и данные обновятся сразу при открытии формы.
|
|||
15
EvgeniuXP
14.01.14
✎
00:22
|
(11) по твоей логике, они тогда тоже не должны обновляться...
|
|||
16
EvgeniuXP
14.01.14
✎
00:23
|
т.к. данные взяли из другого документа, и данные на форме не были изменены - однако обновляются.
|
|||
17
RomaH
naïve
14.01.14
✎
06:55
|
к сожалению только так нашел:
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "ЗаписанПациент" Тогда Если Параметр = Объект.Пациент Тогда ПрочитатьДанныеПациента(); ОтобразитьИзменениеДанных(Объект.Пациент,ВидИзмененияДанных.Удаление); ОбновитьОтображениеДанных(); КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
18
RomaH
naïve
14.01.14
✎
06:55
|
т.е. вот эти две строчки нужны:
ОтобразитьИзменениеДанных(Объект.Пациент,ВидИзмененияДанных.Удаление); ОбновитьОтображениеДанных(); |
|||
19
ifso
14.01.14
✎
07:53
|
(15) Логика не моя, но клиент-серверная.
|
|||
20
EvgeniuXP
14.01.14
✎
10:45
|
(19) почему тогда в другом дин. списке обновляет через ссылку? - оповещение об изменении я не писал.
|
|||
21
hhhh
14.01.14
✎
10:51
|
(20) ну а в настройке списка? там есть например обновлять через 20 секунд? или через 30 секунд? Как это было в 8.2? Или уже нет?
|
|||
22
EvgeniuXP
14.01.14
✎
11:26
|
(21) проверяю и 8.2 - аналогичная ситуация, по умолчанию там "Автоматическое обновление" списка через 60 секунд - но он не работает.
|
|||
23
EvgeniuXP
14.01.14
✎
11:28
|
еще галку ставить "автообновление" - ладно, вечером проверю дома.
|
|||
24
SUA
14.01.14
✎
11:31
|
все нормально ОповеститьОбИзменении() еще есть как пример
|
|||
25
EvgeniuXP
14.01.14
✎
19:57
|
(21) у элемента формы где путь к данным "Объект.ТабличнаяЧасть" этого уже нет. У списка есть.
Объект.Пациент - как понимаю это реквизит документа.... а здесь табличная часть, т.е. надо типа Объект.ТабличнаяЧасть[НомерСтроки].Реквизит1. Во всяком случае прописал в документе: &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) ОповеститьОбИзменении(Объект.Ссылка); КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) ОбновитьОтображениеДанных(); КонецПроцедуры у другого пользователя не обновляются данные. |
|||
26
RomaH
naïve
15.01.14
✎
08:01
|
ОтобразитьИзменениеДанных(Объект.Пациент,ВидИзмененияДанных.Удаление); добавь
параметры сам читай в СП какие нужны там первый параметр - ссылка должна быть, а как ты её получишь, имхо, пофиг |
|||
27
EvgeniuXP
15.01.14
✎
19:34
|
(26) написал, тоже самое - не обновляется.
&НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) ОтобразитьИзменениеДанных(Объект.Ссылка, ВидИзмененияДанных.Удаление); КонецПроцедуры &НаСервере Процедура ОбработкаОповещенияНаСервере() ОбновитьОтображениеДанных(); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) ОбновитьОтображениеДанных(); КонецПроцедуры |
|||
28
EvgeniuXP
15.01.14
✎
19:40
|
а, всё, при открытии добавил - появилося.
спасибо! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |