|
Проблемы с временным хранилищем | ☑ | ||
---|---|---|---|---|
0
Baumanez
15.04.19
✎
09:43
|
Добрый день!
Конфигурация 1С: Управление холдингом 1.3.10.2. Постоянно сталкиваюсь с «фантомными» ошибками при работе со сводными таблицами: 1. Периодически после ручного редактирования ячеек (показателей) в сводной таблице и сохранении результатов восстанавливаются прежние значения до редактирования 2. При ручном добавлении аналитического раскрытия в сводной таблице возникает ошибка «Поле не доступно КэшАналитикПоказателейСТАдрес» 3. Не сохраняются настройки расположения аналитик в форме настройки бланка сводной таблицы Ошибки воспроизводятся только в продуктивной базе и ближе к вечеру, в тестовых – никогда. По ощущениям, подкрепленным примером ниже, природа этих ошибок связана с работой функций «ПолучитьИзВременногоХранилища», «ПоместитьВоВременноеХранилище». В частности ниже приведен фрагмент кода: СтруктураТаблицИнтерфейса = ПолучитьИзВременногоХранилища(АдресТаблицИнтерфейса); КэшАналитикПоказателейСТ = ПолучитьИзВременногоХранилища(КэшАналитикПоказателейСТАдрес); СтруктураТаблицИнтерфейса.Вставить("КэшАналитикПоказателейСТ",КэшАналитикПоказателейСТ); В соответствие с описанием работы этих функций после выполнения третьей строки во временном хранилище по адресу «АдресТаблицИнтерфейса» должна обновиться структура: в ней должно появиться свойство «КэшАналитикПоказателейСТАдрес». Если поставить точку останова после последней строки кода фрагмента и вычислить выражение «ПолучитьИзВременногоХранилища(АдресТаблицИнтерфейса)», то в полученном значении вначале действительно будет это свойство, но уже по прошествии 10 секунд повторное вычисление возвращает структуру уже без этого свойства. Т.е. теперь в последующих вызовах в других фрагментах кода это свойство будет недоступно и вызовет ошибку №2 из ранее приведенного списка. Повторюсь, что ошибки начинают проявляться во второй половине дня (каждую ночь выполняется перезагрузка сервера 1С). |
|||
1
igork1966
15.04.19
✎
10:07
|
(0) "В соответствие с описанием работы этих функций после выполнения третьей строки во временном хранилище по адресу «АдресТаблицИнтерфейса» должна обновиться структура"
А с чего такие предположения? |
|||
2
Baumanez
15.04.19
✎
10:27
|
(1) На партнерском форуме так написано. Собственно так и происходит как я писал. А через некоторое время добавленное свойство пропадает.
|
|||
3
igork1966
15.04.19
✎
10:34
|
(2) Странно, как будто во временном хранилище храниться не сеарилизованное значение а непосредственно экземпляр объекта. Моя сомневается.
А ссылку на форум дашь? Но время в 10 сек наводит на мысли о повторно используемых значениях или времени жизни этого самого значения в хранилище пока сущестыует сеанс или пока существует форма... |
|||
4
igork1966
15.04.19
✎
10:39
|
(3) + Ну вот, со мной согласны:
https://expert.chistov.pro/public/464212/ Известно, что в хранилище значений можно поместить только переменные сериализуемого типа. В документации по встроенному языку и в синтакс-помощнике в описании объектов возможность сериализации указывается отметкой "Сериализуется". |
|||
5
igork1966
15.04.19
✎
10:42
|
(4) + не дописал
"При помещении во временное хранилище значений, сериализация которых не поддерживается, возникает ошибка. Текст ошибки зависит от типа переменной." |
|||
6
Baumanez
15.04.19
✎
10:51
|
https://its.1c.ru/db/v8doc#content:74:1:issogl2_20.2.2.помещениеданныхвовременноехранилище
ВНИМАНИЕ! При получении на сервере значения из временного хранилища следует учитывать то, что оно получается по ссылке. В действительности, ссылка эта указывает на значение, которое хранится в кэше. В течение 20 минут, с момента помещения в хранилище или же с момента последнего обращения, значение сохранится в кэше, а затем записывается на диск и из кэша удаляется. При следующем обращении значение загружается с диска и снова помещается в кэш. |
|||
7
fisher
15.04.19
✎
10:51
|
Уже через 10 сек возвращается старое значение? Очень странно. На проблемы сериализации не похоже, слишком уж быстро. Похоже, что идет его перезапись по этому адресу. Возможно, фоновым заданием.
|
|||
8
igork1966
15.04.19
✎
10:54
|
(6) Спасибо.
Век живи... |
|||
9
fisher
15.04.19
✎
11:00
|
Может быть конечно внеочередная проблема с сеансовыми данными при переползании сеанса на другой рабочий процесс или рабочий сервер. Но если речь про 10 секунд, то маловероятно такое совпадение...
|
|||
10
H A D G E H O G s
15.04.19
✎
11:59
|
(0) Если вы что то вытащили из ВХ, поменяли - не забудьте поместить это помененное потом в ВХ, даже если кажется, что значение поменялось. Оно сдохнет однозначно при динамическом обновлении и при перезапуске rphost
|
|||
11
H A D G E H O G s
15.04.19
✎
12:00
|
Вот как то так мы это делаем. Сколько крови было вылето из моих разных отверствий (глаза и ухи), пока докопались:
Процедура СинхронизироватьКэшВременныхХранилищ(ЭтаФорма) СостояниеСканирования = ЭтаФорма.СостояниеСканирования; ТоварыНаСканирование = ПолучитьИзВременногоХранилища(СостояниеСканирования.АдресДанныхТоварыНаСканирование); ОтсканированныеПозиции = ПолучитьИзВременногоХранилища(СостояниеСканирования.АдресДанныхОтсканированныеПозиции); СостоянияУпаковок = ПолучитьИзВременногоХранилища(СостояниеСканирования.АдресДанныхСостоянияУпаковок); УпаковкиНаСканирование = ПолучитьИзВременногоХранилища(СостояниеСканирования.АдресДанныхУпаковкиНаСканирование); ПоместитьВоВременноеХранилище(ТоварыНаСканирование, СостояниеСканирования.АдресДанныхТоварыНаСканирование); ПоместитьВоВременноеХранилище(ОтсканированныеПозиции, СостояниеСканирования.АдресДанныхОтсканированныеПозиции); ПоместитьВоВременноеХранилище(СостоянияУпаковок, СостояниеСканирования.АдресДанныхСостоянияУпаковок); ПоместитьВоВременноеХранилище(УпаковкиНаСканирование, СостояниеСканирования.АдресДанныхУпаковкиНаСканирование); КонецПроцедуры |
|||
12
Baumanez
17.04.19
✎
09:47
|
H A D G E H O G s, спасибо. Явное помещение в хранилище помогло.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |