![]() |
|
Временное Хранилище | ☑ | ||
---|---|---|---|---|
0
mikha
22.01.18
✎
12:48
|
Приветствую.
В последнее время перестал работать обмен данными между сервером (фоновое задание) и клиентом через временное хранилище. на клиенте делаю АдресПараметров = ПоместитьВоВременноеХранилище(Неопределено) передаю параметром фоновому заданию на сервере в фоновом задании чё-то делаю, выкладываю результат в ПоместитьВоВременноеХранилище(Результат, АдресПараметров) на клиенте обработчик ожидания смотрит завершение задания и Результат = ПолучитьИзВременногоХранилища(АдресПараметров) И если в начале день, два всё работает, то потом результат получается из хранилища на второй третий раз, а сейчас постоянно "неопределено". Одну обработку перевёл на хранилище настроек, всё заработало отлично, но это же не правильно. Платформа 1С:Предприятие 8.3 (8.3.10.2580) УПП 1.3.100.1 SQL 2008 |
|||
1
Franchiser
гуру
22.01.18
✎
13:26
|
ПоместитьвовременноеХранилище(Неопределено, Новый УникальныйИдентификатор)
|
|||
2
mikha
22.01.18
✎
14:00
|
не работает
и даже если проставить форме ЭтаФорма.КлючУникальности, то всё равно не работает сильное подозрение, что не работает именно на стороне фонового задания |
|||
3
Ц_У
22.01.18
✎
14:22
|
Поместить и получить проверь адреса, возможно разные
|
|||
4
Вафель
22.01.18
✎
14:23
|
АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, ЭтаФорма.УникальныйИдентификатор)
|
|||
5
ComradeKite
22.01.18
✎
14:33
|
От туда можно, туда нельзя. Из временного хранилища нельзя получить данные в фоновом задании. Передавай в фоновое задание структуру.
|
|||
6
mikha
22.01.18
✎
14:33
|
уже делал
|
|||
7
mikha
22.01.18
✎
14:35
|
(5) в фоновое задание передаю массив с параметрами, какие описаны в обработке, в отладчике вижу параметры, передают ся корректно
|
|||
8
ComradeKite
22.01.18
✎
14:37
|
По моему в типовом варианте Если Результат <> Неопределено Тогда получай из хранилища. По моему и сам так делал.
|
|||
9
ComradeKite
22.01.18
✎
14:38
|
Пардон если <>Неопределено, тогда Результат обрабатывай
|
|||
10
mikha
22.01.18
✎
14:48
|
(9)пардон не принят, результат = неопреледено постоянно
сделал в обработке выполняемой в задании ПоместитьВоВременноеХранилище(новый Структура("Результат, Данные", Результат, Данные), АдресПараметров); фыв = ПолучитьИзВременногоХранилища(АдресПараметров); фыв неопределено постоянно а хранилище настроек отлично работает мля |
|||
11
mikha
22.01.18
✎
14:49
|
(9) а как значение может быть больше или меньше неопределено?
|
|||
12
Вафель
22.01.18
✎
14:49
|
(10) к форме нужно привязывать хранилище
|
|||
13
Вафель
22.01.18
✎
14:50
|
(11) Эх, ты сколько лет в 1С???
|
|||
14
mikha
22.01.18
✎
14:52
|
(12) ПоместитьВоВременноеХранилище(Неопределено, ЭтаФорма.УникальныйИдентификатор) канает?
(13) не понял |
|||
15
Вафель
22.01.18
✎
15:03
|
(14) столько лет в 1с, а не знаешь как "не равно" пишется
|
|||
16
dezss
22.01.18
✎
15:08
|
А сколько времени проходит между передачей адреса хранилища на сервер и получением его результата на клиенте?
|
|||
17
dezss
22.01.18
✎
15:09
|
(16) + и что в результате хранится?
|
|||
18
mikha
22.01.18
✎
15:31
|
(15) ты не поверишь, но так и пишется "не а = с"
когда-то в некоторых языках отсутствовало НЕ, но здесь-то оно присутствует, так зачем сравнивать "неопределено" на больше меньше? (16) вот этого не знаю, есть подозрение что не успевает попасть, но в отладчике пробовал получать в течение минуты в конце процедуры, не срабатывает (17) без разницы, по ману помещается любое сериализуемое значение, пробовал таблицу значений, структуру |
|||
19
mikha
22.01.18
✎
15:36
|
(15) и ещё, ты, похоже, никогда не задумывался как транслируется твой код в байткод
|
|||
20
Вафель
22.01.18
✎
15:43
|
(18) 1с крайне не рекомендует так писать
|
|||
21
dezss
22.01.18
✎
15:53
|
(18) Так а фоновое точно завершилось?
|
|||
22
mikha
22.01.18
✎
16:10
|
(21) пробовал внутри задания, пробовал при статусе задания завершено
|
|||
23
DmitrO
22.01.18
✎
17:02
|
правильный ответ в (4)
(2) КлючУникальности - это не то пальто |
|||
24
Franchiser
гуру
22.01.18
✎
17:11
|
Может у тебя результат не сериализуемый в ВХ?
|
|||
25
Franchiser
гуру
22.01.18
✎
17:18
|
Напиши так:
АдресРезультата = ПоместитьВоВременноеХранилище("Тест", ЭтаФорма.УникальныйИдентификатор); Если по завершении будет неопределено, значит результат в ВХ сбросился, если останется "Тест", значит фоновое задание не завершилось. |
|||
26
mikha
22.01.18
✎
19:15
|
(23) делал до того как сюда писать
|
|||
27
4St
23.01.18
✎
08:59
|
В СП на тему ВХ и фоновых заданий довольно длинный текст с кучей сюрпризов.
"Примечание: Временное хранилище, сформированное в одном сеансе, недоступно из другого сеанса. Исключением является возможность передачи данных из фонового задания в сеанс, инициировавший фоновое задание, с помощью временного хранилища. Для такой передачи следует в родительском сеансе поместить во временное хранилище пустое значение, передав идентификатор формы. Затем полученный адрес передать в фоновое задание через параметры фонового задания. Далее, если этот адрес использовать в параметре <Адрес>, то результат будет скопирован в сеанс, из которого было запущено фоновое задание. Данные, помещенные во временное хранилище в фоновом задании, не будут доступны из родительского сеанса до момента завершения фонового задания. Данные, помещенные в фоновом сеансе в хранилище по сформированному в родительском сеансе адресу, сразу после помещения становятся недоступными в фоновом сеансе. " |
|||
28
rozer76
23.01.18
✎
09:13
|
по классике все просто:
в форме реквизиты формы АдресВХранилище и ИдентификаторЗадания и ... &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) АдресВХранилище = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); мПараметры = Новый Массив; мПараметры.Добавить(АдресВХранилище); ФоновоеЗадание = ФоновыеЗадания.Выполнить( "МодульФоновыеЗадания.ТестовоеЗадание", мПараметры); ИдентификаторЗадания = ФоновоеЗадание.УникальныйИдентификатор; КонецПроцедуры далее в фоне в серверном ОМ типо этого: Процедура ТестовоеЗадание(Адрес) Экспорт ТЗ = Новый ТаблицаЗначений; Для test=1 По 100 Цикл ТЗ.Добавить(); КонецЦикла; ПоместитьВоВременноеХранилище(ТЗ,Адрес); ДатаЗавершения = ТекущаяДата()+60; Пока ДатаЗавершения>ТекущаяДата() Цикл КонецЦикла; КонецПроцедуры .. и в форме ловим все это из фона: &НаКлиенте Процедура ПолучитьДанные(Команда) ПолучитьДанныеНаСервере(АдресВХранилище,ИдентификаторЗадания); КонецПроцедуры &НаСервереБезКонтекста Процедура ПолучитьДанныеНаСервере(АдресВХранилище, ИдентификаторЗадания) ФоновоеЗадание = ФоновыеЗадания. НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); Если ФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда ТЗ = ПолучитьИзВременногоХранилища(АдресВХранилище); Если ТЗ<>Неопределено Тогда Сообщить("Из фона получена таблица, строк-”+ ТЗ.Количество()); КонецЕсли; Иначе Сообщить("Задание еще активно"); КонецЕсли; КонецПроцедуры должно работать |
|||
29
mikha
24.01.18
✎
13:06
|
Благодарю Всех за ответы,
НО. Почему Вы не обратили внимание на то, что вначале всё работает. Повторюсь: работает! Потом срабатывает через раз, и только потом совсем не работает. Это занимает от 2 до 4 дней в разных базах (5 баз). |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |