Имя: Пароль:
1C
1С v8
УФ: поле HTML документа с Яндекс.Картой в справочнике
,
0 IKSparrow
 
08.09.13
13:59
Возникла нужда в форме контрагента выводить (основываясь на его адресе) блок с картой с Яндекс.Карт. Нет ли у кого нибудь примерчика как реализовать или может основные шаги подскажете? Форму HTML документа я на форме контрагента разместил, а вот дальше затык.
1 MadHead
 
08.09.13
14:18
Вначале через сервис геокодера получаешь координаты
http://api.yandex.ru/maps/doc/geocoder/desc/concepts/input_params.xml

потом ставишь метку
http://api.yandex.ru/maps/doc/staticapi/1.x/dg/concepts/markers.xml
2 MadHead
 
08.09.13
14:19
а вообще на инфостарте есть куча готовых примеров работы.
3 shpioleg
 
08.09.13
16:40
Дальше создаешь макет Текстовый документ и в нем для удобства секции. В макете будет HTML и JS. При создании на сервере склеиваешь все секции из макета в HTML страницу. У Яндекса получаешь API ключ и "куришь" мануалы по API карт. Чтобы из 1С вызвать функцию JS нужно создать на ХТМЛ странице скрытую кнопку, присвоить атрибуту name вызов JS функции, которая у нас для показа адреса (тут я хз почему не value присваиваем. Эту методу я сам подглядел)  и вызывать ее метод Click. Вот так примерно,

ИмяПроцедуры = "showAddress('"+ТекДанные.Адрес+"'"+",'"+ТекДанные.СокрНаименование+"',"+ВозвратитьВидПунктаЧисло (ВыбраннаяСтрока)+")";
                Элементы.Карта.Document.getElementById("buttonJS").name = ИмяПроцедуры;
                Элементы.Карта.Document.getElementById("buttonJS").click();

На HTML странице будет
<button id=""buttonJS"" style=""display: none;"" onclick = ""JSFrom1C()"" ></button>
function JSFrom1C()      
    {
        var ButtonJS = document.getElementById("buttonJS");
        eval(ButtonJS.name);
    }
4 IKSparrow
 
08.09.13
21:39
Вот нашёл такой примерчик, только не догоняю, как в поле HTML Документа свою страницу закачать.
Код:
ЭтаФорма.Элементы.Карта.Документ.body.InnerHTML = КодХТМЛ;
Не прокатывает. Делаю на УФ.
5 IKSparrow
 
08.09.13
22:07
(4) О, разобрался. Строковому реквизиту поля присваеваем код html
6 IKSparrow
 
08.09.13
22:15
Вот только одного не пойму.
Как мне в поле HTML документа при нахождении адреса отцентрировать карту в окне так, чтобы метка адреса была видна. Она у меня внизу где-то получается.
7 IKSparrow
 
09.09.13
09:08
Энибади хом?
8 shpioleg
 
09.09.13
09:23
(7)Вот посмотри.

    //Функция для отображения результата геокодирования
    // Параметр value - адрес объекта для поиска
     function showAddress (value,objName,placemarkIcon) {
    // Удаляет предыдущие результаты поиска (если были добавлены на карту)
    clearPrevResults ();
    // Запуск процесса геокодирования
            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);
                geoResult.setOptions({style:"default#houseIcon",hideIcon:false});
                geoResult.name = objName;
                geoResult.description = objName;
                map.panTo(geoResult.getGeoPoint(),{flying:true,callback: function(state)
                {
                    if (state == YMaps.State.SUCCESS)
                  {
                        map.setZoom(16);
                        switch(placemarkIcon)
                        {
                        case 1: placemarkIconStile = "default#buildingsIcon"
                        break
                        case 2: placemarkIconStile = "default#gasStationIcon"
                        break
                        default: placemarkIconStile = "default#houseIcon"
                        }
                        
                        coordsSearch = new YMaps.Placemark(geoResult.getGeoPoint(),{style:placemarkIconStile,hideIcon:false});
                        coordsSearch.name = objName;
                        coordsSearch.description = "Адрес:"+geoResult.text;
                           map.addOverlay(coordsSearch);
                        coordsSearch.openBalloon();
                        YMaps.jQuery("#Address").attr("value", geoResult.text);
                        YMaps.jQuery("#coordX").attr("value", geoResult.getGeoPoint().getLng());
                        YMaps.jQuery("#coordY").attr("value", geoResult.getGeoPoint().getLat());
                    }
                  }
                });
                }
                else {alert("Ничего не найдено")}
            });
    // Процесс геокодирования завершен неудачно
            YMaps.Events.observe(geocoder, geocoder.Events.Fault, function (geocoder, error)
            {
            alert("Произошла ошибка: " + error);
             })
        }

9 IKSparrow
 
09.09.13
18:25
(8) Спасибо! Но, извиняюсь, несколько коряво объяснил, что требуется. Нужно масштабирование карты вместе с размером HTML-поля. Это реально? А то возникает вот такая ситуация:

http://i59.fastpic.ru/big/2013/0909/0a/4fb1c4a39292182485d97b5bb5b29f0a.png
10 IKSparrow
 
10.09.13
06:50
апочки
11 ИС-2
 
naïve
10.09.13
07:18
<div id="OurYMap" style="width:800px; height:600px"></div>

У меня была такая же проблема. Все уперлось в то, что я не смог отловить событие при изменении окна 1C и не смог нормально определить разрешение экрана. Пользователям объяснял, что так сделано не для широкоформатных мониторов :)

Я сейчас сам активно работаю с Яндекс-картами. Многие вопросы тут поднимал. См. мои темы
12 shpioleg
 
10.09.13
08:45
(9) Если тебе нужно растягивать карту по ширине окна, то можно изменить (11) на
<div> id="YMapsID"style="height:600px;margin:30px 10px"></div>
По центру поля HTML мне не удалось поместить карту фиксированной ширины,применяя отступ margin: 30px auto.
А если тебе нужно менять масштаб карты в зависимости от размера поля HTML, то тут, похоже, надо пробовать на JS отлавливать событие. Типа window.onresize.
13 IKSparrow
 
10.09.13
08:55
(11) (12) Спасибо! Пошёл курить мануалы.
14 ИС-2
 
naïve
10.09.13
09:05
(12) спасибо. То что мне и надо