Имя: Пароль:
1C
1С v8
Результат выполнения фонового задания
0 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), по этому же адресу данные = неопределено
хотя структуру с адресами, записанную в фоновом, после выполнения получили на клиенте. а по адресам из структуры - неопределено

ЧЯДНТ?

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

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

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

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

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

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

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

но в 1. там неопределено а в 2 там данные

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

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

там в ПолучитьИзображенияСКамерыHTTP

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

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

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

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

Картинки = ПолучитьИзВременногоХранилища(АдресКартинокДляФонового);    
АдресКартинки1 = Картинки.АдресКартинки1; итд
25 Franchiser
 
гуру
15.07.20
16:20
(24) то есть ты в фоновом задании каждую картинку помещаешь в отдельный ВХ, адреса которых инициированы в фоновом задании?
26 Franchiser
 
гуру
15.07.20
16:24
(0) Покажи код из ПолучитьИзображенияСКамерыHTTP()
27 nAPACEHAK
 
16.07.20
08:17
(26)
Точно. Походу я промохал с идентификатором ВХ и после фонового на клиенте там ничего нет

              АдресКартинки = Неопределено; (!!!)


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

            Если Не ПолучитьФайл Тогда
                //ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайла);
                //АдресКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанные, АдресКартинки);
                //УдалитьФайлы(ИмяФайла);
                ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные();
                АдресКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанные, АдресКартинки);
                ВходныеПараметры["АдресКартинки" + й] = АдресКартинки;
            Иначе
                //ВыходныеПараметры.Добавить(ИмяФайла);
            КонецЕсли;
        Исключение
28 Franchiser
 
гуру
16.07.20
10:43
(27) Интересный у тебя код:

АдресКартинки = Неопределено; (!!!)
АдресКартинки = ПоместитьВоВременноеХранилище(ДвоичныеДанные, АдресКартинки);
29 Franchiser
 
гуру
16.07.20
10:46
Зачем у тебя еще в ПолучитьИзображениеСКамер():

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