Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Результат выполнения фонового задания

Результат выполнения фонового задания
Я
   nAPACEHAK
 
15.07.20 - 10:35
Доброго.

Форма запускает фоновое. в фоновом получает скрины с камер и выводит картинку

АдресКартинокДляФонового, ИдентификаторЗаданияПолученияИзображенияСКамер - реквизит формы

*** Форма

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

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

&НаКлиенте
Процедура Подключаемый_ПроверитьВыполнениеЗаданияПолученияИзображенияСКамер()        
    ЗаданиеВыполненоУспешно = Ложь;
    Если ЗаданиеФоновоеВыполнено(ИдентификаторЗаданияПолученияИзображенияСКамер) Тогда
        ЗаданиеВыполненоУспешно = Истина;
    КонецЕсли;
    Если ЗаданиеВыполненоУспешно Тогда                
        Картинки = ПолучитьИзВременногоХранилища(АдресКартинокДляФонового);    
        АдресКартинки1 = Картинки.АдресКартинки1;
        АдресКартинки2 = Картинки.АдресКартинки2;
        АдресКартинки3 = Картинки.АдресКартинки3;
        АдресКартинки4 = Картинки.АдресКартинки4;
                ;;;;; Данные = ПолучитьИзВременногоХранилища(ВходныеПараметры.АдресКартинки1);       *** (1)
                ЗапуститьФоновоеКамера (АдресКартинокДляФонового, ИдентификаторЗаданияПолученияИзображенияСКамер, ЭтаФорма.УникальныйИдентификатор);
    КонецЕсли;
КонецПроцедуры

*** Общий модуль

Процедура ПолучитьИзображениеСКамер(АдресКартинок = "") Экспорт
        Парам = Неопределено;
    ВходныеПараметры = Новый Структура("АдресКартинки1, АдресКартинки2, АдресКартинки3, АдресКартинки4", "", "", "", "");
    ВыходныеПараметры = Неопределено;

    Результат = ПолучитьИзображенияСКамерыHTTP(Парам, ВходныеПараметры, ВыходныеПараметры);
    Если Результат Тогда
        ПоместитьВоВременноеХранилище(ВходныеПараметры, АдресКартинок);    
    КонецЕсли;     
    ;;;;; Данные = ПолучитьИзВременногоХранилища(ВходныеПараметры.АдресКартинки1);       *** (2)
КонецПроцедуры



Помогите разобраться, плз


С формы запускается фоновое

В фоновом получаем картинки, кидаем их во временное (ПолучитьИзображенияСКамерыHTTP).
ВходныеПараметры - структура с адресами картинок. (тут в (2) есть данные)
Кидаем ВходныеПараметры по переданному адресу. фоновое завершено

на форме проверяем завершение фонового.
По сохраненному адресу получаем структуру адресов с данными.
Тут АдресКартинки1 на форме и АдресКартинки1 в фоновом - идентичны
но в (2) по этому адресу данные есть а в (1), по этому же адресу данные = неопределено
хотя структуру с адресами, записанную в фоновом, после выполнения получили на клиенте. а по адресам из структуры - неопределено

ЧЯДНТ?

есть еще мысль что дело в УИДе когда помещаем в хранилище в фоновом сеансе и принимаем на клиенте - это разные хранилища, хоть и адрес одинаковый. Может так?
   nAPACEHAK
 
1 - 15.07.20 - 10:36
блин. промахнулся со сносками. чот не подумал что он из них ссылки на пост сделает
   nAPACEHAK
 
2 - 15.07.20 - 10:36
(2)
   vi0
 
3 - 15.07.20 - 11:23
стабильно воспроизводится?
какая платформа?
   nAPACEHAK
 
4 - 15.07.20 - 11:27
(3) каждый раз получаю неопределено
8.3.15.1830
   nAPACEHAK
 
5 - 15.07.20 - 11:55
каждый раз структура адресов хранилища (заполненная в фоновом) но клиенте получаю
по адресу из структуры (по которому лежит картинка из фонового) получаю всегда неопределено

как то непонятно получается. адрес1 формы = адрес1 фонового, адрес2 формы = адрес2 фонового

на форме по адрес1 есть данные и там и там по адрес2 в фоне еть на форме неопределено
   vi0
 
6 - 15.07.20 - 12:41
(5) без обид, но воспринимать такой текст тяжело, особенно последнюю строку
   Ёпрст
 
7 - 15.07.20 - 12:48
(0)

Данные = ПолучитьИзВременногоХранилища(ВходныеПараметры.АдресКартинки1);       *** (1)

а зачем ты передаешь ВходныеПараметры.АдресКартинки1 а выше получаешь АдресКартинки1 ?

И есть уверенность, что  в этот момент, в ВходныеПараметры.АдресКартинки1 не дырка от бублика ?
   nAPACEHAK
 
8 - 15.07.20 - 12:56
(7) есть уверенность

и то что в коде как Данные = .... это просто для точек останова временно ставил что бы посмотреть что там. оно нигде не используется

но в 1. там неопределено а в 2 там данные
в 1 и 2 адрес, по которому получаю, одинаковый. 

2 это в фоновом а 1 это на клиенте после выполнения фонового

т.е получается фоновое поместило данные по конкретному адресу, завершилось, и уже после завершения, на клиенте, по этому же адресу неопределено
   Franchiser
 
9 - 15.07.20 - 13:03
(0) Передавай картинку как двоичные данные, возможно так в фоновое передавать нельзя параметры в составе ВХ. Такая же проблема была с передачей файлов (смотри мои темы).
   nAPACEHAK
 
10 - 15.07.20 - 13:11
(9) в смысле? она и так хранится как ДД
там в ПолучитьИзображенияСКамерыHTTP

ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные();
ПоместитьВоВременноеХранилище(ДвоичныеДанные, Адр);
   Ёпрст
 
11 - 15.07.20 - 13:24
(0) почитай описалово метода ПоместитьВоВременноеХранилище, там есть на счет фонового и родительской формы, откуда оно запущено и что и где доступно будет
   Franchiser
 
12 - 15.07.20 - 13:40
(10) не помещай в ВХ
   Franchiser
 
13 - 15.07.20 - 13:47
(10) у меня была проблема именно с передачей двоичных данных в фоновое (что обошел передачей двоичных данных в качестве параметра), обратно (из фонового) можно ли передать без ВХ не знаю (проблемы такой не было.)
   Franchiser
 
14 - 15.07.20 - 13:51
Так пробовал?
АдресКартинокДляФонового = ПоместитьВоВременноеХранилище(Неопределено, ЭтаФорма.УникальныйИдентификатор);
Заменить на
АдресКартинокДляФонового = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
   nAPACEHAK
 
