Имя: Пароль:
1C
1C 7.7
v7: Закрывается 1С при отправке POST запроса
,
0 Ivan Bezdomnyi
 
27.02.20
08:33
Доброго времени суток.

Отправляю данные по товарам на сайт из 1С 7.7 методом POST. При этом если отправляю по 1000 товаров - все отправляется корректно. Но если пробую отправить все вместе 4000 товаров, то на моменте отправки 1С просто закрывается. В чем причина?

Текст такой:
WinHttp = СоздатьОбъект("Microsoft.XMLHTTP");
WinHttp.Open("POST","http://testtesttest.com/api/update_products",0);
WinHttp.SetRequestHeader("Accept-Language", "ru");
WinHttp.SetRequestHeader("Accept-Charset","utf-8");
WinHttp.SetRequestHeader("Content-Language", "ru");
WinHttp.SetRequestHeader("Content-Charset", "utf-8");
WinHttp.SetRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");
ПараметрыПОСТ = "data="+СтрОтправки;
WinHttp.Send(ПараметрыПОСТ);

C WinHttp.WinHttpRequest.5.1 то же самое.
1 ДенисЧ
 
27.02.20
08:45
Память, разумеется.
2 Ivan Bezdomnyi
 
27.02.20
09:16
(1) какая именно?
3 Arbuz
 
27.02.20
12:33
в клюшках есть проблема с объёмом данный передаваемых в вк. при превышении некоего порога всё валится.
либо частями передавать, либо внешний скрипт который соберёт, модно - веб-сервис, который тоже соберёт по кусочкам и обработает, либо OLEExSup (OLEExSup :: ВызватьОЛЕМетод / InvokeOLEMethod) спасёт тебя.
4 big
 
27.02.20
13:37
Пользуйте cUrl. Один раз сделал и забыл ))
5 mishaPH
 
модератор
27.02.20
13:38
(0) длинна строки запроса ограничена. отправляй несколько этапов
6 victuan1
 
27.02.20
14:02
Отправляю из 1С 7.7 через msxml2.serverxmlhttp.6.0
Нет ограничений на размер файла у него в отличие хттп
У Курл тоже нет ограничений, им тоже норм.
7 Arbuz
 
27.02.20
14:27
(4) у меня прям мечта - обернуть libcurl в com, но всё времени нет, а готового рабочего не нашёл
8 Djelf
 
27.02.20
15:19
(7) Зачем в com? Можно и в ВК обернуть. Вот собранная curl1c.dll с примером http://catalog.mista.ru/public/1045311/
9 Arbuz
 
27.02.20
15:51
(8) О! А как бы вк заиметь без см?
10 trad
 
27.02.20
15:59
(7) если в ком завернешь, то получишь те же грабли с передачей в ком длинных строк.
Потому как в (0) это не проблема Microsoft.XMLHTTP, это проблема реализации взаимодействия 77 с ком.
А вот технология ВК, емнип, лишена этих недостатков
11 Djelf
 
27.02.20
16:02
12 mishaPH
 
модератор
27.02.20
16:06
(6) у 1с 77 есть граничение на размер строки текста.. даже скл запросы прямые к другим системам валятся когда более опр колва символов
13 trad
 
27.02.20
16:11
полуофф
Часто, при использовании Microsoft.XMLHTTP и т.п., и необходимости отправить/получить xml, забывают(не знают), что эти объекты умеют работать сразу с DOM и, почему-то, пытаются передать строку.
Хотя можно создать ДомДокумент, заполнить его и передать
WinHttp.Send(ДомДокумент);
14 trad
 
27.02.20
16:13
(12) "у 1с 77 есть граничение на размер строки текста"
слишком широкое утверждение
15 victuan1
 
27.02.20
19:47
(12) см. (13)
16 Garykom
 
гуру
27.02.20
20:08
(13) Подскажи заодно нечто умеющее работать с JSON что можно аналогично подсунуть в WinHttp.Send(JSONДокумент);
Ну или как через WinHttp отправлять файлы с диска.
17 trad
 
27.02.20
23:46
(16) через winhttp json - только строкой. Других способов не знаю.
А файл с диска, примерно так:

Файл = "d:\1.zip";
Stream = СоздатьОбъект("ADODB.Stream");
Stream.open();
Stream.loadFromFile(Файл);

Http = СоздатьОбъект("Msxml2.XMLHTTP");
Http.open("POST", Адрес, 0);
Http.setRequestHeader("Content-Type", "application/zip");
Http.setRequestHeader("Content-Disposition", "attachment; filename=""1.zip""");
Http.send(Stream);
18 Garykom
 
гуру
28.02.20
00:00
(17) Угу или строку передать можно или поток.
А вот просто указать путь на диске к файлу содержимое которого надо отправить нет такого COMОбъект.

И не знаю COMОбъект который умел бы с JSON работать, за исключением через скрипты JScript или VBScript
19 Garykom
 
гуру
28.02.20
00:01
(18)+ Короче странно это что никто не озадачился.
Вероятно COM потому что устаревшая технология и нефик вам новых плюшек.
20 big
 
28.02.20
07:26
(7) Ну, я от незнания просто файлы гоняю ))
(11) Спасибо большое! )
21 trad
 
28.02.20
09:26
(19) "Вероятно COM потому что устаревшая"
именно
22 Garykom
 
гуру
28.02.20
09:30
(21) Проблема что 77 еще встречается и данные из нее надо как то выцеплять для переноса в новую конфу.
Привык уже через JSON переносы делать, это оказывается очень удобно и через HTTP сервисы.
23 Garykom
 
гуру
28.02.20
09:31
(22)+ У меня код на 1С 7.7 для работы с JSON наваян через СоздатьОбъект("Текст") но это не сильно шустро.
24 victuan1
 
28.02.20
13:57
Вот мне тоже эта тема интересна.
25 Salimbek
 
28.02.20
14:02
(23) Переделай на работу с BinaryData - он гораздо шустрее. Были сравнительные тесты...
26 Garykom
 
гуру
28.02.20
16:03
(25) "ADODB.Stream" достаточно шустро работает и умеет писать файлы.
Не вижу смысла тащит ВК когда "ADODB.Stream" с высокой вероятностью уже там есть на компе.
27 Salimbek
 
28.02.20
21:19
(26) Ну если 1С++ еще не используется, то можно и через АДО
28 user100000
 
08.03.20
01:26
Функция _Отправить(Адр,Логин,Пароль,з) Экспорт
    д=СоздатьОбъект("Msxml2.DOMDocument.6.0");
    Попытка
        //WinHttp=СоздатьОбъект("MSXML2.XMLHTTP");
        WinHttp=СоздатьОбъект("msxml2.serverxmlhttp.6.0");
        WinHttp.Open("POST",Адр,0,Логин,Пароль);
        WinHttp.SetRequestHeader("Content-Type", "text/xml;charset=utf-8");
        WinHttp.Send(з);
        Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
        Скрипт.language="vbscript";
        ТекстСкрипта="
        |function LoadXML()
        |    objXML.loadXML WinHttp.ResponseText
        |end function";
        Скрипт.addObject("WinHttp",WinHttp);
        Скрипт.addObject("objXML",д);
        Скрипт.addCode(текстскрипта);
        Скрипт.run("LoadXML");
        WinHttp="";Скрипт="";    
    Исключение      
        //глЛогРег(ОписаниеОшибки());
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    Возврат д;
КонецФункции