Геоточки и работа с ними

Материал из MediaWiki
Перейти к:навигация, поиск

Назад


Концепция

Для работы с геоточками используется API Google Для удобства в конфигурации создан справочник Географические точки, который содержит координаты географической точки и масштаб отображения карты. Кроме того геоточка может содержать почтовый адрес, который может быть получен с помощью Geocoding Google API.

Взаимодействие JavaScript, работающего в объекте ДокументHTML и 1С осуществляется двумя путями:

  • Вызов функций JavaScript из 1С осуществляется через свойство Документ, объекта ДокументHTML. Могут быть вызваны только методы, которые принадлежат непосредственно объекту window для IE, или DefaultView для браузеров, которые поддерживают международные стандарты.
  • Вызов Функций 1С из JavaScript осуществляется путем привязки к событию объекта ДокументHTML ПриНажатии. JavaScript генерирует событие onclick, которое передается в процедуру обработки данного события.

Для получения данных из JavaScript в теле страницы должен быть скрытый тег div с идентификатором VcVSoft_Exchange_Buffer. В текст этого тега 1С и JavaScript записывают объекты в JSON формате:

{"Обработчик":"Строка с именем события","Параметры": "Данные события"}

Примечание : поскольку Internet Explorer 11 не позволяет послать событие из JavaScript в 1С, в форме должна быть предусмотрена функция обработчик ожидания, которая вызывается раз в 1 сек., Читает буфер обмена 1С и страницы и выполняет команду, если таковая находится в буфере, после этого она удаляет команду из буфера

Перечень событий карты Google

На данный момент реализована передача в 1С следующих событий:

  • КликНаКарте
  • ДвойнойКликНаКарте
  • ЦентрКартыИзменен
  • КонецПеретаскиванияКарты
  • ПеретаскиваниеКарты
  • НачалоПеретаскиванияКарты
  • МасштабКартыИзменен
  • ГраницыКартыИзменены
  • РазмерКартыИзменен
  • МышьДвижется
  • МышьВнеКарты
  • МышьНадКартой
  • КликНаМаркере
  • ДвойнойКликНаМаркере
  • КонецПеретаскиванияМаркера

Во всех адекватных браузерах все события отрабатывают нормально кроме IE 11.
Для IE 11 не работает событие МасштабКартыИзменен обработку этого события необходимо перенести в ГраницыКартыИзменены

Добавление вызовов методов JavaScript

  1. Добавить обработчик в файл gmaps.js как метод объекта VcVSoftFormData. Например такой:

this.getMapTypeId = function () {

return setVcVSoftBuffer(VcVSoftData.map.getMapTypeId());

}
В данном примере используется глобальная переменная VcVSoftData, которая при загрузке страницы инициализируется объектом VcVSoftFormData

  • setVcVSoftBuffer - функция, которая записывает возвращаемое значение в буфер обмена между и JavaScript (о буфере см. выше)
  • map - свойство объекта VcVSoftFormData, которое содержит объект google.maps.Map.
  • getMapTypeId - метод гугловской карты, который возвращает тип назначенный карте
  1. Добавить обработчик в 1С в модуль КартыГуглаВСВ:

&НаКлиенте
Функция ПолучитьИдентификаторКарты(ЭлементКарты) Экспорт

ВызватьМетод(ЭлементКарты,"getCenter",Неопределено);
Возврат КлиентВСВ.ПрочитатьБуферОбменаJavaScript(ЭлементКарты);

КонецФункции

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

  • одним параметром:

this.setMapTypeId = function (params) {

return setVcVSoftBuffer(VcVSoftData.setMapTypeId(params));

}

&НаКлиенте
Функция УстановитьИдентификаторТипаКарты(ЭлементКарты,Ид) Экспорт

ВызватьМетод( ЭлементКарты,"setMapTypeId",Ид);

Возврат КлиентВСВ.ПрочитатьБуферОбменаJavaScript(ЭлементКарты);

КонецФункции

  • с двумя параметрами uuid и options
   	this.setMarkerOptions = function (params) {
if (VcVSoftData.markers[params.uuid] !== undefined) {
VcVSoftData.markers[params.uuid].setOptions(params.options);
}
return this;
};

&НаКлиенте
Функция УстановитьОпцииМаркера(ЭлементКарты, Знач ЗначениеУИД, Опции) Экспорт

Возврат ВызватьМетод(

ЭлементКарты,"setMarkerOptions",Новый Структура("uuid,options",ПолучитьУИД(ЗначениеУИД),Опции));
КонецФункции

Добавление событий

События - это способ вызова из JavaScript. Ниже приведен алгоритм добавления нового события в 1С конфигурацию.
Алгоритм добавления события мало отличается от вызова JavaScript из . Отличие состоит в том, что необходимо дописать событие в функцию общего модуля КартыГуглаВСВ. Ниже красным цветом выделено добавленное событие:

&НаКлиенте
Функция ОбработатьСобытиеИзJavaScript(ЭлементКарты, Результат) Экспорт

События = "КликНаКарте,ДвойнойКликНаКарте,ЦентрКартыИзменен,МасштабКартыИзменен,ОбработкаЗагрузкиКарты," +
"НачалоПеретаскиванияКарты,ПеретаскиваниеКарты,КонецПеретаскиванияКарты,РазмерКартыИзменен,ГраницыКартыИзменены" +
"КликНаМаркере,ДвойнойКликНаМаркере,КонецПеретаскиванияМаркера"+
"МышьДвижется,МышьВнеКарты,МышьНадКартой";


Если НЕ КлиентВСВ.ОбработатьСобытиеИзJavaScript(ЭлементКарты,Результат) Тогда
Результат = Новый Структура("Обработчик,Параметры",Неопределено,Неопределено);
Возврат Ложь;
КонецЕсли;
Если Результат.Обработчик <> "" И Результат.Обработчик <> Неопределено Тогда //не наше событие
Если Найти(ВРег(События),СокрЛП(ВРег(Результат.Обработчик))) > 0 Тогда
Возврат Истина;
КонецЕсли;
КонецЕсли;
Результат = Новый Структура("Обработчик,Параметры",Неопределено,Неопределено);
Возврат Ложь;

КонецФункции

Для более полной картины рекомендуется просмотреть исходный код функции ОбработатьСобытиеJavaScript() модуля формы элемента справочника ГеографическиеТочкиВСВ
Пример обработчика на JavaScript приведен ниже.

     this.map.addListener('rightclick',function(e){
   			call1c('КликНаКарте',{
   					'Широта':e.latLng.lat(),
   					'Долгота':e.latLng.lng()
  				});
  		return this;
   	});

Алгоритм добавления формы

Ниже будет рассмотрен алгоритм добавления формы, использующей карты Гугла.

Модуль формы (Обработчики событий и вспомогательные функции)

В модуле формы добавляем код:

&НаСервере
Процедура ПолучитьНастройкиКартыПоУмолчанию()
КартыГуглаВСВ.ПолучитьСохраненныеНастройкиКарты(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаЗагрузкиКарты(СобытияРазрешены=Ложь) Экспорт
Если НЕ КартаИнициализирована Тогда
КартаИнициализирована = КлиентВСВ.СтраницаИнициализирована(Элементы.Документ);
Если КартаИнициализирована Тогда
ПолучитьНастройкиКартыПоУмолчанию();
КартаИнициализирована = Истина;
КлиентВСВ.УстановитьСобытияHTMLДоступны(Элементы.Документ,СобытияРазрешены);
Если СобытияРазрешены Тогда
ОтключитьОбработчикОжидания("ОбработатьСостояниеКарты");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьСостояниеКарты() Экспорт
Если НЕ КартаИнициализирована Тогда
Если НЕ КлиентВСВ.ПолучитьСобытияHTMLДоступны(Элементы.Документ) Тогда
ОбработкаЗагрузкиКарты();
КонецЕсли;
ИначеЕсли НЕ КлиентВСВ.ПолучитьСобытияHTMLДоступны(Элементы.Документ) Тогда
ПараметрыБуфера = КартыГуглаВСВ.ПрочитатьПараметрыБуфераJavaScript(Элементы.Документ);
Если ТипЗнч(ПараметрыБуфера) = Тип("Структура") Тогда
ОбработатьСобытиеJavaScript();
КонецЕсли;
КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
КартыГуглаВСВ.ПриОткрытииФормы(ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьСобытиеJavaScript()
Перем ПараметрыВызова;
Если КартыГуглаВСВ.ОбработатьСобытиеИзJavaScript(Элементы.Документ,ПараметрыВызова) Тогда
Если ПараметрыВызова.Обработчик = "ОбработкаЗагрузкиКарты" Тогда
ОбработкаЗагрузкиКарты(Истина);
ИначеЕсли ПараметрыВызова.Обработчик = "КликНаКарте" Тогда
//Здесь необходимо добавить код обработки события
ИначеЕсли ПараметрыВызова.Обработчик = "ДвойнойКликНаКарте" Тогда
//Здесь необходимо добавить код обработки события
ИначеЕсли ПараметрыВызова.Обработчик = "КонецПеретаскиванияМаркера" Тогда
//Здесь необходимо добавить код обработки события
ИначеЕсли ПараметрыВызова.Обработчик = "МасштабКартыИзменен" Тогда
//Здесь необходимо добавить код обработки события
ИначеЕсли ПараметрыВызова.Обработчик = "ЦентрКартыИзменен" Тогда
//Здесь необходимо добавить код обработки события
ИначеЕсли ПараметрыВызова.Обработчик = "КонецПеретаскиванияКарты" Тогда
//Здесь необходимо добавить код обработки события
ИначеЕсли ПараметрыВызова.Обработчик = "МышьДвижется" Тогда
//Здесь необходимо добавить код обработки события
ИначеЕсли ПараметрыВызова.Обработчик = "КликНаМаркере" Тогда
//Здесь необходимо добавить код обработки события
КонецЕсли;
КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ДокументПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОбработатьСобытиеJavaScript();
КонецПроцедуры


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КартыГуглаВСВ.ПриСозданииНаСервере(ЭтаФорма,"ИМЯ СТРАНИЦЫ ОБРАБОТЧИКА",Отказ,СтандартнаяОбработка);
КонецПроцедуры

  • В процедуре ОбработатьСобытиеJavaScript() необходимо дописать код обработчиков событий карты
  • В процедуре ПриСозданииНаСервере() вместо "ИМЯ СТРАНИЦЫ ОБРАБОТЧИКА" необходимо указать имя страницы на сервере VcVSoft, которая содержит карту.
  • В редакторе диалогов необходимо назначить обработчики, которые уже прописаны.
    • Для формы: ПриОткрытии и при создании на сервере
    • Для поля ДокументHTML: ПриНажатии

Внимание!!! Не нужно создавать обработчики, они уже прописаны в коде

Обязательные реквизиты формы и элементы диалога

  • КартаИнициализирована
    • Реквизит формы КартаИнициализирована - Булево
  • Адрес
    • Реквизит формы Адрес - Строка 1024 символа
    • Элемент диалога Документ - ПолеHTMLДокумента

Необязательные реквизиты формы и элементы диалога

  • Широта
    • Реквизит формы Широта - число 19,16
    • Элемент диалога Широта - поле ввода
  • Долгота
    • Реквизит формы Долгота - число 19,16
    • Элемент диалога Долгота - поле ввода
  • Масштаб
    • Реквизит формы Масштаб - число 2,0 неотр.,
    • Элемент Диалога Масштаб - Поле ввода, имеет кнопки выпадающего списка и регулировки

API 1С к картам Google

Модули и функции JavaScript

На данный момент все библиотеки JavaScript лежат на сервере nas-test.vcvsoft.com.

Библиотеки

  • common Содержит набор функций для обеспечения работы 1С и JS
  • gmaps Содержит методы работы с картами Google

Точки входа

  • geopoint.html - содержит карту, которая показывается в форме элемента справочника Географические точки
  • geopoints.html - содержит карты, которая показывается в форме ПоказГеоточек справочника Географические точки

Назад