1с показать на карте

Обновлено: 06.07.2024

В основе повествования лежит Google Maps JavaScript API V3(все примеры работы с сервисом получены именно отсюда) и конечно платформа 1с: Предприятие 8.2. Компоненты 1с, используемые в примере, так же присутствуют в версии 8.1, так что с большой долей вероятности все нижеописанное будет работать и там.

Подробнее о Google.Maps
  • Использование Javascript-библиотеки на клиентской стороне, так называемое «Client-Side Geocoding». Этот способ Google позиционирует как основной.
  • Серверное использование, «Server-Side Geocoding». Этот способ предпочтителен для систем, где не происходит интерактивной работы с пользователем.
И немного про 1с

Мы будем использовать режим обычных форм, работающий в толстом клиенте 1с. К новомодному управляемому режиму работы с формами, появившемуся в версии 8.2 этот способ не подойдет без доработок.

Что конкретно мы сделаем:
  1. Создадим html-файл, содержащий javascript-функции для работы с картой
  2. Создадим внешнюю обработку для 1с, отображающую карту и имеющую контролы, позволяющие отображать метки, найденные по координатам или адресу
Итак, к делу:
1. Создаем файл html

Для работы с сервисом нам необходим файл, который будет содержать необходимые нам javascript-функции и будет открываться из 1с. Я не буду приводить его пример, поскольку за меня это сделали здесь: Здравствуй, мир!, а перейду к описанию.
Добавляем функции, которые при открытии html-документа получают координаты пункта «Москва» и инициализируют карту с автоматическим позиционированием на нем:
var map = null;
function initialize()
getLocation('Москва', function (results, status)
if (status == google.maps.GeocoderStatus.OK)
GoogleLocation = results[0].geometry.location;
initializeMap(GoogleLocation);
addMarkerForLocation(GoogleLocation.lat(), GoogleLocation.lng());//пример отображения метки по координатам
addMarkerForAddress('Москва Тушино');//пример отображения метки по адресу
> else alert('Координаты не определены');
>);
>

2. Создаем обработку в 1с

На форме обработки 1с добавляем контрол типа «ПолеHTMLДокумента»(назовем его «ПолеHTMLДок») — он будет отображать сформированный нами ранее файл html (назовем его google.html). На практике возможно использование так же ActiveX-объекта «Microsoft Web Browser», но, это по вкусу, особенно учитывая то, что использоваться будет в любом случае IE.
После того, как добавили поле HTML документа, нам необходимо сделать так, чтобы при открытии обработки автоматически открывалась карта. Для этого добавляем обработчик формы «ПриОткрытии», и добавляем в него: ЭлементыФормы.ПолеHTMLДок.Перейти(«c:\google\google.html»);
Этого достаточно, чтобы при запуске нашей внешней обработки в 1с автоматически открывался наш html-файл, в котором при загрузке страницы стартует функция Initialize(), заполняющая и центрирующая карту.
Если все ок, давайте добавим возможность добавления меток по событию в 1с:
Для этого добавим на форму текстовое поле ввода «Адрес», «Широта», «Долгота» и две кнопки — «Добавить метку по адресу» и «Добавить метку по координатам».
И конечно соответствующие кнопкам обработчики:
ЭлементыФормы.ПолеHTMLДок.Документ.parentWindow.eval("addMarkerForAddress('" + Адрес + "')");
ЭлементыФормы.ПолеHTMLДок.Документ.parentWindow.eval("addMarkerForLocation(" + Формат(Широта, "ЧГ=") + "," + Формат(Долгота, "ЧГ=") + ")");

Как вы уже поняли, оба обработчика при нажатии кнопок вызывают те функции Javascript, которые были заданы нами в html-файле и создают на карте отметки. Собственно, для первой версии этого уже более чем достаточно.

Несомненно, на практике этот способ можно улучшить — к примеру тем, что в 1с возможно вовсе обойтись без файла html, используя метод объекта ПолеHTMLДокумента.УстановитьТекст() — при этом код самой страницы возможно хранить в базе 1с в виде текста и не заморачиваться с поддержкой внешнего файла html.
Так же стоит подумать над тем, что Google ограничивает нас в количестве запросов на определение координат — 2500 запросов в сутки с одного ip. Логично было бы добавить хранение в базе наиболее используемых координат, что, кроме экономии запросов даст возможность дополнительного функционала в виде, к примеру, возможности отбирать и отображать нужные метки в пределах заданных географических координат относительно заданного центра.

Лучше использовать событие формы ПриСозданииНаСервере. Собственно оно и предназначено для того, чтобы полностью подготовить форму к открытию находясь еще на сервере.
Там будет доступен весь контекст формы, в том числе ее основной реквизит, от которого вы и получаете карту бизнес-процесса.
Единственное, что нужно предусмотреть - при создании нового элемента от его пустой ссылки нельзя получить объект и, соответственно, нельзя получить от объекта карту бизнес-процесса. Поэтому, если элемент новый, нужно получать карту бизнес-процесса от объекта метаданных.
Например так:
Код 1C v 8.2 УП

Разместил: E_Migachev  Версии: | 8.x | 8.2 УП |  Дата: 25.02.2013   Прочитано: 16442

Распечатать

Похожие FAQ

Google maps : вывод точек на карту и режим панорамы  7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Блокировка записей, невозможно изменить или удалить из регистра. Конфликт блокировок MS SQL + 1C  3
При попытке удалить запись из регистра сведений - получаю ошибку: она заблокирована, ошибка блокировок и т.д. Отключил всех пользователей, перезапустил сервер, пробую удалить - опять ошибка блокировки :( Путем тестов было вяснено, что проблема Добавление, перезапуск, оптимизация рабочих процессов сервера кластера  0
Добавление рабочего процесса Добавление рабочего процесса, в отличие от просмотра, возможно, только для конкретного сервера кластера. Для добавления нового рабочего процесса сервера кластера следует выбрать в дереве центральных серверов требуемый Использование Web-сервисов для синхронизации баз данных в режиме online 1с 8.х  11
Часто при ведении учета в различных конфигурациях 1с возникает необходимость выполнения обмена данных. Для решения этой задачи принято использовать Универсальный обмен данными XML или другие внешние обработки, общим у которых является использование Как загрузить Адресный классификатор (KLADR) в 1С 8.3 (УП или Такси)  2
В прошлой статье: Установка адресного классификатора (KLADR) в 1С я рассказал Вам что такое Кладр и как его загрузить в 1С обычные формы (8.0-8.2). В данной статье я расскажу как загрузить Адресный классификатор (KLADR) в управляемом интерфейсе и Посмотреть все результаты поиска похожих

Минутка откровений. Не кривя душой, открою завесу тайны, что я протёр своё кожаное кресло, ёрзая на нём, и думая, а стоит ли вообще писать это всё. Сомнения одолевали меня до последнего, но кто-то сидящий на правом плече всё же победил кого-то на левом. И вуаля, много букв перед вами. Сразу хочу признаться ещё кое в чём: главная цель написания данной статьи — в первую очередь удовлетворение своих личностных потребностей, амбиций, а, может, и пункта самореализации, которого до сих пор не хватало для завершения процесса достижения вершины эволюционной лестницы…

Минутка лирики. Мне необходима конструктивная (обожаю это слово! И оно во всём этом ключевое) критика профессионального сообщества, то есть вас. В противном случае у меня может начаться паранойя от навязчивых мыслей, что возможно где-то в этой жизни я свернул не туда…

Минутка лирики2 предыстории. Ничего не предвещало беды. Я, ковыряясь в носу одной рукой, и, юзая колёсико мышкой другой, неожиданно для себя и всего мироздания вдруг натыкаюсь на невероятно сладенькую вакансию Product Manager. Вытерев слюни (той рукой, что ковырялся) и трезво оценив, что мы созданы друг для друга, я естественно щёлк-щёлк посылаю на неё осмысленный отклик. Получил тестовое задание, выполнил, отправил. На этом история заканчивается.

В общем, если коротко, статья про сравнение геоинфосервисов, лидеров российского рынка.



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

Аудитории по каждому сценарию использования отличаются в зависимости от региона. Например, в Москве огромное количество организаций. Они открываются, закрываются, переезжают. Подавляющее число мест относятся к разряду «куда придется ехать всего один раз». Поэтому в системах, предоставляющих картографическую и справочную информацию, пользователи в Москве чаще пользуются навигацией, чем поиском услуги. В регионах ситуация обратная. Пользователи достаточно хорошо знают город и чаще ищут услуги, а не определенный адрес.

Для лучшего понимания основных сценариев использования я составил Use-case диаграмму:


Краткое описание. Данный вариант использования описывает поиск пользователем необходимого объекта на карте.
1. Основной поток событий.
Данный вариант использования начинает выполняться, когда пользователь хочет найти объект на карте.
Система запрашивает известную информацию об объекте.
Пользователь вводит информацию об объекте: название улицы, адрес, название микрорайона, название остановки общественного транспорта, маршрут общественного транспорта.
В момент ввода информации приложение выводит подсказки.
После ввода информации пользователь нажимает кнопку «Найти».
Система ищет данный объект на карте, после чего отображает его.
2. Альтернативные потоки
2.1. Информация об объекте не найдена. Если во время выполнения Основного потока обнаружится, что пользователь ввел информацию, которой нет в базе или по которой невозможно определить объект, система извещает об этом. Пользователь может вернуться к началу Основного потока или отказаться от поиска, при этом выполнение варианта использования завершается.
2.2. Пользователь воспользовался подсказкой. Если во время выполнения Основного потока обнаружится, что пользователь выбрал один из предложенных вариантов подсказки, система подставляет в поле ввода соответствующую информацию из подсказки. Пользователь может вернуться к началу Основного потока или продолжить поиск, для этого ему нужно нажать кнопку «Найти», при этом выполнение варианта использования продолжается.
3. Предусловия
Отсутствуют.
4. Постусловия
Если вариант использования выполнен успешно, пользователь видит на карте запрашиваемый объект. В противном случае состояние системы не изменяется. Краткое описание. Данный вариант использования позволяет пользователю найти подробную информацию о компании.
1. Основной поток событий
Данный вариант использования начинает выполняться, когда пользователь хочет найти информацию о компании.
Система запрашивает известную информацию о компании.
Пользователь вводит информацию о компании, такую как название компании, номер телефона.
В момент ввода информации приложение выводит подсказки.
После ввода информации пользователь нажимает кнопку «Найти».
Система ищет компанию по введенной информации, после чего отображает полную информацию о компании.
2. Альтернативные потоки
2.1. Информация о компании не найдена. Если во время выполнения Основного потока обнаружится, что пользователь ввел информацию, которой нет в базе или по которой невозможно определить компанию, система извещает об этом. Пользователь может вернуться к началу Основного потока или отказаться от поиска, при этом выполнение варианта использования завершается.
2.2. Пользователь воспользовался подсказкой. Если во время выполнения Основного потока обнаружится, что пользователь выбрал один из предложенных вариантов подсказки, система подставляет в поле ввода соответствующую информацию из подсказки. Пользователь может вернуться к началу Основного потока или продолжить поиск, для этого ему нужно нажать кнопку «Найти», при этом выполнение варианта использования продолжается.
3. Предусловия
Отсутствуют.
4. Постусловия
Если вариант использования выполнен успешно, пользователь видит подробную информацию о компании. В противном случае состояние системы не изменяется. Краткое описание. Данный вариант использования описывает поиск пользователем компании оказывающей необходимую услугу.
1. Основной поток событий.
Данный вариант использования начинает выполняться, когда пользователь хочет найти компанию, которая оказывает необходимую услугу.
Система предлагает выбрать услугу из справочника или ввести в поле поиска вручную.
Пользователь вводит информацию или выбирает из справочника.
В момент ввода информации приложение фильтрует справочник с учетом введенной пользователем информации.
После ввода информации пользователь нажимает кнопку «Найти».
Система выводит список организаций, оказывающих данную услугу.
2. Альтернативные потоки
2.1. Информация об услуге не найдена. Если во время выполнения Основного потока обнаружится, что пользователь ввел информацию, которой нет в базе или по которой невозможно определить компании, система извещает об этом. Пользователь может вернуться к началу Основного потока или отказаться от поиска, при этом выполнение варианта использования завершается.
3. Предусловия
Отсутствуют.
4. Постусловия
Если вариант использования выполнен успешно, пользователь видит список компаний, оказывающих запрашиваемую услугу. В противном случае состояние системы не изменяется. Краткое описание. Данный вариант использования позволяет пользователю составить маршрут.
1. Основной поток событий
Данный вариант использования начинает выполняться, когда пользователь хочет составить маршрут.
Система запрашивает начальную и конечную точку маршрута.
Пользователь вводит название остановки или указывает место на карте.
В момент ввода названия приложение выводит подсказки либо предлагает использовать текущее местоположение.
Система предлагает выбрать, как строить маршрут: «Составить маршрут на общественном транспорте», «Составить пеший маршрут», «Составить маршрут на автомобиле».
После ввода начальной и конечной точки пользователь нажимает кнопку «Построить маршрут».
Система строит маршрут, после чего отображает его.
2. Альтернативные потоки
2.1. Остановка не найдена. Если во время выполнения Основного потока обнаружится, что пользователь ввел название остановки, которой нет в базе, система извещает об этом. Пользователь может вернуться к началу Основного потока или отказаться от построения маршрута, при этом выполнение варианта использования завершается.
2.2. Пользователь воспользовался подсказкой. Если во время выполнения Основного потока обнаружится, что пользователь выбрал один из предложенных вариантов подсказки, система подставляет в поле ввода полное название компании. Пользователь может вернуться к началу Основного потока или продолжить поиск, для этого ему нужно нажать кнопку «Найти», при этом выполнение варианта использования продолжается.
2.3. Несколько маршрутов. Если во время Основного потока обнаружится, что система предложила несколько маршрутов, пользователь имеет возможность выбрать маршрут из предложенных, после чего система отобразит его на карте.
3. Предусловия
Отсутствуют.
4. Постусловия
Если вариант использования выполнен успешно, пользователь видит построенный маршрут. В противном случае состояние системы не изменяется.

2. Какие сервисы являются конкурентами COMPANY? В чем их сильные стороны, а в чем преимущества COMPANY? Каковы ключевые факторы успеха на этом рынке?

  1. Яндекс.Карты;
  2. 2ГИС;
  3. Google Maps.
  • Необходимый и достаточный функционал для осуществления полноценной городской навигации.
  • Наличие продуктов для разных мобильных платформ (обязательно iPhone и Android версии).
  • Интуитивный интерфейс, следование трендам в дизайне.
  • Доступ к актуальной справочной информации с постоянными обновлениями.
  • Возможность работать офлайн, желательно использовать для этого маленький объем памяти.

Для начала нужно определить тренды в этой области. Проанализировать куда движутся конкуренты. Например, для продукта COMPANY, обратить внимание на Конкурент1, который активно сейчас развивает проект Проект1. Необходимо планировать, что покажет Конкурент1 и Конкурент2 через 6-12 месяцев в своих продуктах. Сопоставить эти данные с целями компании, предположить к чему может привести ситуация, когда пути пересекутся. В таких регионах как Москва, Санкт-Петербург, COMPANY явно отстает от конкурентов, а значит необходимо их догнать. В свою очередь на платформе Windows Phone, Конкурент2 официально не представлен, а в Конкурент1 нет возможности использовать данный продукт офлайн.

Необходимо учитывать факторы быстрого развития телекоммуникационных технологий. Уже сейчас с мобильного можно смотреть панорамы. С развитием технологий, мобильники будут способны, к примеру, качественно воспроизводить видеоэкскурсии. Рост производительности «железа» и способности мобильных камер откроет новые границы для реализации идей дополненной реальности, интеграции специальных устройств, например, очков с трехмерным изображением. Для продукта COMPANY на платформе Windows Phone требуется обращать внимание на календарь развития данной платформы. Следить за новыми инструментами, фреймворками от Microsoft, которые предоставят доступ к использованию новых технических фич.

В общем случае нужно понимать, кто является целевой аудиторией. Все улучшения и изменения в системе не должны противоречить её интересам. Особенно полезными будут применение таких методик как когортный анализ. В случае COMPANY данный пункт наименее может быть полезен с учетом большой разнородности потенциальной аудитории. Развитие коммьюнити, площадки для обсуждения продукта, проведения опросов и общения между пользователями продукта. Прислушиваться и поощрять людей с энтузиазмом, проводить с ними ежеквартальные митинги, для получения обратной связи.

Думаю, задачи придумать новые возможности для продукта COMPANY нет. Запас фич для развития картографических и справочных сервисов достаточен и профессионалам из этой области хорошо известен. Развиваться в техническом плане можно как в ширину – добавлять новые фичи, так и в глубину – развивать существующие. Важным здесь является выбор тех самых фич, которые будут реализованы в течении 6-12 месяцев. Для этого стоит учесть ценность фичи, затраты по ресурсам, опыт конкурентов, желания пользователей. Выбор получается в результате обсуждения пула фич с командой. Конечное решение по реализации конкретной фичи всегда принимает продукт-менеджер, исходя из приведенных выше факторов и из своего собственного ощущения рынка. В данном случае я всегда беру ответственность на себя.

4. Приведите любые примеры удобного и неудобного интерфейса. Что в них самое удачное и самое неудачное?

При ответе на данный вопрос я прежде всего исходил из того, что нет смысла приводить «затертые» примеры хороших и плохих интерфейсов. Данные кейсы уже всем известны из Интернета и соответствующих книг по UI/UX. Поэтому приведу примеры из продуктов COMPANY и конкурентов. Например, в Google Maps (iPhone версии) в погоне за красотой и минимализмом, отсутствует возможность использования приложения одной рукой, что не соответствует сегодняшним мобильным тенденциям. В Яндекс.Картах и 2ГИС-е для функции приблизить/отдалить карту есть возможность включить специальные кнопки Приближения/Отдаления карты. Инструмент в первую очередь должен быть удобный, а не красивый.

Удачным считаю отображение предлагаемых маршрутов в Яндекс.Картах и 2ГИС (на платформе Windows Phone). Перед тем как выбрать маршрут, у пользователя есть возможность посмотреть его на карте.


В свою очередь, считаю неудачным интерфейс у 2ГИС (на платформах iPhone, Android) при переходе от результатов поиска к результатам поиска на карте («Показать на карте») и обратно. Создается иерархичная структура, на мой взгляд, ненужных вкладок, в которых легко можно заблудиться, а использовать их несколько раз чаще всего не приходится.

Внимание! Перед использованием обработки следует ознакомиться с здесь почитайте комментарии), либо предлагают решение с получением ключа карт. Во многих публикациях для отображения карт используется "Поле HTML документа" на форме 1С. Этот объект уже давно устарел и не поддерживает возможности HTML 5. В итоге, чтобы отобразить страницу на форме 1С приходится долго "плясать с бубном".

Программист, которому впервые дали задание вывести на карту точку будет тратить лишнее время и СтартМани на поиски лучшего варианта, корректировать реестр Windows, как предложено здесь и в итоге столкнётся с тем, что стабильного рабочего варианта найти не удастся.

Мы предлагаем вариант решения, который будет работать везде и без специальных условий. Мы принципиально не используем объект WebBrowser Control, чтобы всё работало всегда и у всех.

Пример 1. Метка на карте

Для добавления метки на карте достаточно знать её координаты.

Параметры для метки на карте

Результат нажатия на кнопку “Показать метку” будет таким:

Метка на карте

Как это работает?

Для кнопки “Показать метку” назначена процедура:

Функция для получения текста HTML:

Подсказки в коде

Все экспортные функции и процедуры обработки описаны вспомогательными комментариями, поэтому будет легко догадаться о назначении параметров.
Функция “ДобавитьМетку” добавляет на карту метку с описанием.
Если необходимо на одной карте показать сразу несколько меток, то функцию “ДобавитьМетку” нужно вызывать несколько раз.
Для отображения результата составленного текста HTML используется процедура “ПоказатьНаКартеНаКлиенте”.

При выполнении этой процедуры в первый раз - появится окно с выбором программы-браузера. После выбора - откроется окно с картой.

Пример 2: Маршрут на карте

Параметры для маршрута

Маршрут на карте

Процедура кнопки “Показать маршрут”:

Пример 3: Получение координат из адреса (геокодирование)

Не всегда в типовой базе 1С имеются данные о координатах пункта назначения. Но зато есть адрес, представленный стройкой. Иногда даже заполненный по всем правилам КЛАДР (ФИАС).
Для таких случаев имеется возможность преобразовать строку почтового адреса в координаты: долготу и широту.

Геокодирование

Функция “ПолучитьКоординатыПоАдресу” выполняет обращение к сервису геокодирования и разбирает ответ в структуру, содержащую координаты и адрес, для которого были определены координаты.

Пример 4. Расчет длины пути маршрута

Этот пример появился в версии 2.0 нашей обработки.

Эту задачу можно решить тремя способами.

Способ 1 - платный

и убрав директиву вначале текста страницы HTML

Расчёт длины маршрута

Длина маршрута записывается скриптом в отдельный тег <div> с идентификатором "dist", для того, чтобы потом было удобней парсить.

Отображение маршрута на карте не реализовано для повышения производительности. В этом примере карта вообще не нужна для отображения, поэтому в своих разработках вам придётся подумать как её скрыть. К сожалению, нерисовать карту нельзя. Длина не вычислится.

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

При получении точек маршрута web-сервис запишет их как входящее задание на вычисление, например, в свой регистр сведений. Клиент каждые m секунд будет опрашивать регистр сведений на получение новых заданий. При появлении таких - берет первое (самое старое) невыполненное задание и начинает рисовать карту на своей форме. После отрисовки - возвращает результат в регистр сведений.
Примерно так:

Комикс 1

Комикс 2

Комикс 3

Комикс 4

Комикс 5

Способ 3 - возможно, лучше всех

В предыдущем способе формируется текст страницы HTML для выполнения расчёта длины маршрута на клиенте средствами браузера. Этот текст можно попробовать использовать на сервере, применив COM-объект "AltBrowser.Browser". Применив методы простого парсинга можно получить значение из контейнера div и использовать в 1С.

Этот способ в данной статье не рассматривается.

Заключение

Все сложные операции с формированием текста HTML страницы карты и методами взаимодействия с сервисом Яндекс.Карты в нашей обработке имеют открытый код, который всегда можно доработать под свои нужды.

Обработка находится в составе конфигурации. Выложена целая конфигурация, так как в ней находится общая форма с примером использования обработки.

Читайте также: