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

1С:Предприятие ::

Метки: 

Глюк платформы - временное хранилище (Обычные формы)

Я
   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й раз у меня всегда стабильно воспроизводится

Пожалуйста проверьте воспроизводится ли у вас и желательно на более старших платформах.

Заранее спасибо
 
 
   Air777
 
1 - 03.07.18 - 16:27
Для тех кому лениво качать ниже текст кода из конфигурации:

////////////////////////////модуль обработки


Перем Ключ,АдресРезультата;

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


Процедура ПроверкаГотовности() Экспорт
    
    ФильтрОтбора = Новый Структура("Наименование,Ключ,Состояние", "Задание", Ключ, СостояниеФоновогоЗадания.Завершено);
    МассивЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(ФильтрОтбора);
    
    Если МассивЗаданий.Количество() > 0 Тогда//И НЕ МассивЗаданий[0].ИнформацияОбОшибке.Описание = "" Тогда

                
        Значение=ПолучитьИзВременногоХранилища(АдресРезультата);
        Сообщить("Результат="+СокрЛП(Значение));            
    Иначе        
        ПодключитьОбработчикОжидания("ПроверкаГотовности",0.4,Истина);
    КонецЕсли;
КонецПроцедуры


/////////////////модуль Сервер


Процедура Сформировать(АдресРезульта) Экспорт
    
Результат=1;    
ПоместитьВоВременноеХранилище(Результат,АдресРезульта);    

КонецПроцедуры
   sechs
 
2 - 03.07.18 - 16:40
(0) Это не глюк, а давно известное поведение, юный падаван.

На клиент-сервере результат выполнения фонового задания копируется во временное хранилище после завершения его выполнения. В файловой - в силу реализиации механизма выполнения фоновых, оно доступно всегда.

Так что ожидай завершения фонового по его состоянию и читай книжки...
   Wingless
 
3 - 03.07.18 - 16:49
(0) Единственный работающий вариант передачи данных через временное хранилище между сеансом и фоновым заданием, работающий одинаково в файловом и клиент-серверном варианте - это помещение результата В фоновом задании, а не наоборот.
   Wingless
 
4 - 03.07.18 - 16:50
   Air777
 
5 - 04.07.18 - 00:20
(2) задание завершается вполне успешно. Это достигается фильтром СостояниеФоновогоЗадания.Завершено.
Ткните меня носом в книжку где этот нюанс описан.

(4) спасибо. Оно должно или не должно работать таким образом ? Если это НЕ баг то почему оно работает со 2й попытки?! В ветке я не нашел ответа или решения

(3) Буду благодарен за рабочий пример
   sechs
 
6 - 04.07.18 - 04:38
(5) Задание надо искать по его уникальному, единственному и неповторимому идентификатору. А не ковыряться в куче уже завершенных ранее фоновых.
   Air777
 
7 - 04.07.18 - 10:21
(6) ну как бы да это всё есть в коде в (1) это же очевидные вещи


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