Имя: Пароль:
1C
 
Альтернатива методу ВызватьHTTPМетодАсинх
,
0 aptomilov
 
25.10.24
13:51
Привет всем
Насколько я понял этот метод "ВызватьHTTPМетодАсинх" безнадежно устарел. Хотел поинтересоваться.
Каким методом можно асинхронно получить информацию через http-запрос?
Для понимания: результатом запроса будет картинка, которую надо будет сохранить на диск.
1 Волшебник
 
25.10.24
13:50
Вариант 1

&НаКлиенте
Асинх Процедура ЗагрузитьКартинку(Команда) 
	Адрес = "https://wizard.mista.ru/img/logo.png";
	ВремФайл = ПолучитьИмяВременногоФайла();
	
	Ждать КопироватьФайлАсинх(Адрес,ВремФайл); 
	ОписаниеФайла = Ждать ПоместитьФайлНаСерверАсинх(,,,ВремФайл);
	
	КартинкаНаФормеТипаСтрока = ОписаниеФайла.Адрес;
	ЭтаФорма.ОбновитьОтображениеДанных();
КонецПроцедуры



Вариант 2

&НаКлиенте
Процедура ЗагрузитьКартинку(Команда) 
	Адрес = "https://wizard.mista.ru/img/logo.png";
	ЗагрузитьКартинкуНаСервере(); 
	ЭтаФорма.ОбновитьОтображениеДанных();
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьКартинкуНаСервере() 
	ВремФайл = ПолучитьИмяВременногоФайла();
	
	КопироватьФайл(Адрес,ВремФайл); 
	
	дд = Новый ДвоичныеДанные(ВремФайл);
	Адрес = ПоместитьВоВременноеХранилище(дд);	
	КартинкаНаФормеТипаСтрока = Адрес;
КонецПроцедуры
2 Garykom
 
гуру
25.10.24
14:39
(0) Если &НаСервере, то смысла от этого Асинх нет.
Вот если &НаКлиенте, то есть, но зачем тебе делать http запросы на клиенте-то?
3 Garykom
 
гуру
25.10.24
14:28
самое прикольное делать http-запросы на клиенте к http-сервису опубликованному в той же базе...
4 aptomilov
 
25.10.24
15:00
Соединение = Новый HTTPСоединение("192.168.1.199",8080,,,,,
                Новый ЗащищенноеСоединениеOpenSSL());        
                Запрос = Новый HTTPЗапрос("/screenshot?channel=SqM1EMQR&figures=1&password=123456");
                Результат = Соединение.ОтправитьДляОбработки(Запрос);
                
                

                Результат.ПолучитьТелоКакДвоичныеДанные().Записать(ПутьХранения + ИмяПапки + "\" + Номер + "_" + Талон + ".jpg");
5 sikuda
 
26.10.24
10:47
(0) Хохма дня - "ВызватьHTTPМетодАсинх" безнадежно устарел
1. он еще не начал применяться массово
2. он предназначен только для клиента
3. по безопасности он применяется только с того-же сайта, что и база если Web клиент.

Процесс сохранения файла на локальный диск в браузере обязательно требует подтверждения пользователя. Поэтому чисто клиентские методы не станут хорошей основой - пользуйтесь серверными функциями
6 lubitelxml
 
26.10.24
10:49
(3) а вы знаете толк в извращениях ))
7 sikuda
 
26.10.24
10:54
(6) Для тех кто до сих пор "в танке 1С": https://habr.com/ru/companies/macloud/articles/553826/
8 sikuda
 
26.10.24
11:01
(1) Надо себе закладочку оставить, по загрузке изображений на сайт...
async function load(){
  const myImage = document.querySelector("img");
  let response = await fetch('test.png');
  let blob = await response.blob(); 
  const objectURL = URL.createObjectURL(blob);
  myImage.src = URL.createObjectURL(blob);
}


Или красивее:
 const myImage = document.querySelector("img");
 const myRequest = new Request("test.png"); //"flowers.jpg");

 fetch(myRequest)
   .then((response) => {
     if (!response.ok) {
       throw new Error(`HTTP error, status = ${response.status}`);
     }
     return response.blob();
   })
   .then((myBlob) => {
     const objectURL = URL.createObjectURL(myBlob);
     myImage.src = objectURL;
   })
   .catch((error) => {
     const p = document.createElement("p");
     p.appendChild(document.createTextNode(`Error: ${error.message}`));
     document.body.insertBefore(p, myImage);
   });
9 sikuda
 
31.10.24
10:18
(1) И у меня для Вас плохая/хорошая новость
Расширения доступа к файлам 1С в брузерах 2022 года не дает доступ к локальному диску.

функции КопироватьФайлАсинх в браузере с установленным расширением 1С дает ошибку что расширение на установлено 🤦
Проверял на firefox
Переустановка расширения средствами 1С -
10 sikuda
 
27.10.24
15:39
(9) Главное не стоит беспокоиться!
Cкачивание файлов с помощью curl (Выполнение произвольного кода) прекрасно работает и в тонком и в вэб-клиенте(только с расширением от 1С).
Пример можно взять из описания функции БСП ФайловаяСистемаКлиент.ЗапуститьПрограмму
11 PR
 
27.10.24
16:23
ТС странный, метод с окончанием Асинх устарел, говорит
Самый последний вариант, еще только начинают использовать, а уже устарел, хуя се
12 sikuda
 
07.11.24
08:22
Причем, что самое интересное  ПолучитьИмяВременногоФайла() недоступна из Web-клиента! 🔥

Сырая еще Ваша 1С, сырая 💖💖💖
13 Волшебник
 
28.10.24
13:16
(12) Рекомендую использовать Толстый клиент, там всё доступно
14 sikuda
 
29.10.24
08:44
И таки да, так долго делать расширения для работы с файлам в браузере, переводить весь код из БСП на авто установку этого расширения, ломая простой код для тонкого и ТОЛСТОГО клиента и в результате  через  два года не работает запись файла на диск в веб-клиент с расширением.
О современный мир в котором работоспособность в будущем никто не хочет предоставлять, все заняты текущими мега проектами...
15 aptomilov
 
07.11.24
09:20
Поясню, что к чему.
Это запрос выполняется к трассиру (видеонаблюдение).
Он находится на том же сервере, что и база — хттп запрос на получение скрин шота.
И так получается, что выполняется ему надо 2 раза на один документ (документ взвешивания авто).
Тратится примерно 6 секунд на 2 запроса скрин шота, а это критично, как мне говорит руководство. Формы обычные.
Запрос выполняется не на самом сервере, а на машине возле весов (по кабелю 3 метра до коммутатора). База подцеплена по обычной локалке.
Как можно сделать это асинхронно, пока не пойму. В целом машина на весах стоит не меньше 60 секунд, всё это время открыта форма мастера взвешивания, по сути времени точно хватить на асинхронное выполнение.
16 aptomilov
 
31.10.24
09:59
(13) я в толстом клиенте и так
17 Мультук
 
гуру
31.10.24
10:02
(15)

Дык исключите из теста 1С вообще.
Напишите скрипт (на чём угодно), который получает два скриншота и сохраняет их локально.

Если это будет быстрее, чем "6 сек", то думаем в одну сторону, если столько же по времени - в другую.
Может у вас скриншоты по 100 Мб, или шнурочек пропускает 10 Мегабит

P.S.

Асинхронно, синхронно. Синхрофазотронно...
18 aptomilov
 
31.10.24
10:02
еще добавлю что запрос должен быть выполнен именно в рамках завеса до записи документа
19 aptomilov
 
31.10.24
10:05
скрины по 1,5 мб
сетка 100 мб
20 aptomilov
 
31.10.24
10:11
браузер отдает картинку через три секунды по этой ссылке
21 aptomilov
 
07.11.24
09:19
Поэтому и хочу асинхронный запрос,
чтобы в любом месте его запустить и не мешать весовщику делать свое дело.
22 arsik
 
гуру
31.10.24
10:12
(17) Ну так ТС и топит, за то что 1С не причем. А время в хочет через асинхронность сократить
23 aptomilov
 
07.11.24
09:19
Да не хочу я его сократить. Я хочу, чтобы не подвисала форма на эти 6 секунд. ))
Видимо, через обработчик ожидания надо сделать и не париться.
24 Мультук
 
гуру
31.10.24
10:24
(22)

1) Да, в (19) он в этом явно признался.
2) Насколько я понимаю в словах "1С и асинхронность", у него ничего не получится

(0) Асинхронно <> Фоново

А почему нельзя (если уж так важно) получить картинки запустив фоновое задание ?
Правда не знаю, накладные затраты на запуск фонового и получение картинок обратно,
будут ли он намного меньше чем 6 сек
25 sikuda
 
31.10.24
15:48
(23) Я бы смотрел в сторону НачатьКопированиеФайла(или НачатьПомещениеФайлаНаСервер) с отработкой оповещения (что и есть асинхронно), если в толстом клиенте Ждать КопироватьФайлАсинх не проходит.