Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Временное Хранилище

Временное Хранилище
Я
   mikha
 
22.01.18 - 12:48
Приветствую.
В последнее время перестал работать обмен данными между сервером (фоновое задание) и клиентом через временное хранилище.

на клиенте делаю
АдресПараметров = ПоместитьВоВременноеХранилище(Неопределено)
передаю параметром фоновому заданию

на сервере в фоновом задании чё-то делаю, выкладываю результат в 
ПоместитьВоВременноеХранилище(Результат, АдресПараметров)

на клиенте обработчик ожидания смотрит завершение задания и
Результат = ПолучитьИзВременногоХранилища(АдресПараметров)

И если в начале день, два всё работает, то потом результат получается из хранилища на второй третий раз, а сейчас постоянно "неопределено". Одну обработку перевёл на хранилище настроек, всё заработало отлично, но это же не правильно.

Платформа 1С:Предприятие 8.3 (8.3.10.2580) УПП 1.3.100.1 SQL 2008
 
 
   Franchiser
 
1 - 22.01.18 - 13:26
ПоместитьвовременноеХранилище(Неопределено, Новый   УникальныйИдентификатор)
   mikha
 
2 - 22.01.18 - 14:00
не работает
и даже если проставить форме ЭтаФорма.КлючУникальности, то всё равно не работает
сильное подозрение, что не работает именно на стороне фонового задания
   Ц_У
 
3 - 22.01.18 - 14:22
Поместить и получить проверь адреса, возможно разные
   Вафель
 
4 - 22.01.18 - 14:23
АдресРезультата = ПоместитьВоВременноеХранилище(Неопределено, ЭтаФорма.УникальныйИдентификатор)
   ComradeKite
 
5 - 22.01.18 - 14:33
От туда можно, туда нельзя. Из временного хранилища нельзя получить данные в фоновом задании. Передавай в фоновое задание структуру.
   mikha
 
6 - 22.01.18 - 14:33
уже делал
   mikha
 
7 - 22.01.18 - 14:35
(5) в фоновое задание передаю массив с параметрами, какие описаны в обработке, в отладчике вижу параметры, передают ся корректно
   ComradeKite
 
8 - 22.01.18 - 14:37
По моему в типовом варианте Если Результат <> Неопределено Тогда получай из хранилища. По моему и сам так делал.
   ComradeKite
 
9 - 22.01.18 - 14:38
Пардон если <>Неопределено, тогда Результат обрабатывай
   mikha
 
10 - 22.01.18 - 14:48
(9)пардон не принят, результат = неопреледено постоянно

сделал в обработке выполняемой в задании
ПоместитьВоВременноеХранилище(новый Структура("Результат, Данные", Результат, Данные), АдресПараметров);
фыв = ПолучитьИзВременногоХранилища(АдресПараметров);
фыв неопределено постоянно
а хранилище настроек отлично работает
мля
 
 Рекламное место пустует
   mikha
 
11 - 22.01.18 - 14:49
(9) а как значение может быть больше или меньше неопределено?
   Вафель
 
12 - 22.01.18 - 14:49
(10) к форме нужно привязывать хранилище
   Вафель
 
13 - 22.01.18 - 14:50
(11) Эх, ты сколько лет в 1С???
   mikha
 
14 - 22.01.18 - 14:52
(12) ПоместитьВоВременноеХранилище(Неопределено, ЭтаФорма.УникальныйИдентификатор) канает?
(13) не понял
   Вафель
 
15 - 22.01.18 - 15:03
(14) столько лет в 1с, а не знаешь как "не равно" пишется
   dezss
 
16 - 22.01.18 - 15:08
А сколько времени проходит между передачей адреса хранилища на сервер и получением его результата на клиенте?
   dezss
 
17 - 22.01.18 - 15:09
(16) + и что в результате хранится?
   mikha
 
18 - 22.01.18 - 15:31
(15) ты не поверишь, но так и пишется "не а = с"
когда-то в некоторых языках отсутствовало НЕ, но здесь-то оно присутствует, так зачем сравнивать "неопределено" на больше меньше?
(16) вот этого не знаю, есть подозрение что не успевает попасть, но в отладчике пробовал получать в течение минуты в конце процедуры, не срабатывает
(17) без разницы, по ману помещается любое сериализуемое значение, пробовал таблицу значений, структуру
   mikha
 
