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

Обработки - Универсальные обработки

С каждым годом становится все очевидно, что использование онлайн-сервисов намного упрощает жизнь. К сожалению по картографическим сервисам условия пока жестковаты. Но, ориентируясь на будущее, я решил показать возможности 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
.epf 97,44Kb
26.02.16
2095
.epf 97,44Kb 2095 Скачать

См. также

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

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

(6) Советую посмотреть и мою разработку. Там несколько простых примеров, с которых можно начинать, авось пригодится.
10. Головаченко Дима (Smaylukk) 539 05.01.13 22:50 Сейчас в теме
(9), а то думал, что что-то серьезное. Eval я использую для запуска операций (маршрутизация, отображение на карте маркера с координатами, поиск адреса по строке). С получением координат установленного маркера на карте я перемудрил, признаю. Можно и через значение GetElemenetByID() получить.
Про геокодирование- не знаю, что это означает для вас, но в моей разработке на карте отображается первый найденный (и наиболее точный) адрес через геокодирование внутреннее, а в таблицу , которая слева верхняя, попадают адреса, найденные через HTTP-геокодер.
11. Владимир Лагутин (Lukich66) 79 06.01.13 09:22 Сейчас в теме
(9) Yashazz,добрый день. а я и посмотрел(только внешне,об этом и писал), но когда увидел "боян" кнопок( добавить метку ,удалить метку и т.д.)желания посмотреть "внутренности" не возникло. Года 4-5 назад сделал робкую попытку окунуться в мир html- получил такое разочарование от "убогости" доступных ресурсов( типа на бейсике-89г написать бухгалтерию предприятия),но с.б. появилась быстро прогрессирующая 8-ка на ней и "женился".
12. Макс Зеленский (mzelensky) 53 07.01.13 10:16 Сейчас в теме
13. Яков Коган (Yashazz) 2119 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) 539 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) 539 10.01.13 10:56 Сейчас в теме
(17), ПроизвестиГеокодинг можно и перевести, но ПолучитьЦвет не выйдет - ГенераторСлучайныхЧисел не работает в ВебКлиенте.
20. naus (Danil.Potapov) 10.01.13 11:00 Сейчас в теме
(19) тогда насерверебезконтекста
21. Головаченко Дима (Smaylukk) 539 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) 539 10.01.13 11:07 Сейчас в теме
(18), у меня не исчез баг. Если открыть форму с картой Яндекса, закрыть и повторно открыть - баг остается.
Но перевод функций геокодинга на клиент уместен.
Такое наблюдал, когда в толстом клиенте или в 8.1 передавал текст HTML-полю, в котором подгружались файлы скриптов или стиля, через метод УстановитьТекст(). Поэтому приходится изворачиваться - сохранять в файл и метод Перейти()
25. Головаченко Дима (Smaylukk) 539 10.01.13 11:09 Сейчас в теме
(23), тоже 8.2.17.143
mephistofel; mandarinkaalekseevna; +2 Ответить 1
26. Головаченко Дима (Smaylukk) 539 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) 539 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) 338 10.01.13 15:24 Сейчас в теме
Скачал пробую добавить несколько точек - не получается.
Как вообще это проверить все?
36. Головаченко Дима (Smaylukk) 539 10.01.13 19:56 Сейчас в теме
(35), открываете стартовое окно
выбраете поставщка услуг (клик по логотипу)
появляется карта - вот по ней либо клик, либо двойной клик.
37. Михаил Журавлев (Gmix) 338 11.01.13 10:07 Сейчас в теме
(36) Smaylukk, На скринах в ТЧ адреса видно несколько адресов.
Как это сделать? посмотрел код. При вводе адреса в верхнее поле ТЧ Адреса очищается.
Не понятно зачем она тогда.
Я так понимал я ввожу несколько адресов и обработка геокодирует адрес и добавляет его в ТЧ.
Посмотрев код понял что ожидал другое поведение от этой обработки.
За обработку Спасибо.
38. Головаченко Дима (Smaylukk) 539 12.01.13 20:09 Сейчас в теме
(37), "несколько адресов в ТЧ адерсов" - это следствия геокодинга, который запускается при изменении адреса. Перед этим нужно очистить результат предыдущего геокодинга.
39. Павел Шилкин (ReLock) 29 14.01.13 11:28 Сейчас в теме
А у меня почему-то вообще открывается не ФормаОсновная, а ФормаОсновнаяУпр, т.к. на форме нет 2GIS. И не важно, в каком режиме я запускаю программу (толстый, тонкий). Пробовал поменять формы местами - 0. Почему так?
40. Головаченко Дима (Smaylukk) 539 14.01.13 12:10 Сейчас в теме
(39), возможно вы запускаете 1С в режиме "Толстый клиент управляемое приложение"?
Во всяком случае, у меня такой проблемы не было.
Если не получится - напишите номер версии 1С и конфигурацию, в которой запускаете (если не самописная).
41. Павел Шилкин (ReLock) 29 14.01.13 12:32 Сейчас в теме
Спасибо! Запустил в толстом клиенте (обычное приложение)! 2GIS появился!
42. Павел Шилкин (ReLock) 29 14.01.13 12:35 Сейчас в теме
(40) Smaylukk, А почему 2GIS работает только в этом режиме (ТК ОП)?
43. Головаченко Дима (Smaylukk) 539 14.01.13 12:57 Сейчас в теме
(42), я описал в обновлении к публикации. 1С быстрее отрабатывает клик по карте, чем прикрепленное событие в JS. Проще говоря - нельзя корректно считать координаты метки для 2ГИС. Остается только поиск адреса. Остальной функционал тоже отсутствует. Поэтому решил с ним в тонком клиенте не заморачиваться.
44. Алексей (kanalya) 110 15.01.13 12:29 Сейчас в теме
А как снова отобразить точки на карте после очистки карты?
45. Головаченко Дима (Smaylukk) 539 15.01.13 12:32 Сейчас в теме
(44), просто точки уже не отобразить - можно вывести кластера, построить маршрут или полигон.
Но вы можете и сами программно (если умеете) доделать - по аналогии с верхней таблицей Адресов. Там при выборе адреса - выводится точка, только с предварительной очисткой карты.
46. Алексей (kanalya) 110 15.01.13 12:37 Сейчас в теме
47. MIK В (mikukrnet) 98 22.01.13 17:41 Сейчас в теме
А почему такие точки в яндексе странные? Вот эта запатентованная (by Apple) скругленная рамочка - это точка )

48. Головаченко Дима (Smaylukk) 539 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) 122 22.01.13 20:20 Сейчас в теме
Хорошая статья! Как раз нужный мне материал, но есть вопросы.
1. Карты - это типа показухи, предназначено для демонстрации готовой конфигурации?
2. Какие карты лучше подойдут для обозначения транзитных складов, а так же показать линии маршрута?
3. Кроме обработки, как ещё можно "внедрить" карты в конфигурацию? Или оно не внедряется внутрь, а чисто внешним файлом или внешним отчетом для демонстрации возможностей?
50. Головаченко Дима (Smaylukk) 539 22.01.13 21:08 Сейчас в теме
(49), в обработке я захотел собрать воедино работу с несколькими картографическими сервисами, у которых есть более-менее приемлемые карты стран СНГ. На сайте есть похожие обработки, но они заточены чисто под один сервис. Ну и наконец делалось это чисто для прокачки опыта.
По-этому это просто обработка - демонстрация возможностей работы из 1С с подобного рода сервисами. Конфигурации нет.
Мне из представленных 4 больше всего понравился Яндекс - хорошая детализация, русский/украинский язык, большая территория.
Напомню, что из перечисленных карт в 1С можно встроить только Гугл, при условии, что у вас есть бизнес-аккаунт.
Ну а внедрение:
  • Берете понравившийся макет.
  • Добавляете его в общие макеты или в нужный объект.
  • Настраиваете формы, по аналогии с формой обработки.
  • Программно привязываете к нужным справочникам/документам, для поиска адресов, координат, составления маршрутов.
51. Елена Пименова (Bukaska) 122 22.01.13 21:30 Сейчас в теме
(50) Smaylukk, А Как добавить карту в нужный объект? Об этом где-нить написано?
52. Владимир Каракозов (karakozov) 24.01.13 09:54 Сейчас в теме
Видел уже несколько примеров взаимодействия с АПИ поставщиков карт, очень интересная концепция, но более интересно реально прикладное внедрение, которое не просто умерло по средствам пользователей, а функционирует и используется (не в транспортных компаниях например). Можно предположить что в логистике это очень полезно.Но есть ли иные реализации задач по средствам карт API.
53. Головаченко Дима (Smaylukk) 539 24.01.13 10:48 Сейчас в теме
(52), отвязать карты от транспорта очень сложно. Но к примеру владельцы торговых или некоммерческих точек, которые разбросаны по городу или стране могут с помощью карт обозначит их для более удобного поиска.
54. Дмитрий Жиляков (Zhilyakovdr) 80 25.03.13 09:43 Сейчас в теме
Ни кто не задавался целью написать решение задачи коммивояжера с использованием данных карт? Это могло бы очень упростить работу логиста...
55. Александр Ульянов (Aleks1973) 25.03.13 10:02 Сейчас в теме
(54) В Москве такого решения - для произвольного маршрута - не существует. Тема была ещё на 77
56. Дмитрий Жиляков (Zhilyakovdr) 80 25.03.13 10:53 Сейчас в теме
(55) В смысле не существует? На сколько я знаю у тех же яндекс карт есть прокладка маршрута от точки А к точке Б, разве нельзя получить матрицу расстояний между всеми точками потом просчитать задачу коммивояжера по этой матрице и с помощью апи нарисовать маршрут? Я реализовывал похожую задачу, но без расчета оптимального пути((( Если у кого то есть функция решения задачи коммивояжера, то можем попробовать написать такую обработку.
57. 1module (pridecom) 13.05.13 07:59 Сейчас в теме
Спасибо за обработку.
А как рекомендуется передавать параметры в обработку с адресом, который будет отображаться при открытии?
Например, нужно отображение адреса клиента, на карточке которого в УТ 11 планируем добавить кнопку с отображением карты (Яндекс).
В коде данный параметр отсутствует, да и его организация не совсем понятна...
58. Головаченко Дима (Smaylukk) 539 13.05.13 08:45 Сейчас в теме
(57) ,Спасибо за отзыв.
В макете Яндекса есть две процедуры:
  • 1 FindAdres(Adres) - ищет адрес по текстовому представлению с помощью геокодера Яндекса и отображает первый найденный.
  • 2 ReverseSearchAdres(CoordX, CoordY, Adres) - устанавливает маркер на карте по переданным координатам.
Вызов этих процедур осуществляется с помощью метода - ЭлементыФормы.Эксплорер.Документ.parentWindow.eval("FindAdres(""" + ВашАдрес + """);");
или
ЭлементыФормы.Эксплорер.Документ.parentWindow.eval("ReverseSearchAdres(" + Широта + "," + Долгота + ", """ + ВашАдрес + """);");
59. Степан S (Ed111111) 11 15.05.13 18:12 Сейчас в теме
Обязательно скачаю. Это самое лучшее, что я мог себе представить. Если мне разрешат этой обработкой пользоваться на работе - мне вообще ничего почти не надо будет делать почти. Работы станет процентов на 70 меньше)))
60. 1module (pridecom) 28.05.13 10:45 Сейчас в теме
Еще один вопросик
На скриншоте Яндекс.Карт отражено несколько адресов сразу на карте
В самой обработке непонятно, каким образом отображать сразу несколько адресов.
Строка поиска только для заполнения одного адреса или нет?
61. Головаченко Дима (Smaylukk) 539 28.05.13 11:47 Сейчас в теме
(60), после заполнения строки поиска запускается механизм геокодинга Яндекса (в данном случае) и в таблицу адресов заполняется все найденные адреса, а на карту выводится по координатам первый адрес, с предварительной очисткой карты. Т.е. всегда один адрес отобразится в данном случае.
На втором скриншоте, где несколько маркеров отображено, маркеры на карту добавляются вручную и поэтому их там несколько.
А теперь ответ на вопрос:
1. Методы отображения адреса на карте всегда покажут один маркер, поскольку там встроен метод очистки.
2. Метода отображения маркера исполняются без принудительной очистки и их можно выводить сколько угодно.
62. Сергей Ожерельев (Поручик) 3624 22.06.13 14:46 Сейчас в теме
Проект «Рамблер-Карты» закрыт
63. @lex alexeew (@lex) 75 11.07.13 09:03 Сейчас в теме
Хорошие примеры :) Еще бы сохранение маршрута в нужном масштабе сделать...
64. Вадим Кушнер (Foma4382) 08.08.13 23:30 Сейчас в теме
Хороший примерчик. Спасибо!
65. Дмитрий (gosizo) 26 16.09.13 09:10 Сейчас в теме
Яндекс карта. допустим я поставил несколько меток, можно ли как-то смасштабировать карту (не руками, а программно), что бы масштаб был максимально увеличен и в тоже время все метки были видны (в границах карты)?
66. Головаченко Дима (Smaylukk) 539 16.09.13 09:46 Сейчас в теме
(65), установка масштаба карты программно - Метод карты;
Навесить правильный масштаб при наполнении карты - сложновато. Т.е. тут надо высчитывать наибольшее расстояние между точками и для него подбирать оптимальный масштаб. Автомасштаб есть при построении маршрута.
67. Дмитрий (gosizo) 26 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) 539 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) 539 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) 363 23.02.14 00:34 Сейчас в теме
г. Санкт-Петербург, ул. Большая Морская, 23/12 на карте точка верно стоит - в таблице 2 строки
Большая Морская улица, 23, Санкт-Петербург, Россия, 190000
Большая Морская улица, 12, Санкт-Петербург, Россия, 190000
73. Головаченко Дима (Smaylukk) 539 23.02.14 13:42 Сейчас в теме
(72) , Проверил :
Яндекс - показывает один результат геокодинга, т.е. все ОК.
Гугл - показывает две строки. Скорее всего он не обновил у себя данные по этому адресу.
Алгоритм геокодирования - отправляет строку адреса, получает массив результатов, выводит первую точку (т.к. она самая подходящая) и подписывает ее строкой поиска.
74. Головаченко Дима (Smaylukk) 539 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) 539 27.02.14 22:20 Сейчас в теме
(74) , Все же поспешил. Желательно оставить подключение к стабильной версии API, а чтобы запретить всплывающее окно с ошибкой - просто подключить следующий скрипт:
<script type="text/javascript"> window.onerror = function(){ return true; };</script>
77. Stas Churkin (Stas-ch) 18 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) 18 19.03.14 17:30 Сейчас в теме
И еще вопрос - Перенес карту на отдельную страницу. т.е. карта не видна сразу, а ее можно глянуть, типа при необходимости. Набираю адрес, нажимаю найти и получаю сообщение:
{Форма.ФормаУпр.Форма(109)}: Значение не является значением объектного типа (value)
Элементы.Эксплорер.document.getElementById("WebClientOperation").value = "FindAdres(""" + Адрес + """);";
Можно это как-то побороть?
Или карта обязательно должна отображаться для работы с ней?
79. Головаченко Дима (Smaylukk) 539 19.03.14 17:39 Сейчас в теме
(77), это ошибка с геокодингом. Он осуществляется по адресу "geocode-maps.yandex.ru".
Надо проверить, доступ по этому адресу. Также возможне временный сбой у Яндекса.
Но тем не менее, геокодинг сейчас работает.
80. Головаченко Дима (Smaylukk) 539 19.03.14 17:40 Сейчас в теме
(78), эта ошибка из-за того, что не загрузился HTML. А он к сожалению загружается, когда поле HTML документа видно на форме.
81. Stas Churkin (Stas-ch) 18 20.03.14 11:03 Сейчас в теме
(79) Smaylukk,
Да, действительно, адрес был заблокирован нашими доблестными сисадминами.
82. Stas Churkin (Stas-ch) 18 20.03.14 11:58 Сейчас в теме
Кстати по двойному клику по адресу в верхней таблице Данные, получаем ошибку:
{Форма.ФормаУпр.Форма(273)}: Индекс находится за границами массива
Если ЗначениеЗаполнено(ТаблицаАдресов[ВыбраннаяСтрока].Широта) И ЗначениеЗаполнено(ТаблицаАдресов[ВыбраннаяСтрока].Долгота) Тогда

При этом параметр ВыбраннаяСтрока = 6 (а всего два адреса).
83. Головаченко Дима (Smaylukk) 539 20.03.14 13:32 Сейчас в теме
(82), мало информации.
Какой адрес искали?
Какая карта?
84. Stas Churkin (Stas-ch) 18 21.03.14 11:47 Сейчас в теме
карта Яндекс.
Для примера сейчас ввел в поиск Туристская. Вывелось несколько результатов поиска. стал кликать по разным строкам - на карте отображается найденная точка. Ввел в поиск Садовая. При клике на последней записи появляется такое же сообщение.
т.е. похоже при вводе второго адреса может появляться такая ошибка.
85. Stas Churkin (Stas-ch) 18 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) 18 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) 539 24.03.14 18:56 Сейчас в теме
(85)(86), Нужно смотреть на эту строку
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" >
,
в частности на этот параметр
content="IE=EmulateIE7" >
.
У меня к примеру стоит IE=7
88. Головаченко Дима (Smaylukk) 539 24.03.14 19:23 Сейчас в теме
(84), непонятное поведение платформы. Индексы строк не обнуляются пр очистки коллекции. В ближайшем будущем переделаю на ТекущиеДанные.
89. Egor platonov (platonov.e) 15.06.14 13:20 Сейчас в теме
Ребят, а вот в обычных формах расчитывается длина маршрута, а в управляемых нет. Может кто то сделал расчет длины маршрута или знает как его сделать?)
90. Головаченко Дима (Smaylukk) 539 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) 03.05.15 18:01 Сейчас в теме
Как побороть в Гугл карте построение маршрутов до 10 точек?
93. Головаченко Дима (Smaylukk) 539 04.05.15 09:25 Сейчас в теме
(92) set5553, да никак не побороть - это ограничение АПИ. Смотреть тут - https://developers.google.com/maps/documentation/javascript/directions#Waypoints.
Если купить Гугл карты для бизнеса - там будет 25 точек.
94. Александр Савостин (savostin.alex) 19 29.05.15 05:19 Сейчас в теме
А как в УФ получить расстояние по рассчитанному маршруту?
95. Головаченко Дима (Smaylukk) 539 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) 539 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) 81 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) 81 03.07.15 13:22 Сейчас в теме
(99) mishulasashula2005,
а при открытии формы вылетает ошибка "Метод eval не существует"...
- Вероятно в этот момент com-объект, оберткой которого является в 1С ПолеHTMLДокумента, еще не сформирован, не активирован и соответственно его свойств и методов еще не существует
Оставьте свое сообщение