Яндекс карты для 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 не будет опубликован. Обязательные поля помечены *