|
Проблема с кэшированием данных формы | ☑ | ||
---|---|---|---|---|
0
SashaNox
06.02.14
✎
16:16
|
Добрый день! Столкнулся со следующей проблемой:
Имеется документ, у которого есть реквизит "Склад" (СправочникСсылка.Склады), на форму документа выведены реквизиты склада. 1. Открываем форму одного и того же документа под разными сеансами. 2. Закрываем формы. 3. Изменяем в одном из сеансов элемент справочника Склады - значение реквизита нашего документа. 4. В этом же сеансе открываем документ и видим, что связанные реквизиты справочника перечитались верно. 5. Открываем документ в другом сеансе и видим, что реквизиты элемента справочника не обновляются, даже при перевыборе склада и обновлении формы. Аналогичная ситуация и с табличной частью. Предполагаю, что при первом открытии формы данные считываются из базы данных, а при последующем - из кэша. Учитывая, что кэш обновляется через некоторое время, как увидеть актуальные данные в форме? Пробовал в Управляемом приложении, режим запуска тонкий клиент, платформа 8.2.19.83 и на 8.3 последней тоже пробовал, результат одинаков |
|||
1
SashaNox
06.02.14
✎
22:39
|
Ау, неужели столь серьезная проблема никого не интересует...
|
|||
2
MrStomak
06.02.14
✎
22:51
|
Значения объекта формы не кешируются. Описанная тобой ситуация очень странная.
|
|||
3
SashaNox
07.02.14
✎
12:25
|
Описанная ситуация элементарно воспроизводится на любой конфигурации. Помогла мне вот такая вещь:
При открытии формы написал: ОповеститьОбИзменении(Тип("СправочникСсылка.Склады)) - при этом происходит очистка кэша, цитирую из СП: Поведение при очистке кэша (такое же, как при интерактивном изменении): кэш представлений ссылок - очищаются записи, соответствующие измененной ссылке, кэш данных через точку - удаляются те записи, которые имеют в пути ссылки того же типа, что и измененная, кэш данных быстрого выбора - данные хранятся по типам, очищаются данные, которые относятся к типу измененной ссылки, кэш ограничений по типу - данные хранятся по типам, очищаются данные, которые относятся к типу измененной ссылки. Применить ОповеститьОбИзменении() при открытии формы достаточно поздно, т.к. форма уже считалась с кэша, а затем мы его удалили, поэтому после того как кэш будет удален форму надо перечитать Но это нужно в случае если играешься с реквизитами шапки, если это ТЧ, то считывание реквизитов реквизитов происходит позже открытия формы, наверное в момент вывода строки, и все нормально отрабатывает. Вообще мыслится вся эта работа формы следующим образом: 1. При первом открытии форма считывается целиком из ИБ, при этом с сервера на клиент передаются ДанныеФормы, в которых, ссылочные значения, представляет собой только ссылку и ничего более. Когда при построении формы программа сталкивается с элементом формы путь к данным которого является реквизит реквизита ДанныхФормы (к примеру Номенклатура.Артикул), то осуществляется невидимый запрос к серверу и оттуда передается значение этого реквизита. Затем ДанныеФормы и реквизиты реквизитов помещаются в кэш. Кэш в одном сеансе существует либо в пределах определенного времени (не менее 20 мин), либо пока не будут внесены изменения в любой из справочников или документов имеющий ссылку в ДанныхФормы в пределах одного сеанса. 2. При повторном открытии, если не было внесено изменений в текущем сеансе в типы справочников или документов участвующих в ДанныхФормы то форма берется целиком из кэша - такова оптимизация. |
|||
4
MrStomak
07.02.14
✎
12:36
|
Из твоего описания в (0) я не смог понять, что ты говоришь о данных через точку.
По поводу форма берется целиком из кеша - это ложь. У тебя даже есть событие "ПриСозданииНаСервере", которое как бы намекает, что форма создается не из кеша. Если изменить в другом сеансе сам реквизит, а не реквизит реквизита, то в этом сеансе изменение будет видно сразу при открытии. По поводу реквизитов через точку - их значения, очевидно, кешируются. Хотя почему при создании формы сразу они не перечитываются - непонятно. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |