Яндекс карты для 7.7 — примеры работы с API 2.0






Пример для работы с Яндекс картами в 7.7 на базе API 2.0: геокодер, отображение и выбор объектов в возвратом значений
Для работы с текущей на момент скачивания версией API потребуется курить мануал и делать доработку.

Давно был интерес реализовать работу с картой на базе 7.7, а тут попросили сделать интерактивный выбор объекта на карте, чтобы привязывать координаты домовзданий к элементам справочника (недвижимость).

Вооружился наработками с http://www.1cpp.ru/forum/YaBB.pl?num=1316457428 (благодарность авторам за труды) и документацией к API карт http://api.yandex.ru/maps/doc/intro/concepts/intro.xml и получилось такое вот решение.

C javascript столкнулся абсоютно впервые, поэтому строго не судите если где-то нелогичнонеоптимально.

Обработка позволяет увидить, изучить и понять принцип работы с картами с платфомы 7.7, получить основу для своих дальнейших наработок.

Из плюсов в получившейся реализации для себя выделил следующее:

— для геокодирования не используется HTTP геокодер с получением ответом в виде xml — все запросы через API

— возврат информации в 1с по метаданным геообьектов

— интерактивный поиск в уже открытой карте, передвигаемая метка с обратным геокодированием

— запросы с учетом асинхронной работы геокодера (тоесть учитывается тот факт, пришол ответ от севера или нет)

— при задействованой сериализации, когда запускаеш обработку много раз подряд (10-20-30 раз), база не вываливается. О проблеме вылета сказано в указаной ветке форума 1сpp. Изначально и у меня база отваливалась очень часто, но в итоговой реализации все отлично — более 30 запусков не вызывает вылета базы.

— при проверке на Windows Server 2008 обработка не работает, пока не дописать несколько сайтов в список доверенных (безопасность IE)

чтобы не делать это для каждого юзера в терминале, получилось автоматизировать это с помощью правки реестра самой обработкой. 

Для работы нужны FormEx и 1CPP (проверялось на 2.05.101 и 3.2.3.17 соответственно).

Первая публикация — прошу строго не судить)

Что забыл — спрашивайте — добавлю, отвечу.

Данная обработка представлена как пример для ознакомления с API Яндекс-карт (согласно Пользовательскому соглашению).