15 - 15.07.20 - 13:53
(11) потопал в очередной раз читать буквы (((

хотя сейчас попробовал вернуть не структуру адресов с адресами ДД в хранилище, а сразу адрес на ДД (в принципе ничего основного не поменялось в коде) - и на клиенте по переданному адресу получил ДД

а если передаю структуру с адресами и получаю из ВХ по адресу из структуры адресов полученной (адреса идентичны) - почему то вместо ДД неопределено выходит

(12) а как передать ДД как результат работы фоновой на клиента? с файлами извращаться тоже не комильфо
(13) вроде как только ВХ из фонового. это если без контекста. если с контекстом то можно рекв.формы например какой нить заполнить
(14) да. однопенисуально
   vi0
 
16 - 15.07.20 - 14:03
есть баг один, но вроде не твой случай
https://bugboard.v8.1c.ru/error/000048128
   Franchiser
 
17 - 15.07.20 - 14:04
(15) Почему нельзя сделать структуру не 
Новый Структура("АдресКартинки1, АдресКартинки2, АдресКартинки3, АдресКартинки4", "", "", "", "");
а 
Новый Структура("ДДКартинки1, ДДКартинки2, ДДКартинки3, ДДКартинки4", "", "", "", "");
Насколько я помню будет доступен только тот адрес с данными хранилища который определен на клиенте перед передачей в фоновое.
   vi0
 
18 - 15.07.20 - 14:07
Адрес = ПоместитьВоВременноеХранилище(Неопределено);
   Franchiser
 
19 - 15.07.20 - 14:09
(18) у него есть такой код в ПриОткрытии()
   vi0
 
20 - 15.07.20 - 14:11
(19) не вижу у него такого вызова, чтобы с одним параметром
   Franchiser
 
21 - 15.07.20 - 14:12
(0) Что есть АдресКартинки1, АдресКартинки2, АдресКартинки3 ...
Это адреса картинок в ВХ, созданном в фоновом задании или адреса на объекты в БД ?
   Franchiser
 
22 - 15.07.20 - 14:18
(20) если без второго параметра данные в хранилище как раз  точно исчезнут после первого же серверного вызова.
   vi0
 
23 - 15.07.20 - 14:45
(22) ну да, правда я не вчитывался в код и топик, бегло прочитал
   nAPACEHAK
 
24 - 15.07.20 - 15:30
(21) АдресКартинки1 это реквизит формы, в который дожны попадать адреса из фонового
Картинки это структура ("АдресКартинки1,2,3...) в значениях которой адреса ДД помещенных в фоновом
Картинки = ПолучитьИзВременногоХранилища(АдресКартинокДляФонового);    
АдресКартинки1 = Картинки.АдресКартинки1; итд
   Franchiser
 
25 - 15.07.20 - 16:20
(24) то есть ты в фоновом задании каждую картинку помещаешь в отдельный ВХ, адреса которых инициированы в фоновом задании?
   Franchiser
 
26 - 15.07.20 - 16:24
(0) Покажи код из ПолучитьИзображенияСКамерыHTTP()
   nAPACEHAK
 
27 - 16.07.20 - 08:17
(26)
Точно. Походу я промохал с идентификатором ВХ и после фонового на клиенте там ничего нет
              АдресКартинки = Неопределено; (!!!)


              Попытка
            HTTPСоединение = Новый HTTPСоединение(ИмяСервера, Порт, Логин, Пароль, Неопределено, Таймаут);
            HTTPЗапрос = Новый HTTPЗапрос(URLПодключения);
            //ИмяФайла = ПолучитьИмяВременногоФайла("~jpg");

            Ответ = HTTPСоединение.Получить(HTTPЗапрос);//, ИмяФайла);


            Если Не ПолучитьФайл Тогда
                //ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла);

                //АдресКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанные, АдресКартинки);

                //УдалитьФайлы(ИмяФайла);

                ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные();
                АдресКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанные, АдресКартинки);
                ВходныеПараметры["АдресКартинки" + й] = АдресКартинки;
            Иначе
                //ВыходныеПараметры.Добавить(ИмяФайла);

            КонецЕсли;
        Исключение
   Franchiser
 
28 - 16.07.20 - 10:43
(27) Интересный у тебя код:

АдресКартинки = Неопределено; (!!!)
АдресКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанные, АдресКартинки);
   Franchiser
 
29 - 16.07.20 - 10:46
Зачем у тебя еще в ПолучитьИзображениеСКамер():
Если Результат Тогда
        ПоместитьВоВременноеХранилище(ВходныеПараметры, АдресКартинок);    
КонецЕсли;  
?
   nAPACEHAK
 
30 - 16.07.20 - 13:01
(28) спасибо, разобрался ))))
просто код этой процедуры по диагонали просмотрел. перемкнуло чота
 
 Рекламное место пустует
   vi0
 
31 - 16.07.20 - 15:39
(30) твоя ошибка в спешке
рекомендую пофиксить ее накорню


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