Проблема вызова JS функций из модуля формы была решена следующим образом:
Функция DOMWindow(Элемент)
Document = Элемент.Документ;
Если Document.parentWindow = Неопределено Тогда
Возврат Document.defaultView;
Иначе
Возврат Document.parentWindow;
КонецЕсли;
КонецФункции
Вызов функции определения адреса стал выглядеть вот так
DOMWindow(Элементы.Карта).GeocodeByAddress(Объект.Адрес);
В JS была следующая функция:
function GeocodeByAddress(address) {
geocoder.geocode({
'address': address
}, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
for (var i in results) {
Form1C.UpdateGeoCode(results[i].geometry.location.lat(), results[i].geometry.location.lng());
}
}
});
}
Функция GeocodeByAddress отрабатывает асинхронно и по мере выполнения вызывает процедуру UpdateGeoCode формы
В Форме следующая Процедура:
Процедура UpdateGeoCode(Lat, Lng)
//Что то сделать с координатами
КонецПроцедуры
И вот здесь я столкнулся с проблемой вызова Процедуры формы. Из за того что Поле HTML документа больше не OLE объект, форму никак не передать в контекст JS. (Можно передать простые типы)
Из- за отсутствия решения пришлось применять кривоватый метод:
Записывать результаты GeocodeByAddress во внутренние тэги поля HTML документа и опрашивать их с помощью ПодключитьОбработчикОжидания
Вот так стала выглядеть GeocodeByAddress
function GeocodeByAddress(address) {
document.getElementById('satus_location').innerHTML = "IN PROGRESS";
geocoder.geocode({
'address': address
}, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
for (var i in results) {
document.getElementById('CenterLat').innerHTML = results[i].geometry.location.lat();
document.getElementById('CenterLng').innerHTML = results[i].geometry.location.lng();
}
document.getElementById('satus_location').innerHTML = "READY";
} else {
document.getElementById('satus_location').innerHTML = "ERROR";
}
});
}
Все изложенное присутствует в обработке, реализованной на управляемой форме. Конфигурация базы не имеет значения, версия платформы 8.3. Был бы рад за советы по реализации Callback функций. Нигде не смог найти.
Для полноценной работы обработки требуется API ключ google, без него работает только установка маркера по координатам и координаты по маркеру. Ключ необходимо ввести в поле API Key (если ключ неверный то карта перестает функционировать совсем). Для получения координат по адресу необходимо набрать произвольный адрес и нажать кнопку Установить метку по адреу. Для установки метки по координатам указать вручную координаты и нажать кнопку Установить конпку по координатам
Обработка выполняет следующие действия с картой:
- Определение координат и установка маркера по адресу.
- Установка маркера по координатам
- Получение координат по двойному щелчку мыши на карте
Протестировано на платформах 8.3.12.1529, 8.3.16.1502