Имя: Пароль:
1C
1С v8
Проблемы с временным хранилищем
,
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, спасибо. Явное помещение в хранилище помогло.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.