Имя: Пароль:
1C
1С v8
ОбновитьПовторноИспользуемыеЗначения для всех пользователей
0 sbabay
 
10.10.13
16:30
Создал модуль с Повторно используемым возвр. значением (на время сеанса). Все работает хорошо, но не пойму как сбросить кэш для всех пользователей?
Метод ОбновитьПовторноИспользуемыеЗначения() работает только для того пользователя, под которым он был вызван. У всех остальных значения по прежнему берутся из "кэша".
Как быть?
1 Defender aka LINN
 
10.10.13
16:40
1. Не брать их из кэша
2. Смириться
3. Выгнать всех нафиг из базы
2 sbabay
 
10.10.13
16:44
1. В смысле вообще отказаться от модуля с повт. использованием??
2. Кому? Пользователям? Мне? Учету?
3. Не устраивает.

Вы тут троллите что ль? Или просто за меня тему апаете?
3 Defender aka LINN
 
10.10.13
16:48
(2) Это тебе варианты на выбор.
Повторно используемые значения - это такие значения, которые:
а) Не изменяются / Изменяются не часто за время работы пользователя
б) МОГУТ быть неактуальными.
Если при изменении такого значения возникает потребность, чтобы ВСЕ пользователи это тут же увидели - это не повторно используемое значение.
4 GROOVY
 
10.10.13
16:49
Предлагаю подумать на тему "Как вызвать любой метод/процедуру/функцию под каждым активным пользователем?"
5 sbabay
 
10.10.13
16:51
(3) Ну для чего-то же был придуман метод "ОбновитьПовторноИспользуемыеЗначения". Думаю как раз-таки для таких случаев. Я, правда, ожидал, что он сбросит кэш у всех текущих пользователей.

(4) Ну как бы да, на это и намекаю. Наверняка ж кто-то уже делал. Не хочется наступать на одни и те же грабли и изобретать велосипеды
6 GROOVY
 
10.10.13
16:53
(5) Какие мысли есть?
7 sbabay
 
10.10.13
16:55
(6) Пока только самые топорные аля флаг-файл, флаг-[значение в таблице] с периодическим опросом. Но тогда весь профит от модулей с повт. использованием сойдет на нет
8 azernot
 
10.10.13
16:56
При каждом обращении к кэшу проверять константу "КэшНеактуален" и в случае необходимости, обновлять неактуальные значения..
9 sbabay
 
10.10.13
17:00
(8) это и есть один из вариантов (6) (флаг-[значение в таблице])
правда непонятно как именно "обновлять неактуальные значения" для других пользователей
10 sbabay
 
10.10.13
17:01
(9) ступил во второй части.
11 sbabay
 
10.10.13
17:01
(8) всё-таки хотелось бы как-то обойтись без лишнего обращения к БД
12 banco
 
10.10.13
17:07
(0) какие галочки стоят у модуля?
13 sbabay
 
10.10.13
17:08
(12) "Сервер", "вызов сервера"
14 banco
 
10.10.13
17:09
Особенность повторного использования возвращаемых значений

Особенность касается общих модулей с установленными флагами "Сервер", "Вызов сервера", у которых свойство "Повторное использование возвращаемых значений" имеет значение "На время сеанса".

При обращении к экспортируемым методам таких модулей из клиентского приложения кэширование значений, возвращаемых методами, выполняется как на клиенте, так и на сервере.

В процессе вызова платформа предпринимает попытку поиска возвращаемого значения в клиентском кэше:

В случае успешного поиска возвращается найденное значение.
Если значение не найдено в клиентском кэше, то выполняется вызов сервера и значение ищется в серверном кэше:
В случае успешного поиска возвращается найденное значение.
Если и в серверном кэше значение не найдено, то выполняется тело метода, его результат помещается в серверный кэш, передается на клиента, помещается в клиентский кэш и выдается источнику вызова.
Данная особенность может проявиться, если клиентский код конфигурации изменяет объект, сохраненный в кэш. Объект будет изменен только в клиентском кэше и не будет изменен в серверном. При устаревании объекта в клиентском кэш он будет вновь получен с сервера, но, возможно, не в результате повторного выполнения тела метода, а из серверного кэша, что может привести к неопределенности результата.

При разработке конфигураций не следует рассчитывать на побочные эффекты, такие, как изменение объектов, хранимых в кэше. Для принудительного обновления данных в кэше рекомендуется использовать метод ОбновитьПовторноИспользуемыеЗначения (RefreshReusableValues).

Если все-таки отдельные объекты изменяются в кэше, то избежать неопределенности можно одним из следующих способов:

обновлять данные в кэше и на клиенте, и на сервере;
устанавливать модулю, у которого свойство "Повторное использование возвращаемых значений" имеет значение "На время сеанса", флаги "Сервер", "Клиент" и, может быть, "Внешнее соединение" и сбрасывать флаг "Вызов сервера".
15 sbabay
 
10.10.13
17:20
(14) Поставил в модуле флаги "На сервере" и "На клиенте", остальное - снял. Не помогло.

Вызываю метод "ОбновитьПовторноИспользуемыеЗначения" у одного пользователя, у второго по-прежнему данные тянутся из кэша
16 sbabay
 
10.10.13
17:22
Я так понимаю, у второго пользователя всё сохранилось в кэше на клиенте, вот оттуда всё и приходит.
17 sbabay
 
10.10.13
17:24
(14) Даже если оставить только "Сервер", то ничего не изменяется
18 sbabay
 
11.10.13
08:55
Может с утра у кого-нибудь возникли идеи?
19 banco
 
11.10.13
09:00
(18) не использовать повторно используемое значение
20 sbabay
 
11.10.13
09:01
(19) это самое простое решение. Еще б варианты услышать
21 Defender aka LINN
 
11.10.13
09:34
(20) Еще 2 варианта осталось :)
22 sbabay
 
11.10.13
09:36
(21) )) не, ну тебя я сразу понял.
Спасибо )
23 MSII
 
11.10.13
09:38
(20) Напиши себе межсеансовый обмен данными и забудь о вопросах типа как в (0).
24 senior
 
18.10.13
14:03
Ну тут еще вопрос, насколько остро стоит проблема актуальности, т.к., если верить документации, сохраненные значения удаляются через 20 минут после вычисления сохраняемого значения или через 6 минут после последнего использования.
25 Sammo
 
18.10.13
14:22
(1) Есть еще 1 вариант - обеспечить, чтобы данные, которые загружены в кэш, не менялись :)
AdBlock убивает бесплатный контент. 1Сергей