|
Как обновить все кэши нужного объекта? | ☑ | ||
---|---|---|---|---|
0
TormozIT
гуру
19.07.15
✎
17:23
|
Объект изменили в другом сеансе. Я получил об этом сигнал (неважно как). Мне нужно, чтобы новые данные сразу стали показываться по нему в управляемых и обычных формах, во всех динамических списках, списках быстрого выбора, методом ПолучитьОбъект(), в полях ввода и т.д. Я пробовал ОповеститьОбИзменении(Ссылка) - по крайней мере для обычных форм не дает нужного эффекта, т.е. в полях ввода представление ссылки не обновляется. Если получаю объект от ссылки методом ПолучитьОбъект(), то получаю естественно старые данные, т.к. они из объектного кэша берутся, который не чаще раза в 20 сек при необходимости обновляется. Если же у объекта вызываю метод Прочитать(), то получаю новые данные, но последующий вызов ПолучитьОбъект() опять получает старые данные из объектного кэша. Представление в полях ввода обычных форм вообще непонятно как обновить (метод Обновить() у обычной формы тоже не помогает).
Итого нужно обновить 1. объектный кэш 2. кэш представлений ссылок Научите |
|||
1
Лефмихалыч
19.07.15
✎
17:26
|
Зачем тебе это?
|
|||
2
TormozIT
гуру
19.07.15
✎
17:27
|
(1) Это нужно пользователю, т.к. он точно знает, что объект изменился и не хочет работать с его старыми данными.
|
|||
3
Lama12
19.07.15
✎
17:36
|
(2) Пользователь открывает утром документ на 100500 строк. Ждет обеда. Много думает. В конце рабочего дня решсет исправит 800 строчку. А система ему говорит что объект не актуален?
Вопрос решается по другому. Либо то кто открыл блокирует сразу, либо переоткрывает когда додумается зачем он его открыл. |
|||
4
TormozIT
гуру
19.07.15
✎
17:40
|
(3) У меня другая ситуация. В ней блокировки не подходят. Пользователь сам инициирует действие изменения, протекающее в другом сеансе.
|
|||
5
RomanYS
19.07.15
✎
17:43
|
(0) а зачем после Прочитать() снова вызывать ПолучитьОбъект()?
|
|||
6
TormozIT
гуру
19.07.15
✎
17:45
|
(5) Например, для понимания состояния объектного кэша. При открытии формы объекта также используется объектный кэш, т.е. я вижу там старые данные, т.к. форма не делает Прочитать().
|
|||
7
TormozIT
гуру
19.07.15
✎
17:46
|
(6) А вот если в форме нажать "Перечитать данные объекта", то она выполнит Прочитать() и покажет уже новые данные.
|
|||
8
Рэйв
19.07.15
✎
17:49
|
(6)Тs походу путаешь данные и отображения на форме..
|
|||
9
TormozIT
гуру
19.07.15
✎
17:51
|
(8) Скорее всего нет. Ссылка.ПолучитьОбъект() - показывает в свойстве Наименование старые данные. После сразу же Объект.Прочитать() в этом свойстве уже новые данные.
|
|||
10
TormozIT
гуру
19.07.15
✎
17:53
|
Для тех кто не въезжает. Рекомендую познакомиться еще с этой темой v8: Кэши разные нужны, кэши нужные важны.
|
|||
11
Рэйв
19.07.15
✎
17:54
|
(9)>>Ссылка.ПолучитьОбъект()
получает актуальный объект.Нет?:-) |
|||
12
TormozIT
гуру
19.07.15
✎
17:54
|
(11) Я же уже как минимум 2 раза написал, что нет.
|
|||
13
Рэйв
19.07.15
✎
17:55
|
(12)Спорить не буду.Но думаю, что да.
|
|||
14
TormozIT
гуру
19.07.15
✎
17:57
|
(13) Я это много раз проверил перед созданием темы.
Весь вопрос в том, как обойти эту особенность - "Если обращение происходит в пределах 20 секунд после поступления данных в кеш, данные считаются верными (валидными)." |
|||
15
RomanYS
19.07.15
✎
18:03
|
(14) ты же сам пишешь, что прочитать() решает твою проблему
Когда это надо сделать, ты вроде знаешь : "получил сигнал" Непонятно в чем проблема |
|||
16
TormozIT
гуру
19.07.15
✎
18:04
|
(15) Проблема в том, что во всех местах конфигурации и во всех формах объектов я не могу вставить Прочитать() после ПолучитьОбъект().
|
|||
17
TormozIT
гуру
19.07.15
✎
18:07
|
Еще очень волнует, что метод Прочитать() идет мимо объектного кэша. Я ожидал что он обновит сначала кэш, а потом оттуда выдаст данные, но очень похоже что он идет в обход.
|
|||
18
RomanYS
19.07.15
✎
18:10
|
(17) а объекты разных типов? или одного - можно попробовать "сигнал" в модуле объекта отработать
|
|||
19
TormozIT
гуру
19.07.15
✎
18:32
|
В общем как минимум нашел кандидата на ошибку в платформе
https://partners.v8.1c.ru/forum/t/1383852/m/1383852 Конфигурация ПО 1С 8.3.5.1589-6.2014, файловый и клиент-серверный режимы Проблема Метод Прочитать ссылочного объекта не обновляет объектный кэш. Воспроизведение Восстановить базу из выгрузки. Запустить обычное приложение. При этом выполнится код Соединение1 = Новый COMОбъект("V83.ComConnector"); Соединение1 = Соединение1.Connect(СтрокаСоединенияИнформационнойБазы()); Объект = Справочники.Справочник1.т1.ПолучитьОбъект(); ЧужойОбъект = Соединение1.Справочники.Справочник1.т1.ПолучитьОбъект(); ЧужойОбъект.Записать(); Объект = Справочники.Справочник1.т1.ПолучитьОбъект(); Сообщить(Объект.ВерсияДанных); Объект.Прочитать(); Сообщить(Объект.ВерсияДанных); Объект = Справочники.Справочник1.т1.ПолучитьОбъект(); Сообщить(Объект.ВерсияДанных); и будут выведены сообщения AAAABAAAAAA= AAAABQAAAAA= AAAABAAAAAA= Не нашел ни одного логичного объяснения, почему объектный кэш не должен обновляться в этом случае. Похоже на ошибку платформы. Стоит отметить, что такое можно наблюдать и в форме объекта, т. к. по наблюдениям она использует фактически те же методы: ПолучитьОбъект() при открытии и Прочитать() при перечитывании. http://rghost.ru/76DLNqrjr |
|||
20
TormozIT
гуру
20.07.15
✎
12:41
|
Так и не нашел способа. Может еще кто то попробует предложить решение?
|
|||
21
ЧеловекДуши
20.07.15
✎
13:03
|
(20) Объект.ВерсияДанных <> Ссылка.ВерсияДанных
...ОпанЪки, документ изменили... нет? При этом Объект, желательно получить по новой :) |
|||
22
TormozIT
гуру
20.07.15
✎
13:04
|
(19) Не читал что ли?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |