Формирование и отправка данных в SPOT 2D для 1С: 7.7

0. Khaled 1 04.09.16 05:05 Сейчас в теме
Для тех, кто еще не написал сам - не претендующая на профессионализм обработка, но вполне рабочая. Будет неплохим примером с некоторыми подсказками...

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 05.10.16 20:17
Сообщение было скрыто модератором.
...
5. rougudz 26.10.16 18:00 Сейчас в теме
если кому интересно то передача post запроса реализовал так.
// XMLstr текст csv файла отправки.
Функция ОтправкаPOSTзапросом(XMLstr="",ИмяФайла)
	
	MSXMLver = "6";
	Попытка
		Http = CreateObject("MSXML2.ServerXMLHTTP."+MSXMLver+".0");
	Исключение 
		Попытка
			MSXMLver = "4";
			Http = CreateObject("MSXML2.ServerXMLHTTP."+MSXMLver+".0"); 
		Исключение 
			Сообщить(ОписаниеОшибки(),"!");
			Сообщить("Для работы модуля обмена необходима библиотека MSXML не ниже 4.0","!");
			Возврат "Для работы модуля обмена необходима библиотека MSXML не ниже 4.0";
		КонецПопытки;
	КонецПопытки;
	
	
	login = "**";
	passw = "**";
	DistrID = "**";
	
	Если ПустаяСтрока(XMLstr) = 0 Тогда
		Boundary = СтрЗаменить(ТекущееВремя(),":","");
		//формируем тело запроса
		
		Body = +"--"+Boundary+РазделительСтрок
		+"Content-Disposition: form-data; name=""ufile""; filename="""+СтрЗаменить(ИмяФайла,".csv","")+""""+РазделительСтрок
		+"Content-Type: text/plain"+РазделительСтрок+РазделительСтрок
		+XMLstr+РазделительСтрок+РазделительСтрок
		+"--"+Boundary+РазделительСтрок
		+"Content-Disposition: form-data; name=""__login"""+РазделительСтрок+РазделительСтрок
		+login+РазделительСтрок
		+"--"+Boundary+РазделительСтрок
		+"Content-Disposition: form-data; name=""__password"""+РазделительСтрок+РазделительСтрок
		+passw+РазделительСтрок
		+"--"+Boundary+РазделительСтрок
		+"Content-Disposition: form-data; name=""__did"""+РазделительСтрок+РазделительСтрок
		+DistrID+РазделительСтрок
		+"--"+Boundary;
		
	КонецЕсли;
	
	ServiceRequest = "http://aqualife.spot2d.com/dinfo/auto-upload.phtml";
	ServiceIP = "aqualife.spot2d.com";
	
	Http.Open ("POST", ServiceRequest, -1); //асинхронный запрос
	Http.SetRequestHeader("Content-Type","multipart/form-data; boundary="+Boundary);
	
	//ЗначениеВФайл(КаталогИБ()+ИмяФайла,Body,0);
	
	Http.Send(Body);
	
	Состояние("Ожидание ответа на запрос...");
	ВремяОжидания = 0;
	Пока Http.ReadyState <> 4 Цикл
		Попытка
			Если Http.waitForResponse(1) = 0 Тогда //превышено время ожидания ответа =1s
				Если ВремяОжидания >= 60 Тогда //60s
					Состояние("");
					Сообщить("Превышен интервал ожидания запроса сервера "+ServiceIP,"!");
					Возврат 0; 
				КонецЕсли;
				ВремяОжидания = ВремяОжидания + 1; //1s
				Состояние("Ожидание ответа на запрос... "+Строка(ВремяОжидания)+"s");
			КонецЕсли;
		Исключение 
			Сообщить(ОписаниеОшибки(),"!");
			Возврат 0;
		КонецПопытки; 
	КонецЦикла; 
	
	//Состояние("");
	
	Response = Http.ResponseXML;
	Заголовки = Http.getAllResponseHeaders();
	Сообщить("Заголовки: "+СпС(Лев(СпС(Заголовки),255)));
	
	ОтветСервера = Http.responseText; 
	Сообщить("Response: "+СпС(Лев(СпС(Response),255)));
	Сообщить("ОтветСервера: "+СпС(Лев(СпС(ОтветСервера),255)));
	текст = СоздатьОбъект("Текст");
	текст.ДобавитьСтроку(ОтветСервера);
	текст.Записать(КаталогВременныхФайлов()+"AquaОтвет.xml");
	
	Если Http.Status = 200 Тогда
		Сообщить("HTTP status: "+Http.Status+" "+Http.StatusText+", время ожидания "+?(ВремяОжидания=0,"<1",Строка(ВремяОжидания))+"s");
		Возврат "HTTP status: "+Http.Status+" "+Http.StatusText+", "+ОтветСервера+", время ожидания "+?(ВремяОжидания=0,"<1",Строка(ВремяОжидания))+"s";
	Иначе
		Сообщить("HTTP status: "+Http.Status+" "+Http.StatusText+", ошибка!","!");
		Возврат "HTTP status: "+Http.Status+", "+Http.StatusText+", "+ОтветСервера+", ошибка!";
	КонецЕсли;
	
	
КонецФункции // SendHTTPRequest
Показать
bds22; EvgeTrofi; +2 Ответить
6. Khaled 1 27.10.16 10:24 Сейчас в теме
(5) rougudz, Весьма иньтересно, брольшое спасибо, НО: имеются непонятные моменты.

1 - Первое, что бросается в глаза - строка, проверяющая не превышен ли интервал времени ответа:

Если Http.waitForResponse(1) = 0 Тогда //превышено время ожидания ответа =1s

На языке 1С, строка в таком виде вызовет кучу ошибок.

2 - Функция СпС - что именно делает ??
7. rougudz 27.10.16 11:08 Сейчас в теме
(6) сорри по спс это я для своего удобства делаю всегда
кнвертит все что угодно в строку и обрезает пробелы, лень писать СокрЛП(строка(чтото))
пишу спс(чтото)

Функция СпС(что) Экспорт
    Возврат СокрЛП(Строка(что))
КонецФункции //СпС()


по поводу Если Http.waitForResponse(1) = 0 Тогда
все нормально работает.
Http это не объект 1с, а MSXML2.ServerXMLHTTP.х.0
8. Khaled 1 27.10.16 16:49 Сейчас в теме
(7) rougudz, Я хотел сказать, что строка:
Если Http.waitForResponse(1) = 0 Тогда //превышено время ожидания ответа =1s

в таком виде, как тут изображена не выполнится в среде 1с.
9. rougudz 27.10.16 17:11 Сейчас в теме
(8)чегойто не то с копипастом видимо
косяки со вставкой кода...
10. bds22 20 09.01.22 18:43 Сейчас в теме
(5)спасибо, Ваш пример помог понять, как отправить от 8ки. тоже раньше через curl отправлял, решил переделать
2. rougudz 13.10.16 16:36 Сейчас в теме
Передача в SPOT2D идет через post запросы. сдесь сие реализовано? я никак не могу дать с ними толку. ответ от сервера приходит что мол: 200 т.е. все ОК. а они утверждают что ничего к ним не приходило.... не сталкивались?
3. Khaled 1 14.10.16 16:36 Сейчас в теме
Нет, я передачу реализовал с помощью внешнего bat-файла, который запускается обработкой по окончания формирования файлов выгрузок:
В процедуре Сформировать: (И еще один момент: Возможно параметр __did оставлен без внимание, аон должен содержать "код дистрибьютора в SPOT 2D")
=== Начало ===
// Процедуры формирования файлов выгрузок
.
.
.
Если ФлагОтладки = 0 Тогда	
      КомандаСистемы("SendAllWithSSL.bat"); // Команда запуска передачи файлов
КонецЕсли;
=== Конец ===

Содержание файла SendAllWithSSL.bat // изменено слегка
=== Начало ===
@Echo off
FOR %%I IN (Send\*.*) DO call SendFileWithSSL.bat %%~dI %%~pI %%~nI protocol.log
=== Конец ===

Содержание файла SendFileWithSSL.bat // изменено слегка
=== Начало ===
@Echo off
set Path2cvs=%1%2
set FileType=%3
set LogFile=%4
echo Date %date%  Time %time% >> protocol.log
echo. Send %Path2cvs%%FileType%.cvs ...  >> %LogFile%
curlssl.exe -v -F "ufile=@%Path2cvs%%FileType%.csv;type=text/plain;filename=%FileType%" -F "__login=ْْْْXXXXXXXX" -F "__password=XXXXXXXX" -F "__did=XXXXXXXX" http://XXXXXXXX.spot2d.com/dinfo/auto-upload.phtml  >> %LogFile%
=== Конец ===
Показать

Все сделано по их инструкции. запустилось с пол-пинка, и сейчас работает в автоматическом режиме.
4. rougudz 15.10.16 11:01 Сейчас в теме
(3) спасибо. но интересует имеено POST запрос. нелюблю бантики.
Оставьте свое сообщение
Вакансии
Программист/тестировщик
Москва
зарплата от 130 000 руб. до 150 000 руб.
Полный день

Ведущий разработчик 1С / Team lead отдела разработки 1С
Москва
зарплата от 300 000 руб. до 300 000 руб.
Полный день

Программист 1С
Москва
зарплата от 150 000 руб. до 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 150 000 руб. до 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 130 000 руб. до 150 000 руб.
Полный день