![]() |
|
Глюк платформы - временное хранилище (Обычные формы) | ☑ | ||
---|---|---|---|---|
0
Air777
03.07.18
✎
15:51
|
Если в фоновом задании передать значение через временное хранилище то 1й раз система всегда возвращает Неопределено. 2й и далее ок.
Проблема воспроизводится на 8.3.8 и 8.3.10 ТОЛЬКО в клиент серверном варианте. В файловом работает как надо! https://cloud.mail.ru/public/JXzu/xEQ4oszkg По ссылке контрольная БД демонстрирующая проблему. Загрузить и запустить в режиме предприятия. В открывшейся обработке нажать "Выполнить". Получите сообщение "Результат=" (Неопределено) Если нажать еще раз будет: "Результат=1" В файловой сразу как надо. Также замечено что при активном использовании данного механизма результат также может иногда выпадать. 100 раз норм потом разово неопределено и дальше снова 100 раз норм. Условные 100раз конечно. Но 1й раз у меня всегда стабильно воспроизводится Пожалуйста проверьте воспроизводится ли у вас и желательно на более старших платформах. Заранее спасибо |
|||
1
Air777
03.07.18
✎
16:27
|
Для тех кому лениво качать ниже текст кода из конфигурации:
////////////////////////////модуль обработки Перем Ключ,АдресРезультата; Процедура КнопкаВыполнитьНажатие(Кнопка) Ключ=Новый УникальныйИдентификатор; АдресРезультата=ПоместитьВоВременноеХранилище(Неопределено,Новый УникальныйИдентификатор); Параметры=Новый Массив; Параметры.Добавить(АдресРезультата); ФоновыеЗадания.Выполнить("Сервер.Сформировать",Параметры, Ключ, "Задание"); ПодключитьОбработчикОжидания("ПроверкаГотовности",0.3,Истина); КонецПроцедуры Процедура ПроверкаГотовности() Экспорт ФильтрОтбора = Новый Структура("Наименование,Ключ,Состояние", "Задание", Ключ, СостояниеФоновогоЗадания.Завершено); МассивЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(ФильтрОтбора); Если МассивЗаданий.Количество() > 0 Тогда //И НЕ МассивЗаданий[0].ИнформацияОбОшибке.Описание = "" Тогда Значение=ПолучитьИзВременногоХранилища(АдресРезультата); Сообщить("Результат="+СокрЛП(Значение)); Иначе ПодключитьОбработчикОжидания("ПроверкаГотовности",0.4,Истина); КонецЕсли; КонецПроцедуры /////////////////модуль Сервер Процедура Сформировать(АдресРезульта) Экспорт Результат=1; ПоместитьВоВременноеХранилище(Результат,АдресРезульта); КонецПроцедуры |
|||
2
sechs
03.07.18
✎
16:40
|
(0) Это не глюк, а давно известное поведение, юный падаван.
На клиент-сервере результат выполнения фонового задания копируется во временное хранилище после завершения его выполнения. В файловой - в силу реализиации механизма выполнения фоновых, оно доступно всегда. Так что ожидай завершения фонового по его состоянию и читай книжки... |
|||
3
Wingless
03.07.18
✎
16:49
|
(0) Единственный работающий вариант передачи данных через временное хранилище между сеансом и фоновым заданием, работающий одинаково в файловом и клиент-серверном варианте - это помещение результата В фоновом задании, а не наоборот.
|
|||
4
Wingless
03.07.18
✎
16:50
|
||||
5
Air777
04.07.18
✎
00:20
|
(2) задание завершается вполне успешно. Это достигается фильтром СостояниеФоновогоЗадания.Завершено.
Ткните меня носом в книжку где этот нюанс описан. (4) спасибо. Оно должно или не должно работать таким образом ? Если это НЕ баг то почему оно работает со 2й попытки?! В ветке я не нашел ответа или решения (3) Буду благодарен за рабочий пример |
|||
6
sechs
04.07.18
✎
04:38
|
(5) Задание надо искать по его уникальному, единственному и неповторимому идентификатору. А не ковыряться в куче уже завершенных ранее фоновых.
|
|||
7
Air777
04.07.18
✎
10:21
|
(6) ну как бы да это всё есть в коде в (1) это же очевидные вещи
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |