Имя: Пароль:
1C
1С v8
HTTPСоединение 8.1 и 8.2
0 Lepochkin
 
15.08.12
13:56
Имеется следующий код код
   HTTPСервис = Новый HTTPСоединение("geocode-maps.yandex.ru",,,,ПроксиСервер,Ложь);
   
   Попытка
       HTTPСервис.Получить("1.x/?geocode=" + EncodeURL(Адрес), АдресOutput);
   Исключение
       Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
       Возврат Ложь;
   КонецПопытки;

Он по сути генерит xml файл
В 8.2 это выглядит так
 <?xml version="1.0" encoding="utf-8" ?>
- <ymaps xmlns="http://maps.yandex.ru/ymaps/1.x" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maps.yandex.ru/business/1.x http://maps.yandex.ru/schemas/business/1.x/business.xsd http://maps.yandex.ru/geocoder/1.x http://maps.yandex.ru/schemas/geocoder/1.x/geocoder.xsd http://maps.yandex.ru/psearch/1.x http://maps.yandex.ru/schemas/psearch/1.x/psearch.xsd http://maps.yandex.ru/search/1.x http://maps.yandex.ru/schemas/search/1.x/search.xsd http://maps.yandex.ru/web/1.x http://maps.yandex.ru/schemas/web/1.x/web.xsd">;
- <GeoObjectCollection>
- <metaDataProperty xmlns="http://www.opengis.net/gml">
- <GeocoderResponseMetaData xmlns="http://maps.yandex.ru/geocoder/1.x">
 <request>157980, Костромская обл., п. Кадый, ул. Центральная, дом № 13</request>
 <found>1</found>
 <results>10</results>
 </GeocoderResponseMetaData>
.....
а в 8.1
 <?xml version="1.0" encoding="utf-8" ?>
- <ymaps xmlns="http://maps.yandex.ru/ymaps/1.x" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maps.yandex.ru/business/1.x http://maps.yandex.ru/schemas/business/1.x/business.xsd http://maps.yandex.ru/geocoder/1.x http://maps.yandex.ru/schemas/geocoder/1.x/geocoder.xsd http://maps.yandex.ru/psearch/1.x http://maps.yandex.ru/schemas/psearch/1.x/psearch.xsd http://maps.yandex.ru/search/1.x http://maps.yandex.ru/schemas/search/1.x/search.xsd http://maps.yandex.ru/web/1.x http://maps.yandex.ru/schemas/web/1.x/web.xsd">;
- <GeoObjectCollection>
- <metaDataProperty xmlns="http://www.opengis.net/gml">
- <GeocoderResponseMetaData xmlns="http://maps.yandex.ru/geocoder/1.x">
 <request>152850, Ярославская РѕР±Р»., Рі. Пошехонье, СѓР». Преображенского, РґРѕРј № 2</request>
 <found>0</found>
 <results>10</results>
 </GeocoderResponseMetaData>

Ясно что проблема в кракозябрах, но откуда она берется я что-то не сильно понимаю...
1 Lepochkin
 
15.08.12
13:58
Для полноты картины забыл указать еще текст 2х процедур
Функция hex(Знач Значение)
   Значение=Число(Значение);
   Если Значение<=0 Тогда
       Результат="0";
   Иначе
       Значение=Цел(Значение);
       Результат="";
       Пока Значение>0 Цикл
           Результат=Сред("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",Значение%16 + 1,1)+Результат;
           Значение=Цел(Значение/16) ;
       КонецЦикла;
   КонецЕсли;
   Если СтрДлина(Результат) < 2 Тогда
       
       Результат = "0" + Результат;
       
   КонецЕсли;
   Возврат "%" + Результат;
КонецФункции

Функция EncodeURL(URL)
   // отсюда: http://www.w3.org/International/URLUTF8Encoder.java
   Рез1 = "";
   Для Сч = 1 По СтрДлина(URL) Цикл
       ch = Сред(URL,Сч,1);
       vch = КодСимвола(ch);
       
       Если ("A" <= ch ) И ( ch <= "Z") Тогда        // "A".."Z"
           Рез1 = Рез1 + ch;
       ИначеЕсли ("a" <= ch ) И ( ch <= "z") Тогда    // "a".."z"
           Рез1 = Рез1 + ch;
       ИначеЕсли ("0" <= ch ) И ( ch <= "9") Тогда    // "0".."9"
           Рез1 = Рез1 + ch;
       ИначеЕсли (ch = " ") ИЛИ ( ch = "+") Тогда            // space
           Рез1 = Рез1 + "+";
       ИначеЕсли (ch = "-" ) ИЛИ ( ch = "_") Тогда        // unreserved
           // ch == '.' || ch == '!'
           // ch == '~' || ch == '*'
           // ch == '\'' || ch == '('
           // ch == ')') Тогда
           Рез1 = Рез1 + ch;
       ИначеЕсли (vch <= 127) Тогда        // other ASCII
           Рез1 = Рез1 + hex(vch);
       ИначеЕсли (vch <= 2047) Тогда        // non-ASCII <= 0x7FF
           Рез1 = Рез1 + hex(192 + Цел(vch / 64));
           Рез1 = Рез1 + hex(128 + (vch % 64));
       Иначе                    // 0x7FF < ch <= 0xFFFF
           Рез1 = Рез1 + hex(224 + Цел(vch / 4096));
           Рез1 = Рез1 + hex(128 + (Цел(vch / 64) % 64));
           Рез1 = Рез1 + hex(128 + (vch % 64));
       КонецЕсли;
       
   КонецЦикла;
   
   Возврат Рез1;
КонецФункции // ()
2 pumbaEO
 
15.08.12
13:59
(1) эти процедуры без разницы.
3 Lepochkin
 
15.08.12
14:05
Дак в чем проблема????
4 pumbaEO
 
15.08.12
14:10
не знаю, я на 8.2 . Смотри в header что передает 1С.
5 Lepochkin
 
15.08.12
14:41
все 1 в 1 в 8.2 и в 8.1... Что за ерунда блин
6 Lepochkin
 
15.08.12
14:51
Вбил адрес на английском языке и все стал нормально отрабатывать. Какая-то ерунда с кодировкой выходит... Есть у кого какие-нибудь мысли?
7 Lepochkin
 
20.08.12
10:27
С проблемой так и не разобрался. Завел пустую конфу 8.2 Там в модуле внешнего соединения кинул нужные функции. Считаю в 8.2 возвращаю структуру в 8.1. Все таким образом работает. Не самое красивое решение, но может кому-нибудь тоже подойдет.