gifts2017

Работа с картами 1С 3 в 1: Яндекс, Google , 2ГИС

Опубликовал Головаченко Дима (Smaylukk) в раздел Обработки - Универсальные обработки

С каждым годом становится все очевидно, что использование онлайн-сервисов намного упрощает жизнь. К сожалению по картографическим сервисам условия пока жестковаты. Но, ориентируясь на будущее, я решил показать возможности API выше указанных сервисов: Инициализация карты Поиск адреса на карте с текстовым представлением Геокодинг Обратная поиск адреса по ее координатами Взаимодействие с картами - прием координат установленного на карте метки Построение маршрутов по указанным точками Кластеризация меток на карте при увеличении масштаба Теперь также поддержка тонкого и веб-клиента

Данная обработка демонстрирует возможности интеграции 1С с картографическими сервисами. Поскольку уже было опубликовано немало обработок на эту тему, я, чтобы не повторяться, решил собрать в одну обработку интересные и нужные функции из 4 сервисов: 

Внимание! Обработка предназначена только для демонстрации возможностей интеграции картографических сервисов с 1С. Обработка распространяется как есть. Автор не несет ответственности за действия пользователей обработки, которые не будут удовлетворять лицензионные соглашения этих сервисов.

Обновление 29.07.2016.

[*] Отказ от использования метода eval() в обычных формах
[*] Перевод работы макетов в режим совестимости IE=9 и больше - открываются больше возможностей карт и меньше ошибок.
[*] Перевод 2GIS на API 2.0
[-] 2GIS - в версии 2.0 отсутствует встроенный js-геокодер
[*] Google-map - исправлена проблема с кластеризатором
[-] На версиях 1С ниже 8.3.7 при повторном открытии возможно отключене функционала HTML-документа. Скорее всего это внутрення ошибка платфрмы, которые исправлена в более поздних версиях.

Обновление 23.02.2016.

[*] Исправление ошибок в картах Яндекса и Гугл.
В 

Обновление 10.01.2013. 

работы обработки в тонком и веб-клиенте. Но там поддерживается работа только трех поставщиков услуг - Яндекс, Google. Рамблер. 2ГИС выбыл из гонки, потому, что клик на элементе формы в 1С срабатывает раньше клика в JS, поэтому координаты метки не считываются. А событий в HTML-поля в управляемых формах очень мало - двойного клика нет. Также добавлена возможность построить полигон по выбранным точкам. В тонком клиенте работа HTML-поля бывает некорректна - это уже особенности платформы.

Вот список возможностей сервисов, которые я пытался интегрировать с 1С:

  • Инициализация карты
  • Поиск адреса на карте с текстовым представлением
  • Геокодинг
  • Обратная поиск адреса по ее координатами
  • Взаимодействие с картами - прием координат установленного на карте метки
  • Построение маршрутов по указанным точками
  • Кластеризация меток на карте при увеличении масштаба

Ну а теперь подробно по каждому сервиса


Яндекс-карты

Web-версия.
API Яндекс-карт.
На текущий момент используется версия API 2.0.
Возможности обработки при работе с Яндекс-картами:

  • Инициализация карты - ДА;
  • Отсутствие API-ключа - ДА;
  • Поиск адреса на карте с текстовым представлением - ДА;
  • Геокодирование - ДА;
  • Обратный поиск адреса по его координатами - ДА;
  • Взаимодействие с картами - прием координат от установленной на карте метки - ДА (клик на карте);
  • Построение маршрутов по указанным точками - ДА;
  • Кластеризация меток на карте при увеличении масштаба - ДА;


Google-карты
Web-версия.
API Google- карт.
На текущий момент используется версия API v3.
Возможности обработки при работе с Google-картами:

  • Инициализация карты - ДА;
  • Отсутствие API-ключа - ДА;
  • Поиск адреса на карте с текстовым представлением - ДА;
  • Геокодирование - ДА;
  • Обратный поиск адреса по его координатами - ДА;
  • Взаимодействие с картами - прием координат от установленной на карте метки - ДА (клик на карте);
  • Построение маршрутов по указанным точками - ДА (до 10 точек, включена оптимизация промежуточных точек);
  • Кластеризация меток на карте при увеличении масштаба - ДА;


2ГИС-карты
Web-версия.
API 2ГИС- карт.
На текущий момент используется версия API 1.0.
Возможности обработки при работе с 2ГИС-картами:

  • Инициализация карты - ДА;
  • Отсутствие API-ключа - НЕТ;
  • Поиск адреса на карте с текстовым представлением - ДА;
  • Геокодирование - ДА (но нужен API-ключ);
  • Обратный поиск адреса по его координатами - ДА;
  • Взаимодействие с картами - прием координат от установленной на карте метки - ДА (клик на карте);
  • Построение маршрутов по указанным точками - НЕТ;
  • Кластеризация меток на карте при увеличении масштаба - НЕТ;

2ГИС - поиск адреса


Рамблер-карты (проект умер, оставляю в статье для памяти)
Web-версия.
API Рамблер- карт.
На текущий момент используется версия API 1.x.
Возможности обработки при работе с Рамблер-картами:

  • Инициализация карты - ДА;
  • Отсутствие API-ключа - ДА;
  • Поиск адреса на карте с текстовым представлением - ДА;
  • Геокодирование - ДА;
  • Обратный поиск адреса по его координатами - ДА;
  • Взаимодействие с картами - прием координат от установленной на карте метки - ДА (одинарный клик на карте);
  • Построение маршрутов по указанным точками - ДА;
  • Кластеризация меток на карте при увеличении масштаба - ДА (но в обработку не добавлял, не понравилось);

Обработка реализована для 1С 8.2 (толстый клиент).

smaylukk.com.ua

Скачать файлы

Наименование Файл Версия Размер
Работа с картами в 1С.epf 1906
.epf 97,44Kb
26.02.16
1906
.epf 97,44Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение
Комментарии
1. Яков Коган (Yashazz) 28.12.12 16:41
Что касается Яндекс-карт, то концептуально всё ровно так же, как в моей недавней http://infostart.ru/public/164621/ Хотя слишком увлекаться возможностями eval всё ж нехорошо. :)
2. Головаченко Дима (Smaylukk) 28.12.12 17:05
(1), спасибо за отзыв. API ведь одно - концепции тоже особо отличаться не будут :). Тем более в 1С, которая изначально предназначена для решения других задач.
А про eval можете ссылочку бросить или написать, что с ее использованием не так?
Потому что я в web-программировании новичок.
3. Димон (dimon555) 03.01.13 13:23
Спасибо большое за хороший пример.Делал нечто подобное, только дедовским способом.Теперь окончательно разберусь.
4. Головаченко Дима (Smaylukk) 04.01.13 04:41
5. andrey dyak (dyak84) 04.01.13 12:00
Спасибо пример очень хорош и очень поучительный, с многими вещи разобрался который раньше не понимал. Однако на периферии с бесплатный кар толку ноль. Они мало то что очень и очень старые, они еще и практически не имеют детализации
6. Владимир Лагутин (Lukich66) 04.01.13 14:23
Впервые посмотрел. Яндекс.
1.Ввел тупо=Город(ххх), улица(хххх),№дома- ищет город(ок),ищет нас.пункт с именем улицы(?),№ дома(???) В карточной метке- красиво
2.Создал точку (Точка 1), создал точку(Точка 2)
3. Удалил в ТЧ-"точки" точку (Точка1)- не обновляется отображение карты, т.е. метки Т1,Т2 на карте остались, нажимать кнопку "обновления" карты- это для продвинутых.
4.Ввел в ТЧ точку "вася" с координатами хх,уу- на карте тихо? т.е. точка не появилась- координаты рядом c точкой "город"- как бы должны отобразиться.
5.Как это можно приспособить для работы с GPS-системой "Навигатор",чтобы сразу в 1с-БП получать маршрут движения автомобиля, точки его жизнедеятельности(остановка,заправка,слив бензина и т.п.)?
7. Головаченко Дима (Smaylukk) 04.01.13 16:36
(6), спасибо за отзыв. Отвечаю:
1. Посмотрите информацию про геокодирование на странице описания API(есть в публикации).
2, 3. Таблица "точки" нужна для построение маршрута. Карта очищается при построении маршрута или очистке - кнопка рядом с маршрутом с крестиком - очищает и таблицу и карту.
4. Опять же повторюсь - таблица "точки" нужна для построения маршрута, для отображения на карте меток с адресом нужно использовать верхнюю таблицу "Адреса". Но и там после добавления ничего не появится - нужен двойной клик.
5. Напомню, что это не подпадает под лицензию использования. Ну а относительно задачи - надо искать механизмы импорта из системы "Навигатор" точек маршрута - XML, COM, OLE - ну а дальше уже дело техники. С этой системой не работал, по-этому больше не подскажу.
8. Владимир Лагутин (Lukich66) 04.01.13 18:44
(7) Smaylukk, и Вам спасибо. Посмотрел код и практически все стало понятно- первые впечатления- их и изложил.
посмотрел и (1)http://infostart.ru/profile/48297/ и т.б. уже там об этом же. А про "Навигатор"-оч.похоже отображение на карте движений а/м объектов(точки_х)+ регистрация событий,но это уже с ними.
9. Яков Коган (Yashazz) 05.01.13 21:16
(2) eval нехороша тем, что снижает понимабельность, особенно становятся непрозрачны области действия тех или иных переменных, поэтому тогда уж или лучше сразу указывать их как глобальные (window), или минимально использовать eval, а по максимуму - конкретные функции. Стоит на месячишко отвлечься - и код, изобилующий eval, будет трудненько понять.

Кстати, я-то думал, ты сделал настоящее геокодирование... А это всего лишь показ на карте. Геокодирование интересно тогда, когда ты передаёшь, например, строковые адреса, а получаешь таблицу координат X,Y.

(6) Советую посмотреть и мою разработку. Там несколько простых примеров, с которых можно начинать, авось пригодится.
10. Головаченко Дима (Smaylukk) 05.01.13 22:50
(9), а то думал, что что-то серьезное. Eval я использую для запуска операций (маршрутизация, отображение на карте маркера с координатами, поиск адреса по строке). С получением координат установленного маркера на карте я перемудрил, признаю. Можно и через значение GetElemenetByID() получить.
Про геокодирование- не знаю, что это означает для вас, но в моей разработке на карте отображается первый найденный (и наиболее точный) адрес через геокодирование внутреннее, а в таблицу , которая слева верхняя, попадают адреса, найденные через HTTP-геокодер.
11. Владимир Лагутин (Lukich66) 06.01.13 09:22
(9) Yashazz,добрый день. а я и посмотрел(только внешне,об этом и писал), но когда увидел "боян" кнопок( добавить метку ,удалить метку и т.д.)желания посмотреть "внутренности" не возникло. Года 4-5 назад сделал робкую попытку окунуться в мир html- получил такое разочарование от "убогости" доступных ресурсов( типа на бейсике-89г написать бухгалтерию предприятия),но с.б. появилась быстро прогрессирующая 8-ка на ней и "женился".
12. Макс Зеленский (mzelensky) 07.01.13 10:16
13. Яков Коган (Yashazz) 07.01.13 20:40
(10) Дык в том и фишка, что найденные только отображаются на карте. А через http - это уже давнишний боян. Я к тому, чтоб именно средствами API получать прогеокодированную инфу обратно в 1С. Я это сделал как раз с помощью eval и весьма извратно (там переход от асинхрона к синхронности 1С), хотел глянуть, может, есть другие идеи для группового геокодирования. Сразу предупрежу - скрипт, предлагаемый разработчиками Яндекса или его вызов как библиотеки не прокатывают, т.к. в 1С сейчас MSIE 7, а там фишки, поддерживаемые в java в следующих версиях (например ForEach).

(11) На API 2.0 это не баян. Делали на старой 1.Х, но не на новой. Конечно, разница невелика, но как демо-пример я нарочно их сделал.
14. Denis Rokov (Rokov) 09.01.13 10:54
в нашем городе яндекс отвратительно строит маршруты. может через все мосты проести, а точки в соседних кварталах. Но это не к автору обработки, конечно, а к яндексу.
15. Головаченко Дима (Smaylukk) 09.01.13 13:32
(14), так ведь у вас есть еще Google и Рамблер маршрутизация :)
16. naus (Danil.Potapov) 10.01.13 10:44
скачал версию от 10.01.13 (упр формы)
есть баг.
Сценарий:
1. выбрать яндекс
2. набрать в поиске "Москва".
3. Изменить размер элемента управления поле html (изменить размер формы, подвинуть вертикальный разделитель, ctrl+shift+z и тд)

вываливается окно IE с ошибкой исполнения сценария.
17. naus (Danil.Potapov) 10.01.13 10:52
дополнение про версию на упр формах.
процедуры
ПроизвестиГеокодинг_Яндекс
ПроизвестиГеокодинг_Гугл
ПроизвестиГеокодинг_Рамблер
и функцию
Получить16Цвет

переведи на клиент
так как хранение временных файлов на сервере 1с как-то не айс, да и причин уходить на сторону сервера нету.
18. naus (Danil.Potapov) 10.01.13 10:53
после (17) исчезает баг описанный в (16)
19. Головаченко Дима (Smaylukk) 10.01.13 10:56
(17), ПроизвестиГеокодинг можно и перевести, но ПолучитьЦвет не выйдет - ГенераторСлучайныхЧисел не работает в ВебКлиенте.
20. naus (Danil.Potapov) 10.01.13 11:00
(19) тогда насерверебезконтекста
21. Головаченко Дима (Smaylukk) 10.01.13 11:00
(18), спасибо за наблюдение, обязательно гляну.
Там еще и с Рамблером проблема в Тонком клиенте - карта в поле HTML появляется внизу, сверху пустая область.
Но прикол в том, что для толстого, тонкого и веб-клиента я использую 1 текст HTML. Везде отрабатывало норм, а в тонком начало сбоить.
22. naus (Danil.Potapov) 10.01.13 11:03
23. naus (Danil.Potapov) 10.01.13 11:04
(21) в 8.2.17.143 все ок. скинь скрин с проблемой.
24. Головаченко Дима (Smaylukk) 10.01.13 11:07
(18), у меня не исчез баг. Если открыть форму с картой Яндекса, закрыть и повторно открыть - баг остается.
Но перевод функций геокодинга на клиент уместен.
Такое наблюдал, когда в толстом клиенте или в 8.1 передавал текст HTML-полю, в котором подгружались файлы скриптов или стиля, через метод УстановитьТекст(). Поэтому приходится изворачиваться - сохранять в файл и метод Перейти()
25. Головаченко Дима (Smaylukk) 10.01.13 11:09
(23), тоже 8.2.17.143
mephistofel; mandarinkaalekseevna; +2 Ответить 1
26. Головаченко Дима (Smaylukk) 10.01.13 11:11
(23), но несмотря на ошибку функционал карты остается полным.
27. naus (Danil.Potapov) 10.01.13 11:13
(23) на обычных формах баг такой же. Это мешает, когда построишь маршрут, потом вываливается эта ошибка, после этого маршрут и точки отвязываются от карты.
28. naus (Danil.Potapov) 10.01.13 11:14
(26) когда перевел на клиент, то для ПроизвестиГеокодинг_Рамблер пришлось доработать, так как там есть вызовы сервера (методы из ОбработкиОбъект).
29. naus (Danil.Potapov) 10.01.13 11:15
(21) в первый раз когда открыл рамблер, то все работает отлично, потом переоткрывал, перестало работать как надо.
30. naus (Danil.Potapov) 10.01.13 11:18
в основной упр форме в заголовке написано "Работа с каратми 1С: 4 в 1", но у тебя в упр формах только три сервиса.
31. Головаченко Дима (Smaylukk) 10.01.13 11:25
(30), остаточное явление, извини. Дорабатывался функционал на управляемых формах, так что про заголовок и не подумал. Я изначально планировал 4 сервиса перетянуть, но 2ГИС отказался это делать.
32. naus (Danil.Potapov) 10.01.13 11:37
(21) продолжение про глюк с рамблером.
Как сделать, чтобы не глючил (работает только при первом открытии обработки).
1. очистить всю историю в IE.
2. перевести работу IE WebBrowser в режим отличный от версии 7.
http://blogs.msdn.com/b/ie/archive/2009/03/10/more-ie8-extensibility-improvements.aspx

http://partners.v8.1c.ru/forum/thread.jsp?id=876295
- на компьютере штатным образом можно установить только одну версию IE.
- при установке IE регистрируется в системе как ActiveX "Microsoft Web Browser". Реализация находится в ieframe.dll, которая располагается в системном каталоге ОС
- поле HTML документа для работы использует этот ActiveX, создавая его штатным образом.
Т.о. нам не понятно как можно добиться описанного Вами поведения.
Мы можем только посоветовать Вам убедиться в том, что IE был установлен правильно. Например, не используются утилиты, которые пытаются предоставить возможность параллельного использования IE разных версий.

PS у себя сделал 1cv8.exe 1f40 и 1cv8c.exe 1f40 в HKCU и тупо перезапустил приложения.
33. naus (Danil.Potapov) 10.01.13 11:39
34. naus (Danil.Potapov) 10.01.13 11:57
(25) фиксил чисткой кэша на стороне клиента 1с.
35. Михаил Журавлев (Gmix) 10.01.13 15:24
Скачал пробую добавить несколько точек - не получается.
Как вообще это проверить все?
36. Головаченко Дима (Smaylukk) 10.01.13 19:56
(35), открываете стартовое окно
выбраете поставщка услуг (клик по логотипу)
появляется карта - вот по ней либо клик, либо двойной клик.
37. Михаил Журавлев (Gmix) 11.01.13 10:07
(36) Smaylukk, На скринах в ТЧ адреса видно несколько адресов.
Как это сделать? посмотрел код. При вводе адреса в верхнее поле ТЧ Адреса очищается.
Не понятно зачем она тогда.
Я так понимал я ввожу несколько адресов и обработка геокодирует адрес и добавляет его в ТЧ.
Посмотрев код понял что ожидал другое поведение от этой обработки.
За обработку Спасибо.
38. Головаченко Дима (Smaylukk) 12.01.13 20:09
(37), "несколько адресов в ТЧ адерсов" - это следствия геокодинга, который запускается при изменении адреса. Перед этим нужно очистить результат предыдущего геокодинга.
39. Павел Шилкин (ReLock) 14.01.13 11:28
А у меня почему-то вообще открывается не ФормаОсновная, а ФормаОсновнаяУпр, т.к. на форме нет 2GIS. И не важно, в каком режиме я запускаю программу (толстый, тонкий). Пробовал поменять формы местами - 0. Почему так?
40. Головаченко Дима (Smaylukk) 14.01.13 12:10
(39), возможно вы запускаете 1С в режиме "Толстый клиент управляемое приложение"?
Во всяком случае, у меня такой проблемы не было.
Если не получится - напишите номер версии 1С и конфигурацию, в которой запускаете (если не самописная).
41. Павел Шилкин (ReLock) 14.01.13 12:32
Спасибо! Запустил в толстом клиенте (обычное приложение)! 2GIS появился!
42. Павел Шилкин (ReLock) 14.01.13 12:35
(40) Smaylukk, А почему 2GIS работает только в этом режиме (ТК ОП)?
43. Головаченко Дима (Smaylukk) 14.01.13 12:57
(42), я описал в обновлении к публикации. 1С быстрее отрабатывает клик по карте, чем прикрепленное событие в JS. Проще говоря - нельзя корректно считать координаты метки для 2ГИС. Остается только поиск адреса. Остальной функционал тоже отсутствует. Поэтому решил с ним в тонком клиенте не заморачиваться.
44. Алексей (kanalya) 15.01.13 12:29
А как снова отобразить точки на карте после очистки карты?
45. Головаченко Дима (Smaylukk) 15.01.13 12:32
(44), просто точки уже не отобразить - можно вывести кластера, построить маршрут или полигон.
Но вы можете и сами программно (если умеете) доделать - по аналогии с верхней таблицей Адресов. Там при выборе адреса - выводится точка, только с предварительной очисткой карты.
46. Алексей (kanalya) 15.01.13 12:37
47. MIK В (mikukrnet) 22.01.13 17:41
А почему такие точки в яндексе странные? Вот эта запатентованная (by Apple) скругленная рамочка - это точка )

48. Головаченко Дима (Smaylukk) 22.01.13 18:23
(47), это по всей видимости зависит от Internet Explorer, который у вас стоит. И такое возникает в тонком клиенте.
В макете, в секции HEAD есть строка
<meta http-equiv="X-UA-Compatible" content="IE=7"/>
.
Вот при установке
content="IE=9"
у меня появлялась такая точка :).
Поиграйтесь с мета тегом "X-UA-Compatible", на который завязывается HTML в тонком клиенте.
P.S. Если его убрать, макет напрочь отказывался работать.
49. Елена Пименова (Bukaska) 22.01.13 20:20
Хорошая статья! Как раз нужный мне материал, но есть вопросы.
1. Карты - это типа показухи, предназначено для демонстрации готовой конфигурации?
2. Какие карты лучше подойдут для обозначения транзитных складов, а так же показать линии маршрута?
3. Кроме обработки, как ещё можно "внедрить" карты в конфигурацию? Или оно не внедряется внутрь, а чисто внешним файлом или внешним отчетом для демонстрации возможностей?
50. Головаченко Дима (Smaylukk) 22.01.13 21:08
(49), в обработке я захотел собрать воедино работу с несколькими картографическими сервисами, у которых есть более-менее приемлемые карты стран СНГ. На сайте есть похожие обработки, но они заточены чисто под один сервис. Ну и наконец делалось это чисто для прокачки опыта.
По-этому это просто обработка - демонстрация возможностей работы из 1С с подобного рода сервисами. Конфигурации нет.
Мне из представленных 4 больше всего понравился Яндекс - хорошая детализация, русский/украинский язык, большая территория.
Напомню, что из перечисленных карт в 1С можно встроить только Гугл, при условии, что у вас есть бизнес-аккаунт.
Ну а внедрение:
  • Берете понравившийся макет.
  • Добавляете его в общие макеты или в нужный объект.
  • Настраиваете формы, по аналогии с формой обработки.
  • Программно привязываете к нужным справочникам/документам, для поиска адресов, координат, составления маршрутов.
51. Елена Пименова (Bukaska) 22.01.13 21:30
(50) Smaylukk, А Как добавить карту в нужный объект? Об этом где-нить написано?
52. Владимир Каракозов (karakozov) 24.01.13 09:54
Видел уже несколько примеров взаимодействия с АПИ поставщиков карт, очень интересная концепция, но более интересно реально прикладное внедрение, которое не просто умерло по средствам пользователей, а функционирует и используется (не в транспортных компаниях например). Можно предположить что в логистике это очень полезно.Но есть ли иные реализации задач по средствам карт API.
53. Головаченко Дима (Smaylukk) 24.01.13 10:48
(52), отвязать карты от транспорта очень сложно. Но к примеру владельцы торговых или некоммерческих точек, которые разбросаны по городу или стране могут с помощью карт обозначит их для более удобного поиска.
54. Дмитрий Жиляков (Zhilyakovdr) 25.03.13 09:43
Ни кто не задавался целью написать решение задачи коммивояжера с использованием данных карт? Это могло бы очень упростить работу логиста...
55. Александр Ульянов (Aleks1973) 25.03.13 10:02
(54) В Москве такого решения - для произвольного маршрута - не существует. Тема была ещё на 77
56. Дмитрий Жиляков (Zhilyakovdr) 25.03.13 10:53
(55) В смысле не существует? На сколько я знаю у тех же яндекс карт есть прокладка маршрута от точки А к точке Б, разве нельзя получить матрицу расстояний между всеми точками потом просчитать задачу коммивояжера по этой матрице и с помощью апи нарисовать маршрут? Я реализовывал похожую задачу, но без расчета оптимального пути((( Если у кого то есть функция решения задачи коммивояжера, то можем попробовать написать такую обработку.
57. 1module (pridecom) 13.05.13 07:59
Спасибо за обработку.
А как рекомендуется передавать параметры в обработку с адресом, который будет отображаться при открытии?
Например, нужно отображение адреса клиента, на карточке которого в УТ 11 планируем добавить кнопку с отображением карты (Яндекс).
В коде данный параметр отсутствует, да и его организация не совсем понятна...
58. Головаченко Дима (Smaylukk) 13.05.13 08:45
(57) ,Спасибо за отзыв.
В макете Яндекса есть две процедуры:
  • 1 FindAdres(Adres) - ищет адрес по текстовому представлению с помощью геокодера Яндекса и отображает первый найденный.
  • 2 ReverseSearchAdres(CoordX, CoordY, Adres) - устанавливает маркер на карте по переданным координатам.
Вызов этих процедур осуществляется с помощью метода - ЭлементыФормы.Эксплорер.Документ.parentWindow.eval("FindAdres(""" + ВашАдрес + """);");
или
ЭлементыФормы.Эксплорер.Документ.parentWindow.eval("ReverseSearchAdres(" + Широта + "," + Долгота + ", """ + ВашАдрес + """);");
59. Степан S (Ed111111) 15.05.13 18:12
Обязательно скачаю. Это самое лучшее, что я мог себе представить. Если мне разрешат этой обработкой пользоваться на работе - мне вообще ничего почти не надо будет делать почти. Работы станет процентов на 70 меньше)))
60. 1module (pridecom) 28.05.13 10:45
Еще один вопросик
На скриншоте Яндекс.Карт отражено несколько адресов сразу на карте
В самой обработке непонятно, каким образом отображать сразу несколько адресов.
Строка поиска только для заполнения одного адреса или нет?
61. Головаченко Дима (Smaylukk) 28.05.13 11:47
(60), после заполнения строки поиска запускается механизм геокодинга Яндекса (в данном случае) и в таблицу адресов заполняется все найденные адреса, а на карту выводится по координатам первый адрес, с предварительной очисткой карты. Т.е. всегда один адрес отобразится в данном случае.
На втором скриншоте, где несколько маркеров отображено, маркеры на карту добавляются вручную и поэтому их там несколько.
А теперь ответ на вопрос:
1. Методы отображения адреса на карте всегда покажут один маркер, поскольку там встроен метод очистки.
2. Метода отображения маркера исполняются без принудительной очистки и их можно выводить сколько угодно.
62. Сергей Ожерельев (Поручик) 22.06.13 14:46
Проект «Рамблер-Карты» закрыт
63. @lex alexeew (@lex) 11.07.13 09:03
Хорошие примеры :) Еще бы сохранение маршрута в нужном масштабе сделать...
64. Вадим Кушнер (Foma4382) 08.08.13 23:30
Хороший примерчик. Спасибо!
65. Дмитрий (gosizo) 16.09.13 09:10
Яндекс карта. допустим я поставил несколько меток, можно ли как-то смасштабировать карту (не руками, а программно), что бы масштаб был максимально увеличен и в тоже время все метки были видны (в границах карты)?
66. Головаченко Дима (Smaylukk) 16.09.13 09:46
(65), установка масштаба карты программно - Метод карты;
Навесить правильный масштаб при наполнении карты - сложновато. Т.е. тут надо высчитывать наибольшее расстояние между точками и для него подбирать оптимальный масштаб. Автомасштаб есть при построении маршрута.
67. Дмитрий (gosizo) 16.09.13 10:06
(66) в моем случае не вычерчивается маршрут а только выводятся метки на карту последовательно передавая параметры в функцию
	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;
    	}
...Показать Скрыть


в этом случае возможно применить автомасштаб ?
68. Головаченко Дима (Smaylukk) 16.09.13 10:18
(67), эта функция делает только то, что добавляет метки на карту. Маршрутом и не пахнет.
Вот моя функция, которая выводит маршрут на карту:
function calcRoute(options){
		ymaps.route(options, {
	        // Опции маршрутизатора
	        mapStateAutoApply: true, // автоматически позиционировать карту
	        avoidTrafficJams: true   // Учитывать пробки
	    }).then(
		    function (router) {
		    route = router;
		        myMap.geoObjects.add(route);
		        
                        //следующее можно пропустить, т.к. приводится лишь в контексте обработки
		        //заполняем и сохраняем инфо про маршрут
		        document.getElementById('RouteInfo').value = "Длина маршрута - " + route.getHumanLength() + ". Время - " + route.getHumanJamsTime();
		        
		        //генерация события для перехвата в 1С
		        var evt = document.createEventObject();
  				document.body.fireEvent('ondatasetcomplete', evt);
		    },
		    function (error) {
		        alert("Возникла ошибка: " + error.message);
	    });
	}
...Показать Скрыть

А в параметр options нужно передать массив точек в виде
[[ШиротаТочки1, ДолготаТочки1],[ШиротаТочки2, ДолготаТочки2],...[ШиротаТочкиn, ДолготаТочкиn]]

Но это все есть в обработке.
69. Евгений (Algiz) 23.10.13 18:03
Изучаю вашу обработку. При переносе ее на документ вываливается ошибка

Значение не является значением объектного типа (value)
Элементы.Эксплорер.document.getElementById("WebClientOperation").value = "Reset()";

Куда копать, что смотреть?
70. Головаченко Дима (Smaylukk) 23.10.13 21:53
(69) , судя по ошибке - у вас управляемые формы и что-то не то, с HTML - не все прогрузилось. Но информации маловато.
1. Внешняя обработка нормально под тонким клиентом запускается и работает?
2. Какую карту используете?
3. На какой операции возникает проблема?
71. Евгений (Algiz) 23.10.13 22:27
(70) 1с 8.3
Карта используется яндекса, перенесен функционал по работе с яндексом в свой модуль. Макет добавлен в общий. При построении маршрута вываливается эта ошибка :(
Если отключить "ОчисткаКарты()" то вываливается на этой строке
Элементы.Эксплорер.document.getElementById("WebClientOperation").value = "calcRoute(" + ПараметрыМаршрута + ")";
с такой же ошибкой. Получается ему почему-то не нравится "(value)"
72. Александр Зубцов (iov) 23.02.14 00:34
г. Санкт-Петербург, ул. Большая Морская, 23/12 на карте точка верно стоит - в таблице 2 строки
Большая Морская улица, 23, Санкт-Петербург, Россия, 190000
Большая Морская улица, 12, Санкт-Петербург, Россия, 190000
73. Головаченко Дима (Smaylukk) 23.02.14 13:42
(72) , Проверил :
Яндекс - показывает один результат геокодинга, т.е. все ОК.
Гугл - показывает две строки. Скорее всего он не обновил у себя данные по этому адресу.
Алгоритм геокодирования - отправляет строку адреса, получает массив результатов, выводит первую точку (т.к. она самая подходящая) и подписывает ее строкой поиска.
74. Головаченко Дима (Smaylukk) 26.02.14 01:20
Заметил, что при открытии Яндекс-карт выскакивает ошибка:

Эта ошибка связана с версией 2.0.35.
Поэтому, чтобы ее исправить надо в макете обработки "МакетЯндекс" изменить скрипт подключения карты с
<script src="http://api-maps.yandex.ru/2.0-stable/?load=package.full&lang=ru-RU"  type="text/javascript"></script>

на
<script src="http://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU"  type="text/javascript"></script>
76. Головаченко Дима (Smaylukk) 27.02.14 22:20
(74) , Все же поспешил. Желательно оставить подключение к стабильной версии API, а чтобы запретить всплывающее окно с ошибкой - просто подключить следующий скрипт:
<script type="text/javascript"> window.onerror = function(){ return true; };</script>
77. Stas Churkin (Stas-ch) 19.03.14 16:53
190068, Санкт-Петербург г, Лермонтовский пр-кт, дом № 30
По этому адресу выдает ошибку. Адрес взят из адресного классификатора.
Ошибка при попытке геокодировать по яндексу адрес: 190068, Санкт-Петербург г, Лермонтовский пр-кт, дом № 30
{Форма.ФормаУпр.Форма(123)}: Ошибка при вызове метода контекста (Получить): Ошибка работы с Интернет: Couldn't connect to server
Однако на карте все нормально отображается.
1С 8.2.19.83.
С интернетом вроде все нормально. (правда на работе пробовал - может тут безопасники что заблокировали....)
78. Stas Churkin (Stas-ch) 19.03.14 17:30
И еще вопрос - Перенес карту на отдельную страницу. т.е. карта не видна сразу, а ее можно глянуть, типа при необходимости. Набираю адрес, нажимаю найти и получаю сообщение:
{Форма.ФормаУпр.Форма(109)}: Значение не является значением объектного типа (value)
Элементы.Эксплорер.document.getElementById("WebClientOperation").value = "FindAdres(""" + Адрес + """);";
Можно это как-то побороть?
Или карта обязательно должна отображаться для работы с ней?
79. Головаченко Дима (Smaylukk) 19.03.14 17:39
(77), это ошибка с геокодингом. Он осуществляется по адресу "geocode-maps.yandex.ru".
Надо проверить, доступ по этому адресу. Также возможне временный сбой у Яндекса.
Но тем не менее, геокодинг сейчас работает.
80. Головаченко Дима (Smaylukk) 19.03.14 17:40
(78), эта ошибка из-за того, что не загрузился HTML. А он к сожалению загружается, когда поле HTML документа видно на форме.
81. Stas Churkin (Stas-ch) 20.03.14 11:03
(79) Smaylukk,
Да, действительно, адрес был заблокирован нашими доблестными сисадминами.
82. Stas Churkin (Stas-ch) 20.03.14 11:58
Кстати по двойному клику по адресу в верхней таблице Данные, получаем ошибку:
{Форма.ФормаУпр.Форма(273)}: Индекс находится за границами массива
Если ЗначениеЗаполнено(ТаблицаАдресов[ВыбраннаяСтрока].Широта) И ЗначениеЗаполнено(ТаблицаАдресов[ВыбраннаяСтрока].Долгота) Тогда

При этом параметр ВыбраннаяСтрока = 6 (а всего два адреса).
83. Головаченко Дима (Smaylukk) 20.03.14 13:32
(82), мало информации.
Какой адрес искали?
Какая карта?
84. Stas Churkin (Stas-ch) 21.03.14 11:47
карта Яндекс.
Для примера сейчас ввел в поиск Туристская. Вывелось несколько результатов поиска. стал кликать по разным строкам - на карте отображается найденная точка. Ввел в поиск Садовая. При клике на последней записи появляется такое же сообщение.
т.е. похоже при вводе второго адреса может появляться такая ошибка.
85. Stas Churkin (Stas-ch) 21.03.14 12:01
Экспериментирую с картой Яндекс. При выводе метки, расширяющейся по введенному тексту появился следующий глюк:



Не подскажете, с чем может быть связано?
Причем в браузере все нормально отображается! А в 1С - вот так, по кривому.
А еще не всплывают подсказки (hint) - это как-то можно вылечить?
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251" />
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
<script src="http://api-maps.yandex.ru/2.0-stable/?load=package.full&lang=ru-RU" type="text/javascript"></script> 
<script type="text/javascript">
		window.onerror = function(){ return true; }; // Убираем сообщение об ошибках
		ymaps.ready(init);
		var myMap; 
		function init(){ 
			myMap = new ymaps.Map ("map", {
				center: [59.93, 30.33],
				zoom: 12
			}); 

			myPlacemark0 = new ymaps.Placemark([59.917547, 30.297354], {
				iconContent: 'Плановые работы, обход.',hintContent: 'Плановые работы, обход.',
				balloonContent: 'Осмотр пожарных люков, насосов, руковов. Проверка доступности и работоспособности. '
			},{
		preset: 'twirl#greenStretchyIcon'
		});

			myPlacemark10 = new ymaps.Placemark([59.915607, 30.300983], {
				iconContent: 'Неисправность насоса',hintContent: 'Неисправность насоса',
				balloonContent: 'Важность высокая! Район запущен  на резервном насосе автомтикой. Подача воды ограничена.  Причины не изветсны. '
			},{
		preset: 'twirl#orangeStretchyIcon'
		});

			myPlacemark11 = new ymaps.Placemark([59.934483, 30.334867], {
				iconContent: 'Прорыв',hintContent: 'Прорыв',
				balloonContent: 'Прорыв трубы на адресе Санкт-Петербург, улица троицкий проспект, 8. Трубы надземного расположениея. Вода отключена местными коммунальными службами. диаметр трубы 0,4.'
			},{
		preset: 'twirl#orangeStretchyIcon'
		});

			myPlacemark13 = new ymaps.Placemark([59.967660, 30.287185], {
				iconContent: 'Проверка котла',hintContent: 'Проверка котла',
				balloonContent: 'Плановые работы по проверке работы котла коллекторной станции.'
			},{
		preset: 'twirl#greenStretchyIcon'
		});

			myMap.geoObjects.add(myPlacemark0);
			myMap.geoObjects.add(myPlacemark10);
			myMap.geoObjects.add(myPlacemark11);
			myMap.geoObjects.add(myPlacemark13);
	 		myMap.controls.add('zoomControl');
			myMap.controls.add('scaleLine');
  	 		myMap.controls.add('mapTools');
		}
	</script>
</head>
<body>
	<div id="map" style="width:100%;height:100%"></div>
</body>
</html>
...Показать Скрыть
86. Stas Churkin (Stas-ch) 24.03.14 13:24
(85) Stas-ch,
Проблема частично решилась. вдруг у кого будет такое же - надо в скрипте первой строкой прописать:
<!DO CTYPE html>


Но появилась другая проблема - при выводе карты она выводится по высоте в одну строку.

Если вместо
<div id=\"map\" st yle=\"width:100%;height:100%\"></div>
прописать
<div id=\"map\" st yle=\"width:800px;height:400px"></div>
То карта отрисовывается в указанном размере, но это не совсем интересно,т.к. не заполняет все пространство или наоборот вылезает за рамки.
87. Головаченко Дима (Smaylukk) 24.03.14 18:56
(85)(86), Нужно смотреть на эту строку
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
,
в частности на этот параметр
content="IE=EmulateIE7" >
.
У меня к примеру стоит IE=7
88. Головаченко Дима (Smaylukk) 24.03.14 19:23
(84), непонятное поведение платформы. Индексы строк не обнуляются пр очистки коллекции. В ближайшем будущем переделаю на ТекущиеДанные.
89. Egor platonov (platonov.e) 15.06.14 13:20
Ребят, а вот в обычных формах расчитывается длина маршрута, а в управляемых нет. Может кто то сделал расчет длины маршрута или знает как его сделать?)
90. Головаченко Дима (Smaylukk) 27.06.14 10:47
(89), расчет длины маршрута в толстом клиенте реализован с помощью событий ПоляHTMLДокумента. Сам метод построения маршрута у Яндекса или Гугла асинхронный - т.е. после вызова метода работа скрипта идет дальше, но после выполнения метода можно вызвать другой скрипт, который и генерирует событие у ПоляHTMLДокумента.
В тонком клиенте только 1 событие у ПоляHTMLДокумента - значит этот метод не сработает.
На одном из проектов подсчет маршрута сделал следующим образом - после построения маршрута в специальные inputы помещается информация о времени и длине маршрута. После этого в управляемой форме подключается обработчик ожидания, который постоянно считывает эти inputы на наличие значения. Если считало - выводит информацию на форму, а эти inputы очищает.
91. Андрей (andrey-st) 18.07.14 20:48
(90) Smaylukk,

"На одном из проектов подсчет маршрута сделал следующим образом - после построения маршрута в специальные inputы помещается информация о времени и длине маршрута. После этого в управляемой форме подключается обработчик ожидания, который постоянно считывает эти inputы на наличие значения. Если считало - выводит информацию на форму, а эти inputы очищает." А это можно где-нибудь посмотреть детальнее.
92. set5553 KUKA (set5553) 03.05.15 18:01
Как побороть в Гугл карте построение маршрутов до 10 точек?
93. Головаченко Дима (Smaylukk) 04.05.15 09:25
(92) set5553, да никак не побороть - это ограничение АПИ. Смотреть тут - https://developers.google.com/maps/documentation/javascript/directions#Waypoints.
Если купить Гугл карты для бизнеса - там будет 25 точек.
94. Александр Савостин (savostin.alex) 29.05.15 05:19
А как в УФ получить расстояние по рассчитанному маршруту?
95. Головаченко Дима (Smaylukk) 29.05.15 11:11
(94) savostin.alex, в УФ у ПоляHTMLДокумента очень мало событий. А особенность маршрутизатора Яндекса или Гугла в том, что они не возвращают эти данные - они выводят маршрут на карту и потом уже у маршрута можно получить нужную инфу.
После получения инфы - ее надо записать в специально созданный элемент на карте, а в УФ подключать обработчик ожидания, который будет опрашивать эти переменные на наличие инфы.
Так это сделано в этой обработке. Смотрите код формы и макет Яндекса или Гугла.
96. Юлия Пермякова (mishulasashula2005) 01.07.15 12:28
У меня ошибка вылетает при вводе адреса в поисковой строке "Адрес":

Ошибка разбора XML: - [6,8]
Фатальная ошибка:
Opening and ending tag mismatch: hr line 0 and body


Я так понимаю это происходит в момент:
ДокументДОМ = ПостроительDOM.Прочитать(ЧтениеXML);

Что-то не так с макетом?
97. Головаченко Дима (Smaylukk) 01.07.15 17:07
(96) mishulasashula2005, Если используется карта Яндекс - то нет.
Ошибка с геокодингом. Яндекс недавно перешел на https.
Вот такое попробуйте использовать в местах создания HTTPСоединения в процедуре "ПроизвестиГеокодинг_Яндекс()"
ssl = Новый ЗащищенноеСоединениеOpenSSL(
Новый СертификатКлиентаWindows(),
Новый СертификатыУдостоверяющихЦентровWindows());

Яндекс = Новый HTTPСоединение("geocode-maps.yandex.ru",,,,,,ssl);
Правда, не знаю с какой версии платформы это заработает. На 8.3.4.465 работает
ppirina; mishulasashula2005; +2 Ответить 3
98. Дмитрий Тарасов (tarassov) 01.07.15 17:20
(97) Smaylukk,
У меня сейчас с яндексом нормально коннектится конструкция
Новый HTTPСоединение(Сервер,,,,,, Новый ЗащищенноеСоединениеOpenSSL() )

не понимаю, что дает дополнительное вписывание
Новый ЗащищенноеСоединениеOpenSSL( Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows())
вместо примитивного Новый ЗащищенноеСоединениеOpenSSL()
Хотя совсем не исключаю, что какие-то неведомые мне тонкости могут существовать
Буду рад, если кто уточнит
mishulasashula2005; +1 Ответить
99. Юлия Пермякова (mishulasashula2005) 03.07.15 12:46
(97) Smaylukk, спасибо за помощь! заработало!

У меня еще один вопрос: при открытии формы с картой хочу передавать значение реквизита ТекАдрес, Назначаю после инициализации процедуру НайтиАдресНаКарте(ТекАдрес); (ту же, что и при изменении значения ТекАдрес), НО при изменении ТекАдреса строчка из кода
ЭлементыФормы.Эксплорер.Документ.parentWindow.eval("FindAdres(""" + Адрес + """);"); - срабатывает, а при открытии формы вылетает ошибка "Метод eval не существует"...
100. Дмитрий Тарасов (tarassov) 03.07.15 13:22
(99) mishulasashula2005,
а при открытии формы вылетает ошибка "Метод eval не существует"...
- Вероятно в этот момент com-объект, оберткой которого является в 1С ПолеHTMLДокумента, еще не сформирован, не активирован и соответственно его свойств и методов еще не существует