Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Формирование файла по HTTP запросу
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
svv1979
Добрый день

Есть ссылка необходимо зарегистрироваться для просмотра ссылки

При выполнении в браузере по ней открывается форма отчета и сразу формируется Exel файл

СерверИсточник = "sait2";
Адрес = Новый HTTPЗапрос("/pls/info/REESTR_PERSONS_TO_1C.run?rep_user=IVANOV&p_com=30274&p_reestr_format=xls&p_action=Пуск");
ИмяВходящегоФайла = C:\1\1.xls;
НТТР = Новый HTTPСоединение(СерверИсточник);
НТТР.Получить(Адрес, ИмяВходящегоФайла);
ВходящийФайл = Новый Файл(ИмяВходящегоФайла);


При выполнении, в файл сохраняется только форма с параметрами, а не сам готовый отчет

Надо что бы при запуске из один 1С формировался файл отчета и сохранялся на диск

В чем может быть проблема?
Vofka
Надо более конкретно смотреть что по конкретной ссылке происходит, потому что просто по описанию сложно понять.
svv1979
Vofka @ Сегодня, 11:41 необходимо зарегистрироваться для просмотра ссылки ,

Вставляю ссылку в интернет эксплоер и сразу идет формирование файла

если пытаюсь сделать из 1С то в файл сохраняются только параметры для выполнения

Это ссылка на получение отчета из базы оракл и
и в базе так же происходит работа через internet explorer

может надо другим способом запускать формирование файла отчета?

Так в самой ссылке заполнены все параметры и команда запуска формирования отчета в файл
Vofka
А что вы имеете ввиду под
Цитата(svv1979 @ 15.07.20, 13:18) необходимо зарегистрироваться для просмотра ссылки
идет формирование файла

? Начинается скачивание?
svv1979
Vofka @ Вчера, 16:21 необходимо зарегистрироваться для просмотра ссылки ,
если вручную делать нажимаешь ПУСК формируется файл и сохраняется(в експлоере выходит предложение сохранить или сохранить как)

а по ссылке сразу формируется файл и сохраняется(в експлоере выходит предложение сохранить или сохранить как)
Vofka
Цитата(svv1979 @ 16.07.20, 6:29) необходимо зарегистрироваться для просмотра ссылки
если вручную делать

"Вручную" это не переход по этой ссылке, по которой вы программно пытаетесь скачать файл?
svv1979
Vofka @ Сегодня, 11:01 необходимо зарегистрироваться для просмотра ссылки ,

Открыл в браузере страницу формирования отчета

URL-адрес запроса: необходимо зарегистрироваться для просмотра ссылки
Метод запроса: GET
Код состояния: 200 / OK

- Заголовки запроса

Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU
Connection: Keep-Alive
Host: sait2
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; InfoPath.3)

- Заголовки ответа

Connection: Keep-Alive
Content-Type: text/html; charset=WINDOWS-1251
Date: Thu, 16 Jul 2020 09:35:20 GMT
Keep-Alive: timeout=150, max=99
Server: Oracle HTTP Server Powered by Apache/1.3.12 (Win32) ApacheJServ/1.1 mod_ssl/2.6.4 OpenSSL/0.9.5a
Transfer-Encoding: chunked
X-DB-Content-length: 9975

Поставил нужный формат файла XLS и Нажал ПУСК

URL-адрес запроса: необходимо зарегистрироваться для просмотра ссылки

Метод запроса: POST

- Заголовки запроса

Accept: image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU
Cache-Control: no-cache
Connection: Keep-Alive
Content-Length: 110
Content-Type: application/x-www-form-urlencoded
Host: sait2
Referer: необходимо зарегистрироваться для просмотра ссылки
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; InfoPath.3)

Сформировался файл нажал сохранить

- Заголовки ответа

Connection: Keep-Alive
Content-Disposition: attachment; filename="%D0%A1%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BE%20%D0%BF%D1%80%D0%BE%D0%B6%D0%B8%D0%B2% D0%B0%D1%8E%D1%89%D0%B8%D1%85%20%D0%B2%20%D0%B6%D0%B8%D0%BB%D0%BE%D0%BC%20%D1%84%D0%BE%D0%BD%D0%B4%D0%B5.xls"
Content-Type: application/vnd.ms-excel
Date: Thu, 16 Jul 2020 09:38:37 GMT
Keep-Alive: timeout=150, max=100
Server: Oracle HTTP Server Powered by Apache/1.3.12 (Win32) ApacheJServ/1.1 mod_ssl/2.6.4 OpenSSL/0.9.5a
Transfer-Encoding: chunked
X-DB-Content-length: 91614751
Vofka
Вместо
НТТР.Получить(Адрес, ИмяВходящегоФайла);

попробуйте
НТТР.ОтправитьДляОбработки(Адрес, ИмяВходящегоФайла);
svv1979
Vofka @ Вчера, 17:13 необходимо зарегистрироваться для просмотра ссылки ,

Делал

2 способ не помог

ИмяВходящегоФайла1 = "\\192.168.113.7\работа\555.xls";
    Ссылка = "http://sait2/pls/info/REESTR_PERSONS_TO_1C.run?rep_user=IVANOV&p_com=30274&p_reestr_format=xls&p_action=Пуск";
    
    WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1"); //WinHttpRequest
    
    WinHttp.Open("GET", Ссылка, Ложь);  //POST Тоже пробовал
    WinHttp.Send();

    Если WinHttp.Status = 200 Тогда
        Stream = Новый COMОбъект("ADODB.Stream");

        Stream.Type = 1;
        Stream.Mode = 3;

        Stream.Open();
        Stream.Write(WinHttp.ResponseBody);
        Stream.SaveToFile(ИмяВходящегоФайла1, 2);
        Stream.Close();
        Stream = Неопределено;
        Сообщить("1");
    Иначе
        //Сообщить("HTTP " + WinHttp.Status + " " + WinHttp.StatusText);
        //Возврат;
    КонецЕсли;
svv1979
Как его можно реализовать в 1С

Пример на C#:

 private void button1_Click(object sender, EventArgs e)
        {
            WebClient webClient = new WebClient();
            string link = @"http://dezvgr2/pls/info/REESTR_SOB_TO_1C.run?rep_user=TVERETINA&p_com=30274&p_reestr_format=xls&p_action=Start";
            string downloadFileName = System.IO.Path.GetFileName("test.xls");
            webClient.DownloadFile(new Uri(link), @"F:\tmp\test\" + downloadFileName);
        }
svv1979

Проблема в сервисе была переделали p_action=­­Start ("Пуск" Русские буквы некорректно передавались ) и убрали зависимость от регистра
из 1С все отработало хорошо

ИмяВходящегоФайла = Объект.ПутьКФайлу;

HTTP = Новый HTTPСоединение(Объект.Сервер);
HTTPЗапрос = Новый HTTPЗапрос(Объект.АдресЗапроса);
HTTP.ОтправитьДляОбработки(HTTPЗапрос,ИмяВходящегоФайла); //POST запрос

//HTTP.Получить(HTTPЗапрос,ИмяВходящегоФайла); //GET Запрос тоже
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.