60 Comments

  1. Yashazz

    За исключением некоторых претензий к грамотности («выбранные» пишется с двумя «н» и так далее, и по интерфейсу, и по статье) — вероятно, серьёзная вещь. Это нам тут не 8.Х с их встроенным недо-браузером, это вообще 7.7, поэтому в любом случае изврата больше на порядок.

    Reply
  2. selesta

    (1) Yashazz, ну рядом выбранные написано же верно))) На самом деле, много просто мимолетом дорисовывал специально для публикации здесь плюс еще переводы с украинского для этих же целей. Ну и ночная работа и раскладка клавиатуры Макбука не способствуют идеальной орфографии))) Основная концентрация в сабже была на javascript

    Reply
  3. ToJIuK

    А как на счет реализации подсчета расстояния между точками на карте? Есть ли такое решение

    Reply
  4. selesta

    (3) ToJIuK, у меня были задачи выбора и отображения объектов — они и реализованы. Но имея мой пример, заглянув на http://api.yandex.ru/maps/jsbox/ и http://ymapsapi.ya.ru/posts.xml?tag=8493598 можно реализовать практически все, что умеют карты.

    Reply
  5. sytkosa

    Мощно. Однако. Однозначно плюс

    Reply
  6. selesta

    В первом варианте при выборе объекта на карте работа происходит только с одной меткой. При открытии она автоматически создается на найденом адресе. Потом метку можно драгнуть (передвинуть) либо просто щелкнуть в другом месте — метка передвинется, или использовать встроенный в правый верний угол карты поиск — после выбора результата поиска метка передет на выбраный адрес. Если по изначально переданному адресу ничего не найдено — при открытии метки не будет вообще, появится она только после аналогичных действий — щелчка на карте или поиска. При переезде метки выполняется обратный геокодинг (поиск адреса по координатам) и название метки устанавливается как адрес объекта. Эта логика продиктована поставленной задачей — выбор объекта с карты, то есть необходимо было работать с единым элементом, без возможности «запутаться».

    Reply
  7. Yashazz

    (3) Если речь о возможностях Яндекс API, то там много чего можно, selesta правильно привёл ссылки. А если речь о принципе и подходе 8.Х, то можно делать, например, так: http://infostart.ru/public/164621/

    Ещё раз респект автору, заставить это крутиться под клюшками — почти подвиг.

    Reply
  8. poyson

    А как же байкот российских товаров на украине :)….

    Reply
  9. ToJIuK

    + Однозначно!

    Reply
  10. eshtrey

    зачет

    Reply
  11. sournk

    Посмотрим

    Reply
  12. _Z1

    (0) спасибо за обработку.

    Скажите а можно ли сделать так :

    Чтобы была сериализация и окно формы было обычным — с заголовком

    и стандартными кнопками , закрыть , свернуть, максимизировать ?

    Reply
  13. selesta

    (13) _Z1, можно, закоментируйте просто 2 строки в коде:

    Окна = ….

    Окна.СтильОкна….

    Reply
  14. selesta

    была задача также автоматически пройтись по базе и получить координаты по всем елементам справочника (по большому масиву адресов)

    столкнулся с тем, что похоже сериализация таки вешает 1с со временем, тоесть после 10-15 вызовов подряд

    пришлось сделать еще 1 вариант обработки без отображения карты, так сказать для фонового вызова в цикле

    обработка ищет адрес, пишет результат в файлик, и закрывается. Вызвавшая ее обработка считывает файлик как СписокЗначений

    и получает аналогичныые метаданные объекта. Протестировано на 1000+ адресах — без сбоев, отрабатывает четко

    Reply
  15. _Z1

    (15) читал (в api 2.0 ) что если много объектов

    то надо делать геолакацию на сервере ( наверное имеется ввиду сервер yandex )

    и есть примеры как это надо делать.

    Reply
  16. _Z1

    (14) спасибо получилось.

    вот еще как бы было замечено что одни и теже гео данные иногда

    отображаются быстро а иногда считается достаточно долго.

    это зависит от загрузки серверов яндекса или есть еще какие либо причины ?

    Reply
  17. selesta

    (16) _Z1, я и так впервые столкнулся с яваскриптами и то что получилось и так для меня подвиг, в (8) это оценили)

    поэтому не хотелось тратить еще кучу времени чтобы с этим разобраться

    (17) загрузка да — зависит от интернета и отклика от сервера яндекса, 1с и скрипт отрабатывают одинаково

    Reply
  18. _Z1

    (18) да я о другом.

    я прочитал что когда надо сразу получить геокодирование многих объектов то

    надо делать другими методами.

    т.е. есть два способа геокодированияя на стороне клиента — как сделано у Вас

    также есть геокодирование на стороне сервера ( этот способ надо применять когда за один раз хотим получить

    геоданные о многих объектах )

    Если Вам это интересно я могу поискать ссылку как надо поступать в этом случае.

    Reply
  19. selesta

    (19)я все правильно понял, именно об этом, и ответил тоже касательно этого

    сабж тута _http://api.yandex.ru/maps/doc/jsapi/2.x/dg/concepts/geocoding.xml#multi-geocode

    мне просто хватило секаса чтобы завести текущую реализацию, на эту уже небыло желания

    Reply
  20. ToJIuK

    На основании данной обработки. Получилось реализовать построение маршрута по не скольким точкам и подсчет расстояния (Иногда работает не очень корректно, но это походу проблема яндекса: строит не оптимальный маршрут). А так очень хорошая ВЕЩичка.

    Reply
  21. selesta

    (21) Молодца, прикрепи решение сюда к сообщению или кинь в личку ссылку поглядеть

    Reply
  22. _Z1

    (21)

    Иногда работает не очень корректно

    Ну да маршрут Белгород — Ростов строит через Харьков.

    и еще вопрос не сделал ли чобы можно было создать карту один раз и потом

    строить много разных маршутов с помощью ПриПовторномОткрытии() ( т.е. я до конца с этим не разобрался)

    Reply
  23. ToJIuK
    Reply
  24. _Z1

    (24) сделал аналогично, только еще поставил

    автомасштабирование карты по маршруту.

    Так если тебе длина маршрута в 1с не нужна

    то строки можно убрать

    list.AddValue(distance,i+1);

    Object1C.Msg(list);

    | Object1C = null; //только так 1с перестала вылетать с использованием Сериализовать

    Reply
  25. isnail

    Мощная штука, огромный труд!

    А вот у меня карта мышкой не двигается, это нормально или только у меня так?

    Reply
  26. _Z1

    (26) Проверил — у меня карта двигается.

    Reply
  27. andrey-st

    А есть тоже самое только на google?

    Reply
  28. ToJIuK

    (28) andrey-st, для Google есть просто подсчет расстояния без отрисовки маршрута.

    Reply
  29. ToJIuK

    А у кого нибудь получилось отправить на печать карту со списком адресов? что то у меня не получается.

    Reply
  30. VigaViga

    Было бы интересно на это посмотреть!

    Reply
  31. smitti911

    (26) isnail, У меня тоже карта мышкой не двигается.Также на работает инструмент линейка.Не знаю в чем проблема. Автору спасибо за труд.Хорошая робота.

    Reply
  32. smitti911

    (33) smitti911, Двигается только если тянуть за метку(балун)

    Reply
  33. ToJIuK

    (34) smitti911, да да у меня тоже такая проблема . но меня как то это не очень напрягает и поэтому не хочу разбираться в чем бело )

    Reply
  34. ToJIuK

    Работал нормально. Но на неделе Перестала отображаться карта при построении маршрута! Кто нить сталкивался с такой проблемой ? Адреса есть а изображения карты нет

    Reply
  35. Зеленоград

    Автору почёт, сейчас буду смотреть.

    Сверхзадача — перевод из свободного текстового формата адресов в КЛАДР.

    Reply
  36. Зеленоград

    Если кто-то уже сделал автоматическое нажатие кнопки на карте — дайте готовый код, пожалуйста. Тогда успею сделать настойку на черноплодной рябине и отблагодарю и Игоря, и автор доработки.

    Reply
  37. Зеленоград

    Javascript прост и логичен. Особенно когда есть за спиной хороший специалист 🙂

    Кнопку нажимать не надо, теперь я могу исправлять адреса автоматически, сейчас буду выводить критерий полноты.

    Reply
  38. selesta

    (39) Скинул на почту пример обработки массива адресов

    Reply
  39. Зеленоград

    Получил, спасибо, работает.

    Никак не могу запустить на сервере Win2003 — безопасность IE ниже Medium не даёт, прописал сайты-исключения — всё равно спрашивает «An ActiveX control on this page might be unsafe to interact with other parts of the page. Do you want to allow this interaction?». Есть у кого-нибудь мысли?

    Reply
  40. Muller2306

    Тоже проблема передвижения карты, но она только при открытии окна в модальном режиме, в обычном все ок.

    Reply
  41. prog1c77

    ребят скиньте пожалуйста в личку кто нибудь это чудо! Очень прошу.

    Неделю уже воюю, а тут такое решение готовое для 7.7

    Reply
  42. ToJIuK

    с 16.02.16 лавочку прикрыли доступ к карта по API 2.0 закрыли. Пишет ошибку https://api-maps.yandex.ru/2.0.43/release/combine.xml?modules=3N5x6D3G373R3H3_-j.C_e_h-,-)5e5h8H.I5n_b$w$y$A784Q-K-L9Z$d$a9x9R8a7)-e797$5c9C7z7j5f-g-o-i8e3T7Y4(5G3S5R9$9-9.9_9*999!9,9q9j9) кто нить знает как победить?

    Reply
  43. via

    (44) ToJIuK, используй 2.0.42

    Reply
  44. ToJIuK

    спасибо заработало. А то я уже было начал переписывать под Api 2.1 но все безрезультатно , как будто АктивИкс не работает с API2.1 . главное если сохраненный .html В IE на прямую скрипт отрабатывает нормально. А вот из 1с выдает ошибку. Еще раз спасибо за помощь

    Reply
  45. DirtyCat

    (46) ToJIuK, у меня получилось под 2.1

    Reply
  46. VigaViga

    Ребят,

    кто сможет данные «Карты» к конфигурации Оптимус Грузоперевозки (http://infostart.ru/public/67996/) привязать? Есть куча идей еще…

    Разработчик карт молчит, разработчику Оптимуса некогда…

    Украина.

    Скайп: silver_aleksander

    Reply
  47. Berckk

    (48) DirtyCat,

    Выложи код, пожалуйста.

    Или кто-нибудь помогите рабочим вариантом под Windows 2012 R2

    Reply
  48. nikk911

    Многоуважаемый автор, будьте так любезны ответьте хоть что-то касательно ошибки.

    Reply
  49. selesta

    (52) nikk911, отвечаю

    это ошибка не автора и не данной публикации а последствие изменения АПИ карт, возможно версия 2.0.44 устарела уже, прошло все-таки 2 года

    выше описана аналогичная ситуация

    рецепт: брать актуальную версию АПИ, курить ее и править код

    Reply
  50. nikk911

    (53)

    Спасибо!

    Думаю стоит писать в описании что обработка на данный момент не работает.

    Я не говорю что обработка дорого стоит, но я за честность!

    Я лично считал что это проблема винды (часть приколов была завязана на безопасности). А часть таки в API, которого я не курил ))) Качал чтобы покурить — а табак мокрый оказался.

    Reply
  51. selesta

    (54) Дописал, для меня это просто казалось само по себе понятным.

    Reply
  52. Poyarkov696

    При выводе карты в IE выходит ошибка.

    Ошибка Веб-страницы

    Строка: 1

    Ошибка: «JSON» не определено

    Подскажите, как это можно исправить?

    Было что-то подобное?

    Reply
  53. ADirks

    (56) Это пламенный привет от микрософт.

    Сделать ,судя по всему, ничего нельзя.

    Reply
  54. Gkmy

    (0)

    Пример для работы с Яндекс картами в 7.7 на базе API 2.0: геокодер, отображение и выбор объектов в возвратом значений…

    Пример интересный:

    Reply
  55. Gkmy

    1) геокодер, отображение и выбор объектов — если это подразумевает возможность передать карте из 1С 7.7 адреса текстом — работает;

    2) возврат значений — из карт в 1С 7.7 — не работает.

    Карты не активны. На клавиатуру и левую кнопку мыши не реагируют и только отдаляются правой кнопкой.

    Reply
  56. Gkmy

    В теме: яндекс карты в 7.7 — нашёл ещё два примера:

    1) Диспетчер маршрутов.ert,

    2) ДубльГИС.ert.

    Первый в Торговля+Склад 9.2 (7.7.990) открылся с ошибками. Неполный перечень ошибок:

    Второй пример использует 2gis.ru:

    У второй внешней обработки карта активна и реагирует на левую кнопку мыши.

    Reply
  57. Gkmy

    Алгоритм взаимодействия с интерактивной картой yandex.ru у первой обработки (60) более прост:

    СтрокаАдреса =  «http://maps.yandex.ru/?ll=»+Долгота+»%2C»+Широта+»&spn=0.020921%2C0.008638&z=16&l=map»;
    ЗапуститьПриложение(СтрокаАдреса);
    
    Reply
  58. Gkmy

    (0)

    Пример для работы с Яндекс картами в 7.7 на базе API 2.0: геокодер, отображение и выбор объектов в возвратом значений

    Однако файлы формируемые примером (0) и открытые браузером — интерактивны:

    Reply
  59. ToJIuK

    (54) у меня до сих пор обработка работает, проблем нет

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *