Имя: Пароль:
1C
1С v8
Как получить координаты Yandex в 1С?
,
0 ETurdymuratov
 
18.07.13
07:58
Привет всем!
Подскажите пожалуйста, как мне получить координаты в управляемую форму на событие щелчка мышки на карте?
Есть макет со следюущим содержимым:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
   <title>Примеры. Знакомство с JavaScript API. Простой вызов карты.</title>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <script src="http://api-maps.yandex.ru/1.1/index.xml?key=AJ_G30sBAAAAPGjNUwIAd33aJVgstDjaSjmlPoejDe-QLSYAAAAAAAAAAADLNUtNAWc3HuTC21N5xxG5a7OODA=="
   type="text/javascript"></script>
   <script type="text/javascript">
       var map;
       var router;
       var placemark;
       
       window.onload = function () {
           map = new YMaps.Map(document.getElementById("YMapsID"));
           map.setCenter(new YMaps.GeoPoint(76.5400, 43.1500), 7);
           
           map.addControl(new YMaps.TypeControl());
           map.addControl(new YMaps.ToolBar());
           map.addControl(new YMaps.Zoom());
           map.addControl(new YMaps.ScaleLine());
           map.enableScrollZoom();
       }

   function AddPlacemark(Name, Descr, Cont, Att, Latt, Params)    {
       
       // Создает метку в центре Москвы
       placemark = new YMaps.Placemark(new YMaps.GeoPoint(Latt, Att), Params);

       // Устанавливает содержимое балуна
       placemark.name = Name;
       placemark.description = Descr;

       if (Cont != "") {
       placemark.setIconContent(Cont);
       }

       // Добавляет метку на карту
       map.addOverlay(placemark);
       
       return placemark;
       }
       
   function ShowMessage(str)    {
       
       var message = "JS получил: "+str;
       //alert(message);        
       return message;
       }
           
   function AddPlacemarkByAddress(Name, Descr, Cont, Address, Params)    {
   
       geocoder = new YMaps.Geocoder(Address, {results: 1});    
       
       YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
       
           // Создает метку в центре Москвы
           placemark = new YMaps.Placemark(this.get(0).getGeoPoint(), Params);

           // Устанавливает содержимое балуна
           placemark.name = Name;
           placemark.description = Descr;

           if (Cont != "") {
           placemark.setIconContent(Cont);
           }

           map.addOverlay(placemark);
           });
       }
   function AddGroup(Name, Descr, Cont, Latt, Att, Params)    {
       
       }
       
   function AddRoute(wayPoint1, wayPoint2)    {
       
       router = new YMaps.Router([wayPoint1, wayPoint2],
                              [1]);
                             
       map.addOverlay(router);
       
       return router;                      
       }
   </script>
</head>
<body>
   <div id="YMapsID" style="width:100%;height:100%"></div>
</body>
</html>

В управляемой форме есть процедура которая вызывает функцию макета AddPlacemark() и передает туда параметры с координатами и описанием меток:

               ИмяМетки        = "Моя метка";
               ОписаниеМетки    = "Описание моей метки";
               ПодсказкаМетки  = "Подсказка к моей метке";
               Широта            = 43.15;
               Долгота        = 76.54;
               Элементы.ТекстHTML.Документ.parentWindow.eval(
               "AddPlacemark(""" + ИмяМетки + """, """ + ОписаниеМетки + """, """ + ПодсказкаМетки + """, " + Формат(Широта, "ЧРД=.; ЧГ=0") + ", " + Формат(Долгота, "ЧРД=.; ЧГ=0") + "," + ПараметрыМетки + ")");
1 ETurdymuratov
 
18.07.13
08:06
Помогите написать функцию в макете с помощью которого можно было бы получить координаты типа GetPlacemark()?
2 ETurdymuratov
 
18.07.13
08:08
совсем забыл написать, у меня 1с 8.2, Управляемые формы.
3 shuhard
 
18.07.13
08:12
(1)[написать функцию в макете ]
1C 8.4 ?
4 ETurdymuratov
 
18.07.13
08:23
1С 8.2)))
5 shuhard
 
18.07.13
08:24
(4) в макете нет функций
6 ETurdymuratov
 
18.07.13
08:26
А как же например
   function ShowMessage(str)    {
       
       var message = "JS получил: "+str;
       //alert(message);        

       return message;
       }
Я эту функцию вызываю из управляемой формы.
Или я чего то не допонял?
7 ETurdymuratov
 
18.07.13
08:39
хочу получить что то вроде этого: http://infostart.ru/public/156151/
но это все платно :-(
8 YAGolova
 
18.07.13
08:57
Вот моя функция. Но все точки карты предварительно я помещаю в массив PlacemarkByID
 
function GetGeoCoordNew(ID){        
       try {
       Coord = PlacemarkByID[ID].getCoordPoint();
           return {Lat: Coord.getY(), Lng: Coord.getX()};
       } catch(exep) {
           return {Lat: 0, Lng: 0};
       };
   }
9 ETurdymuratov
 
18.07.13
09:33
Спасибо, сейчас попробую у себя.
10 ETurdymuratov
 
18.07.13
09:46
Прошу прощение, а в ID что мне передать?
11 YAGolova
 
18.07.13
09:48
Я предварительно расставляю метки на карте - каждой мете - свой ID. Все метки помещены в массив PlacemarkByID. Если пользователю нужны координаты метки, то он уазывает ее ID.
12 ETurdymuratov
 
18.07.13
10:06
А как вы в управляемой форме перебираете элементы массива?
13 ETurdymuratov
 
18.07.13
10:48
placemark = new YMaps.Placemark(new YMaps.GeoPoint(Latt, Att), Params);

       // Устанавливает содержимое балуна
       placemark.name = Name;
       placemark.description = Descr;

       if (Cont != "") {
       placemark.setIconContent(Cont);
       }

       // Добавляет метку на карту
       map.addOverlay(placemark);

       try {
       Coord = PlacemarkByID[placemark.name].getCoordPoint();
           return {Lat: Coord.getY(), Lng: Coord.getX()};
       } catch(exep) {
           return {Lat: 0, Lng: 0};
       };
       
       }

возвращает Lat=0 и Lng=0
14 CrazyBear
 
18.07.13
10:53
Делал подобное, но базы сейчас под рукой нету, почитай про API яндекса, делалось как то очень просто...
15 ИС-2
 
naïve
18.07.13
10:58
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
   Отклонение = 0.01000;
   
   рМодуль = ЭлементыФормы.ПолеКарты.Документ.parentWindow;
   
   // подключаем опросник событий
   ПодключитьОбработчикОжидания("ОбработкаСобытийКарты",1);
КонецПроцедуры

// Кнопка. Нажали. Включился режим определения координаты
Процедура ОбработатьРежимУказанияАдреса()
   рКарта=ПолучитьГлобальнуюПеременнуюПоИмени("OurYandexMap");
   
   Если ЭлементыФормы.ДействияФормы.Кнопки.КнопкаУказатьГеографическуюКоординату.Пометка Тогда
       ЭлементыФормы.ПолеКарты.Документ.parentWindow.AddUserEventOnMap(рКарта,"click");
   иначе
       // !!!
       //ЭлементыФормы.ПолеКарты.Документ.parentWindow.RemoveUserEventOnMap(рКарта,"click");
   КонецЕсли;
КонецПроцедуры

// произошло событие и заполнилась координата
Процедура ОбработкаСобытийКарты()
   Если ЭлементыФормы.ДействияФормы.Кнопки.КнопкаУказатьГеографическуюКоординату.Пометка Тогда
   // смотрим значение системной переменной
   Попытка
       рСигнализатор=СокрЛП(Строка(ЭлементыФормы.ПолеКарты.Документ.parentWindow.LatestEvent));
       Если не ПустаяСтрока(рСигнализатор) Тогда
           // сбросим, чтобы не мешал обрабатывать дальше своими повторными вызовами
           ЭлементыФормы.ПолеКарты.Документ.parentWindow.LatestEvent="";
       Иначе
           Возврат; // сигнализатор пуст, и ладно
       КонецЕсли;
       //
       // изображаем отработку поименованных событий (опять же, по-хорошему надо добавлять свои в Events)
       Если рСигнализатор="UserPointing" Тогда
           Широта=ЭлементыФормы.ПолеКарты.Документ.parentWindow.UserPointCoordX;
           Долгота=ЭлементыФормы.ПолеКарты.Документ.parentWindow.UserPointCoordY;
           
           //ЗаписатьСвойстваКоординаты();
           //ПрочитатьСвойстваКоординаты();
           // !!!
           // толком не работает
           ЭлементыФормы.ДействияФормы.Кнопки.КнопкаУказатьГеографическуюКоординату.Пометка = Ложь;
           //ОбработатьРежимУказанияАдреса();

           //Сообщить("Получены координаты: широта "+СокрЛП(рШирота)+", долгота "+СокрЛП(рДолгота));
       КонецЕсли;
   Исключение
       Сообщить("Ошибка считывания координаты " + ОписаниеОшибки());
   КонецПопытки;
   КонецЕсли;
КонецПроцедуры

// В картах

   function AddUserEventOnMap(MapObject, EventName) {
       MapObject.events.add(EventName, GetUserPoint);            
   } // конец функции AddUserEventOnMap


   function RemoveUserEventOnMap(MapObject, EventName) {
       MapObject.events.Remove(EventName, GetUserPoint);
   } // конец функции RemoveUserEventOnMap
16 ИС-2
 
naïve
18.07.13
10:58
это компиляция разных кодов
17 ETurdymuratov
 
18.07.13
11:03
Ребята, всем большое спасибо! Разобрался. YAGolova особый респект. Я не стал его впихивать в массив:

       try {
       Coord = placemark.getCoordPoint();
           return {Lat: Coord.getY(), Lng: Coord.getX()};
       } catch(exep) {
           return {Lat: 0, Lng: 0};
       };

мне вот так в самый раз.