19 - 22.01.18 - 15:36
(15) и ещё, ты, похоже, никогда не задумывался как транслируется твой код в байткод
   Вафель
 
20 - 22.01.18 - 15:43
(18) 1с крайне не рекомендует так писать
   dezss
 
21 - 22.01.18 - 15:53
(18) Так а фоновое точно завершилось?
   mikha
 
22 - 22.01.18 - 16:10
(21) пробовал внутри задания, пробовал при статусе задания завершено
   DmitrO
 
23 - 22.01.18 - 17:02
правильный ответ в (4)
(2) КлючУникальности - это не то пальто
   Franchiser
 
24 - 22.01.18 - 17:11
Может у тебя результат не сериализуемый в ВХ?
   Franchiser
 
25 - 22.01.18 - 17:18
Напиши так:
АдресРезультата = ПоместитьВоВременноеХранилище("Тест", ЭтаФорма.УникальныйИдентификатор);
Если по завершении будет неопределено, значит результат в ВХ сбросился, если останется "Тест", значит фоновое задание не завершилось.
   mikha
 
26 - 22.01.18 - 19:15
(23) делал до того как сюда писать
   4St
 
27 - 23.01.18 - 08:59
В СП на тему ВХ и фоновых заданий довольно длинный текст с кучей сюрпризов.

"Примечание:

Временное хранилище, сформированное в одном сеансе, недоступно из другого сеанса.
Исключением является возможность передачи данных из фонового задания в сеанс, инициировавший фоновое задание, с помощью временного хранилища. Для такой передачи следует в родительском сеансе поместить во временное хранилище пустое значение, передав идентификатор формы. Затем полученный адрес передать в фоновое задание через параметры фонового задания. Далее, если этот адрес использовать в параметре <Адрес>, то результат будет скопирован в сеанс, из которого было запущено фоновое задание.
Данные, помещенные во временное хранилище в фоновом задании, не будут доступны из родительского сеанса до момента завершения фонового задания.
Данные, помещенные в фоновом сеансе в хранилище по сформированному в родительском сеансе адресу, сразу после помещения становятся недоступными в фоновом сеансе. "
   rozer76
 
28 - 23.01.18 - 09:13
по классике все просто:

в форме реквизиты формы АдресВХранилище и ИдентификаторЗадания и ...  

&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) АдресВХранилище = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); мПараметры = Новый Массив; мПараметры.Добавить(АдресВХранилище); ФоновоеЗадание = ФоновыеЗадания.Выполнить( "МодульФоновыеЗадания.ТестовоеЗадание", мПараметры); ИдентификаторЗадания = ФоновоеЗадание.УникальныйИдентификатор; КонецПроцедуры

далее в фоне в серверном ОМ типо этого:
Процедура ТестовоеЗадание(Адрес) Экспорт ТЗ = Новый ТаблицаЗначений; Для test=1 По 100 Цикл ТЗ.Добавить(); КонецЦикла; ПоместитьВоВременноеХранилище(ТЗ,Адрес); ДатаЗавершения = ТекущаяДата()+60; Пока ДатаЗавершения>ТекущаяДата() Цикл КонецЦикла; КонецПроцедуры


.. и в форме ловим все это из фона:

&НаКлиенте Процедура ПолучитьДанные(Команда) ПолучитьДанныеНаСервере(АдресВХранилище,ИдентификаторЗадания); КонецПроцедуры &НаСервереБезКонтекста Процедура ПолучитьДанныеНаСервере(АдресВХранилище, ИдентификаторЗадания) ФоновоеЗадание = ФоновыеЗадания. НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); Если ФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда ТЗ = ПолучитьИзВременногоХранилища(АдресВХранилище); Если ТЗ<>Неопределено Тогда Сообщить("Из фона получена таблица, строк-”+ ТЗ.Количество()); КонецЕсли; Иначе Сообщить("Задание еще активно"); КонецЕсли; КонецПроцедуры

должно работать
   mikha
 
29 - 24.01.18 - 13:06
Благодарю Всех за ответы,
НО. Почему Вы не обратили внимание на то, что вначале всё работает. Повторюсь: работает! Потом срабатывает через раз, и только потом совсем не работает. Это занимает от 2 до 4 дней в разных базах (5 баз).


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует