Имя: Пароль:
1C
1С v8
v8: Yandex карты в 1С?
,
0 Santa4527
 
31.08.11
11:00
Есть такая замечательная возможно показывать адрес на яндексе.
Отмечается точка на карте и при клике на точку выводиться адрес. Можно показывать не адрес а, например что бы показывал наименование контрагента? Если да то как?



Процедура КнопкаВыполнитьНажатие(Кнопка)

     КодХТМЛ = "
   |<!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>Примеры. Геокодирование.</title>
   |    <meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" />
   |    <script src=""http://api-maps.yandex.ru/1.1/index.xml?key=AGWk-0sBAAAAu2BPFgIAxJX5bVBDeI0Rx-X2RVaxVaSFdssAAAAAAAAAAADMbczTgn2tTY5RyeeXQ8O7a3fzyA=="" type=""text/javascript""></script>
   |    <script type=""text/javascript"">
   |        var map, geoResult;
   // Создание обработчика для события window.onLoad
   |        YMaps.jQuery(function () {
   // Создание экземпляра карты и его привязка к созданному контейнеру
   |            map = new YMaps.Map(YMaps.jQuery(""#YMapsID"")[0]);
   // Установка для карты ее центра и масштаба
   |            map.setCenter(new YMaps.GeoPoint(30.357528,59.993461), 16);
   |            var toolBar = new YMaps.ToolBar();                            
   |          map.addControl(toolBar);
   |           map.addControl(new YMaps.Zoom());
   |          map.addControl(new YMaps.TypeControl());
   |          map.enableScrollZoom();
   |        });
   // Функция для отображения результата геокодирования
   // Параметр value - адрес объекта для поиска
   |       function showAddress (value) {
   // Запуск процесса геокодирования
   |           var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});
   // Создание обработчика для успешного завершения геокодирования
   |           YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
   // Если объект был найден, то добавляем его на карту
   // и центрируем карту по области обзора найденного объекта
   |               if (this.length()) {
   |                   geoResult = this.get(0);
   |                  map.addOverlay(geoResult);
   |                 map.setBounds(geoResult.getBounds());
   |}else {
   |                 alert(""Ничего не найдено"")
   |            }
   |        });
   // Процесс геокодирования завершен неудачно
   |       YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error) {
   |          alert(""Произошла ошибка: "" + error);
   |     })
   |}
   //Тут функция, которая формируется динамически
   |//~~Функция showA~~
   |</script>
   |</head>
   |<body //~~onload~~>
   |  <div id=""YMapsID"" style=""width:1000px;height:600px""></div>
   |</form>
   |</body>
   |    
   |</html>
   |";
   
 ЭлементыФормы.ПолеHTMLДокумента.УстановитьТекст(КодХТМЛ);
 ПоказатьАдреса();
КонецПроцедуры




Процедура ПоказатьАдреса ()
   МассивАдресов = Новый Массив;
   Для Каждого стр из АдресНаКарте Цикл
       МассивАдресов.Добавить(стр.Значение);
   КонецЦикла;    
   
   
   //МассивАдресов = Адреса.ВыгрузитьКолонку("Адрес");
   
   НачФункции = "function showA () {";
   
   ТелоФункции = "";
   
   Для каждого Элемент Из МассивАдресов Цикл
       ТелоФункции = ТелоФункции + Символы.ПС + "showAddress('"+Элемент+"')";    
   КонецЦикла;
   
   КонФункции = Символы.ПС + "}";
   
   ФункцияShowA = НачФункции + ТелоФункции + КонФункции;
   
   КодХТМЛ = СтрЗаменить(КодХТМЛ,"//~~Функция showA~~",ФункцияShowA);
   КодХТМЛ = СтрЗаменить(КодХТМЛ,"//~~onload~~","onload = ""javascript:showA()""");
   
   ЭлементыФормы.ПолеHTMLДокумента.УстановитьТекст(КодХТМЛ);

   
КонецПроцедуры;
1 Santa4527
 
31.08.11
11:01
v8: Yandex карты в 1С?
2 Reaper_1c
 
31.08.11
11:06
Ох как мне доставил заголовок! Продай название яндексу!
3 IamAlexy
 
31.08.11
11:06
на инфасрате этих примеров работающих - хоть попой еш
4 alex-pro
 
31.08.11
11:08
Яндекс покарал 1С? )))
5 also
 
31.08.11
11:08
хы... Все моим кривым кодом через пользуются :)
6 Santa4527
 
31.08.11
11:10
(3) Там везде отображается Адрес, а нужно наименование контрагента.
7 also
 
31.08.11
11:11
(6) сделаю... но за большие деньги
8 Santa4527
 
31.08.11
11:11
(5) Спасибо за код!
Может, подскажешь с проблемой?
9 Murzz
 
31.08.11
11:12
Тоже недавно работал с картами гугл и яндекс. Только основную часть кода писал на яваскрипте, и вызывал яваскриптовые процедуры из 1С.
Ты хочешь кликать на произвольную точку на карте? Как у тебя задается сответствие контрагентов и точек на карте?
10 acsent
 
31.08.11
11:12
11 Santa4527
 
31.08.11
11:22
(9) Точки все есть. Нужно что бы вместо адреса было наименование контрагента.

Для каждого Элемент Из МассивАдресов Цикл
       ТелоФункции = ТелоФункции + Символы.ПС + "showAddress('"+Элемент+"')";    
   КонецЦикла;

Добавления адресов в процедуру.
12 also
 
31.08.11
11:25
(11) контрагента ты откуда брать собрался?
13 Santa4527
 
31.08.11
11:28
(12)  
в АдресНаКарте есть ссылка на контрагента.

Для Каждого стр из АдресНаКарте Цикл
       МассивАдресов.Добавить(стр.Значение);
   КонецЦикла;
14 also
 
31.08.11
11:31
(13) эт надо яваскрипт знать... Я не знаю
15 Santa4527
 
31.08.11
11:44
!!!
16 Murzz
 
31.08.11
11:49
в функцию, которая показывает адрес на карте, передавай параметром наименование контрагента, и если адрес найден, открывай на карте на найденном адресе балун с именем контрагента. (см. map.openBalloon() )
17 ВикторП
 
31.08.11
11:55
хорошо бы не наименование выводить, а гиперссылку - на ней нажал- в поле, где карта и вывел форму элемента контрагент
18 Murzz
 
31.08.11
12:01
как-то так это будет
для примера вызови showAddress("Иркутск", "имя контрагента")

      function showAddress (value, desc) {
   // Запуск процесса геокодирования

              var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});
   // Создание обработчика для успешного завершения геокодирования

              YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
   // Если объект был найден, то добавляем его на карту

   // и центрируем карту по области обзора найденного объекта

                  if (this.length()) {
                      geoResult = this.get(0);
                    // map.addOverlay(geoResult);
                     
                     map.openBalloon(this.get(0).getGeoPoint(), desc, {mapAutoPan:false});
                     
                    map.setBounds(geoResult.getBounds());
   }else {
                    alert("Ничего не найдено")
               }
           });
   // Процесс геокодирования завершен неудачно

          YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error) {
             alert("Произошла ошибка: " + error);
        })
   }



(17) Это сложнее, но тоже можно
19 Murzz
 
31.08.11
12:03
(18) если будешь это в 1С втыкать, кавычки двойные не забудь поставить
20 Santa4527
 
31.08.11
12:22
(18) СПАСИБО! Сейчас посмотрю!
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn