Акмалов Артур

Объекты 1С на Яндекс Карты

Появилась необходимость объекты с 1С отобразить на карте, для наглядного отображения и удобства составления маршрута командировки. 

Для этих целей использовал Яндекс карты с связке с API

Подготовка

В песочнице нашел минимальный необходимый набор для отображения на карте с минимально необходимыми данными. Это два файла .js и .html

.html файл содержит API key который необходимо получить в кабинете разработчика. Сам код минимальный и статичный. 

<!DOCTYPE html>
<html>
<head>
<title>Тест карты</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&amp;apikey=XXXXXXXXXXX" type="text/javascript"></script>
<script src="DataMaps.js" type="text/javascript"></script>
<style> html, body, #map {width: 100%; height: 100%; padding: 0; margin: 0;} </style>
</head>
<body>
<div id="map"></div>
</body>
</html>
 

.json файл содержит все данные гео объектов, минимальный набор который мне необходим. (Здесь центрирование карты на Уфе и вывод метки на карте)

ymaps.ready(init);
function init() {var myMap = new ymaps.Map("map",{center: [54.73, 55.93], zoom: 9}, {searchControlProvider: 'yandex#search'});
myMap.geoObjects
.add(new ymaps.Placemark([54.73, 55.95], 
{hintContent: 'При наведении мышкой', 
balloonContentHeader: 'Шапка метки', 
balloonContent: 'Контент метки'},  
{preset: 'islands#icon', iconColor: 'red'}))
;}
 

Можно уже добавить данные в js файл и запускать html, теперь осталось научить заполнять .js средствами 1С

Для теста создал справочник с необходимыми параметрами (Наименование, статус, Работы, Координаты) и добавил кнопку «Показать на карте»

Файлы Яндекс.Карт (html и json) будут лежать в системной папке базы 1С.

Цель при нажатии на кнопку «Показать на карте» добавить с 1С в файл js в этой папке и запустить .html файл с помощью стандартного браузера

При нажатии кнопку открываю системный каталог базы (функция «КаталогИБ» и запускаю функцию «ДанныеОбъекты» для того чтобы пробежаться по справочнику и вытащить данные и вернуть результат. Затем закрываю синтаксис .json файла, сохраняю его и запускаю приложение .html) для открытия браузера. 

&НаКлиенте
Процедура Команда1(Команда)
	Каталог = КаталогИБ();
	Страница = ДанныеОъекты();
	Страница.ДобавитьСтроку(";}");
	Страница.Записать(Каталог+"DataMaps.js");
	
	Каталог = КаталогИБ();
	ЗапуститьПриложение(Каталог+"Maps.html",, Истина);
	
КонецПроцедуры
 

Функция КаталогИБ() для отображения системного пути к базе

&НаКлиенте
Функция КаталогИБ()
	  СтрокаСоединенияСБД = СтрокаСоединенияИнформационнойБазы();
	// в зависимости от того файловый это вариант БД или нет,  по-разному отображается путь в БД 
	ПозицияПоиска = Найти(Врег(СтрокаСоединенияСБД), "FILE=");
	Если ПозицияПоиска = 1 тогда
		// Файловая	
		Возврат Сред(СтрокаСоединенияСБД,7,СтрДлина(СтрокаСоединенияСБД)-8)+"\";
	Иначе 
		// Серверная - Используем КаталогВременныхФайлов() 
		Возврат КаталогВременныхФайлов();
	КонецЕсли;
	
КонецФункции
 

Основная Функция ДанныеОбъекты() тут я с нуля формирую .json файл и пробегаю по справочнику и вытаскивая необходимые параметры которые буду вставлять отдельной строкой для каждого объекта.

Так же реализовал метки по цветам в зависимости от Статуса Исполнения для более наглядного отображения на карте. 

&НаСервере
Функция ДанныеОъекты()
	Страница = Новый ТекстовыйДокумент;
	Страница.ДобавитьСтроку("ymaps.ready(init);");
	Страница.ДобавитьСтроку("function init() {var myMap = new ymaps.Map(""map"",{center: [54.73, 55.93], zoom: 9}, {searchControlProvider: 'yandex#search'});");
	Страница.ДобавитьСтроку("myMap.geoObjects");
	
		Запрос = Новый Запрос;
		Запрос.Текст =
		"ВЫБРАТЬ
		|	Объекты.Наименование КАК Наименование,
		|	Объекты.Широта КАК Широта,
		|	Объекты.Долгота КАК Долгота,
		|	Объекты.Работы КАК Работы,
		|	Объекты.Статус КАК Статус
		|ИЗ
		|	Справочник.Объекты КАК Объекты";
		
		Выборка = Запрос.Выполнить().Выбрать();
		
		Пока Выборка.Следующий() Цикл
		
	    Шапка = Выборка.Наименование;
		Наведение = Выборка.Статус;
		Контент = Выборка.Работы;
		Широта = Выборка.Широта;
		Долгота = Выборка.Долгота;
		Цвет = "red";
		Если Наведение = Перечисления.Статусы.Готов Тогда
			Цвет =  "green";
		ИначеЕсли Наведение = Перечисления.Статусы.Исполнение Тогда
			Цвет =  "orange";
		КонецЕсли;
			
		Страница.ДобавитьСтроку(".add(new ymaps.Placemark(["+Широта+", "+Долгота+"], {hintContent: '"+(Наведение)+"', balloonContentHeader: '"+(Шапка)+"', balloonContent: '"+(Контент)+"'},  {preset: 'islands#icon', iconColor: '"+(Цвет)+"'}))");	
		
		КонецЦикла;
	
	Возврат Страница;
	
КонецФункции
 

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

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

Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии