8.х Работа с картами Google в 1С

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Bonov, 14 май 2009.

  1. TopicStarter Overlay
    Bonov
    Offline

    Bonov

    Регистрация:
    9 апр 2009
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
    Заморочился данным вопросом, изучил Google Maps API и в итоге добавил в свою конфигурацию возможность отображения местоположения контрагентов на карте с возможностью поиска ближайшего.

    Описываю: добавлена новая форма, на которой имеется ПолеHTMLДокумента (HTMLDocField) и одна кнопка (ChangeMode) на панели инструментов помимо кнопки обновить.

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

    Код модуля формы во вложенном файле Посмотреть вложение 1984
    Обращаю внимание, что для правильной работы кода необходимо заменить строку GoogleMapsKey на ваш персональный ключ, полученный на странице http://code.google.com/intl/ru/apis/maps/signup.html

    Варианты открытия формы:

    1. Отображение одной точки с маркером в центре экрана. Только в этом случае появляется возможность редактирования (перемещения маркера), путем переключения режима кнопкой ChangeMode. Передается массив маркеров в котором только один элемент. В параметр SelectedBranch передается строка табличной части, где хранятся координаты, чтобы форма могла их изменить в случае редактирования. При нулевых координатах форма сразу открывается в режиме редактирования.
    Код:
    Markers = New ValueTable;
    Markers.Columns.Add("Latitude");
    Markers.Columns.Add("Longitude");
    Markers.Columns.Add("MarkerName");
    NewMarker = Markers.Add();
    NewMarker.Latitude = Branch.Latitude;
    NewMarker.Longitude = Branch.Longitude;
    NewMarker.MarkerName = Branch.BranchName;
    Frm = ThisObject.GetForm("LocationOnTheMap", ThisForm, Ref);
    Frm.Markers = Markers;
    Frm.SelectedBranch = Branch;
    If Branch.Latitude = 0 And Branch.Longitude = 0 Then
    Frm.Address = TrimAll("" + Country + " " + City);
    EndIf;
    Frm.Open();
    
    
    
    Посмотреть вложение 1985

    2. Отображение нескольких маркеров одновременно. Передается массив маркеров. Происходит автоматический подгон масштаба карты и выбор центра. Редактирование маркеров невозможно.
    Код:
    Frm = ThisObject.GetForm("LocationOnTheMap", ThisForm, Ref);
    Markers = Branches.Unload(,"Latitude,Longitude,BranchName");
    Markers.Columns.BranchName.Name = "MarkerName";
    Frm.Caption = Description + ". Location on the Map";
    Frm.Markers = Markers;
    Frm.Open();
    
    
    
    Посмотреть вложение 1986

    3. Режим поиска картой адреса, передаваемого в параметре Address и установка центра на него. Таже могут быть отображены и маркеры, передаваемые в массиве. причем размещение маркеров происходит динамически, в зависимости от масштаба карты. Используется мной при поиске ближайшего подрядчика. Адрес задается так, чтобы Google мог его найти. Мной используется указание страны и города, мне достаточно. Но можно и более точно указывать адрес.
    Посмотреть вложение 1987 Посмотреть вложение 1988

    Вложения:

    • Code.txt
      Размер файла:
      8,6 КБ
      Просмотров:
      357
    • 1.JPG
      1.JPG
      Размер файла:
      281,9 КБ
      Просмотров:
      228
    • 2.JPG
      2.JPG
      Размер файла:
      222,8 КБ
      Просмотров:
      206
    • 3.JPG
      3.JPG
      Размер файла:
      103,9 КБ
      Просмотров:
      161
    • 4.JPG
      4.JPG
      Размер файла:
      187,1 КБ
      Просмотров:
      154
  2. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Куда это применить в своей работе не знаю, но за идею, старания и проделанную работу зачет!
  3. TopicStarter Overlay
    Bonov
    Offline

    Bonov

    Регистрация:
    9 апр 2009
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
    Пожалуйста! Главное знать, что такая возможность есть, чтобы, когда понадобиться, знать, где посмотреть! ;)
    Но самое главное, что 1С позволяет полноценно работать практически со всеми Web-сервисами, что доказывает и этот пример, и пример с получением курсов с Oanda.com.
  4. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    У... Супер. Пасиб большое.
    Пока не надо, но идея может пригодиться (не только в 1Се)

Поделиться этой страницей