Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
30 янв 2025, 09:32

Отображение карт

Автор AlanW, 10 июн 2017, 13:27

0 Пользователей и 1 гость просматривают эту тему.

AlanW

В моей подсистеме должна отражаться карта с наиболее оптимальным маршрутом доставки товаров. В чем ошибка ?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"/>
<meta http-equiv="X-UA-Compatible" content="IE=10"/>


<script src="http://yandex.st/jquery/1.6.4/jquery.min.js" type="text/javascript"></script>

    <script src="http://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU"
            type="text/javascript"></script>
    <script type="text/javascript">
var myMap, route;


$( document ).ready(function() {

         function init () {
            myMap = new ymaps.Map("map", {
                    center: [107.6097900,51.8260500],
                    zoom: 12
                });       
          myMap.controls.add('zoomControl');


$('#search_route').submit(function () {               
/* var start = $("#start").val();
var end = $("#end").val(); */
           
            ymaps.route([
                   // Список точек, которые необходимо посетить
                   {Точки}], {
                // Опции маршрутизатора
                mapStateAutoApply: true, // автоматически позиционировать карту
            }).then(function (router) {
    route && myMap.geoObjects.remove(route);
route = router;
                myMap.geoObjects.add(route);
$("#resmarshrut").append('Общая длина маршрута: '+route.getHumanLength());
$("#resmarshrut").append('<br /> Время в пути: '+route.getHumanTime());
            }, function (error) {
                alert("Возникла ошибка: " + error.message);
            });
return false;
});

$('#search_route').trigger('submit');
}

// Как только будет загружен API и готов DOM, выполняем инициализацию
        ymaps.ready(init);
       
});
    </script>
</head>

<body>
<form id="search_route">
</form>
<br />
<div id="map" style="width:1400px;height:600px"></div>
<div id="resmarshrut"></div>
</body>

</html>

////////////////////////////////////////////////////////////////////////////////
// ПЕРЕМЕННЫЕ МОДУЛЯ

Перем мЦветТемноСерый;


////////////////////////////////////////////////////////////////////////////////
// ОБЩИЕ ПРОЦЕДУРЫ И ФУНКЦИИ

// Процедура обновляет подписи к элементу графической схемы типа "Действие".
//
// Параметры
//  ЭлементСхемы - элемент графической схемы.
//  ПараметрыТочекМаршрута - таблица значений с параметрами точек маршрута.
Процедура ОбновитьЭлементГрафическойСхемы(ЭлементСхемы, ПараметрыТочекМаршрута)

Если ТипЗнч(ЭлементСхемы) <> Тип("ЭлементГрафическойСхемыДействие") Тогда
Возврат;
КонецЕсли;

СтрокаПараметрыТочкиМаршрута = ПараметрыТочекМаршрута.Найти(ЭлементСхемы.Значение);
Если СтрокаПараметрыТочкиМаршрута <> Неопределено Тогда

Если Не СтрокаПараметрыТочкиМаршрута.Выполнять Тогда

ЭлементСхемы.Пояснение = "Не выполняется";
ЭлементСхемы.ЦветФона  = мЦветТемноСерый;
Иначе
//ЭлементСхемы.Пояснение = СокрЛП(СтрокаПараметрыТочкиМаршрута.ТочкаМаршрута.Пояснение);
КонецЕсли;
КонецЕсли;

КонецПроцедуры // ОбновитьЭлементГрафическойСхемы()

// Функция возвращает таблицу с параметрами точки маршрута бизнес-процесса.
//
// Параметры
//  Настройка - СправочникСсылка.НастройкиБизнесПроцессов, настройка для получения параметров.
//
Функция ПолучитьТаблицуПараметровТочкиМаршрута(Настройка)

Запрос = Новый Запрос(
"ВЫБРАТЬ
| Параметры.Выполнять,
| Параметры.ТочкаМаршрута
|ИЗ
| Справочник.НастройкиБизнесПроцессов.ПараметрыТочекМаршрута КАК Параметры
|ГДЕ
| Параметры.Ссылка = &Настройка");
Запрос.УстановитьПараметр("Настройка", Настройка);

ПараметрыТочекМаршрута = Запрос.Выполнить().Выгрузить();
ПараметрыТочекМаршрута.Индексы.Добавить("ТочкаМаршрута");

Возврат ПараметрыТочекМаршрута;

КонецФункции // ПолучитьТаблицуПараметровТочкиМаршрута()

// Процедура обновляет элементы графической схемы в соответствии с настройками бизнес-процесса.
//
Процедура ОбновитьЭлементыГрафическойСхемы()

Если Не (ЗначениеЗаполнено(БизнесПроцесс) И ЗначениеЗаполнено(БизнесПроцесс.Настройка)) Тогда
Возврат;
КонецЕсли;

ПараметрыТочекМаршрута = ПолучитьТаблицуПараметровТочкиМаршрута(БизнесПроцесс.Настройка);

Для Каждого ЭлементСхемы Из ЭлементыФормы.КартаМаршрута.ЭлементыГрафическойСхемы Цикл
ОбновитьЭлементГрафическойСхемы(ЭлементСхемы, ПараметрыТочекМаршрута);
КонецЦикла;

КонецПроцедуры // ОбновитьЭлементыГрафическойСхемы()

// Процедура обновляет графическую схему данными карты маршрута бизнес-процесса.
//
Процедура ОбновитьКартуМаршрута()

Если ЗначениеЗаполнено(БизнесПроцесс) Тогда

ЭлементыФормы.КартаМаршрута.УстановитьСхему(БизнесПроцесс.ПолучитьОбъект().ПолучитьКартуМаршрута());
ОбновитьЭлементыГрафическойСхемы();

ИначеЕсли БизнесПроцесс <> Неопределено Тогда

ЭлементыФормы.КартаМаршрута.УстановитьСхему(БизнесПроцессы[БизнесПроцесс.Метаданные().Имя].ПолучитьКартуМаршрута());

Иначе

ЭлементыФормы.КартаМаршрута.Очистить();

КонецЕсли;

КонецПроцедуры // ОбновитьКартуМаршрута()

// Процедура открывает список задач бизнес-процесса в точке маршрута.
//
// Параметры:
//  АктивныеЗадачи - булево, открывать только невыполненные задачи.
//
Процедура ОткрытьСписокЗадачТочкиМаршрута(АктивныеЗадачи = Ложь)

ТекЭлемент = ЭлементыФормы.КартаМаршрута.ТекущийЭлемент;

Если ТекЭлемент = Неопределено Или Не ЗначениеЗаполнено(БизнесПроцесс) Тогда
Возврат;
КонецЕсли;

Если Не (ТипЗнч(ТекЭлемент) = Тип("ЭлементГрафическойСхемыДействие")
Или ТипЗнч(ТекЭлемент) = Тип("ЭлементГрафическойСхемыВложенныйБизнесПроцесс")) Тогда
Возврат;
КонецЕсли;

ФормаСпискаЗадач = Задачи["ЗадачиПользователя"].ПолучитьФормуСписка();
ФормаСпискаЗадач.ЗадачаСписок.Отбор.БизнесПроцесс.Установить(БизнесПроцесс);
ФормаСпискаЗадач.ЗадачаСписок.Отбор.ТочкаМаршрута.Установить(ТекЭлемент.Значение);
Если АктивныеЗадачи Тогда
ФормаСпискаЗадач.ЗадачаСписок.Отбор.Выполнена.Установить(Ложь);
Иначе
ФормаСпискаЗадач.ЗадачаСписок.Отбор.Выполнена.Использование = Ложь;
КонецЕсли;
ФормаСпискаЗадач.Открыть();

КонецПроцедуры // ОткрытьСписокЗадачТочкиМаршрута()

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ДЕЙСТВИЯ КОМАНДНЫХ ПАНЕЛЕЙ ФОРМЫ
//

// Процедура обработчик действия элемента "ОткрытьСписокЗадач" панели "КоманднаяПанельДействияВТочкахМаршрута".
//
Процедура КоманднаяПанельДействияВТочкахМаршрутаОткрытьСписокЗадач(Кнопка)

ОткрытьСписокЗадачТочкиМаршрута();

КонецПроцедуры // КоманднаяПанельДействияВТочкахМаршрутаОткрытьСписокЗадач()

// Процедура обработчик действия элемента "ОткрытьСписокНевыполненныхЗадач" панели "КоманднаяПанельДействияВТочкахМаршрута".
//
Процедура КоманднаяПанельДействияВТочкахМаршрутаОткрытьСписокНевыполненныхЗадач(Кнопка)

ОткрытьСписокЗадачТочкиМаршрута(Истина);

КонецПроцедуры // КоманднаяПанельДействияВТочкахМаршрутаОткрытьСписокНевыполненныхЗадач()

// Процедура обработчик действия элемента "ОбновитьКарту" панели "КоманднаяПанель".
//
Процедура КоманднаяПанельОбновитьКарту(Кнопка)

ОбновитьКартуМаршрута();

КонецПроцедуры // КоманднаяПанельОбновитьКарту()

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ПОЛЕЙ ФОРМЫ
//

// Процедура обработчик события "ПриИзменении" поля БизнесПроцесс.
//
Процедура БизнесПроцессПриИзменении(Элемент)

ОбновитьКартуМаршрута()

КонецПроцедуры // БизнесПроцессПриИзменении()

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ

// Процедура - обработчик события "ПриОткрытии" формы.
//
Процедура ПриОткрытии()

ОбновитьКартуМаршрута();

Заголовок = Заголовок +" "+ Строка(БизнесПроцесс);

КонецПроцедуры // ПриОткрытии()

// Процедура - обработчик события "ПриПовторномОткрытии" формы.
//
Процедура ПриПовторномОткрытии(СтандартнаяОбработка)

ОбновитьКартуМаршрута();

КонецПроцедуры // ПриПовторномОткрытии()

////////////////////////////////////////////////////////////////////////////////
// БЕЗ ПРОЦЕДУР
//
мЦветТемноСерый = WebЦвета.ТемноСерый;





AlanW

Обработка РаботаСКартами
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=7">
    <style type="text/css">
  html { height: 100% }
  body { height: 100%; margin: 0px; padding: 0px }
  #map { height: 100% }
</style>
    <script src="http://api-maps.yandex.ru/2.0/?load=package.full&lang=ru-RU"  type="text/javascript"></script>
    <script src="http://yandex.st/jquery/1.6.4/jquery.min.js" type="text/javascript"></script>

    <script type="text/javascript">
var index = 1;
var MyMap, route;
var clusterer;
var PointArray = [];
var noclick = false;

ymaps.ready(init);
function init(){ 
myMap = new ymaps.Map ("map", {
center: [55.75, 37.62],
zoom: 12
});
myMap.behaviors.enable('scrollZoom');
myMap.behaviors.disable('dblClickZoom');
myMap.controls.add('mapTools');
myMap.controls.add('zoomControl');
myMap.controls.add('scaleLine');
myMap.controls.add('miniMap');
myMap.controls.add('trafficControl');

myMap.events.add('click', function (e) {
if (!noclick) {
addMarker(e.get('coordPosition'));

}else{
noclick = false;
}
});

myMap.events.add('drag end', function (e) {
noclick = true;
document.getElementById('CoordX').value = "0";
document.getElementById('CoordY').value = "0";
});

// создадим кластеризатор и запретим приближать карту при клике на кластеры
clusterer = new ymaps.Clusterer({clusterDisableClickZoom: true, synchAdd: true});
myMap.geoObjects.add(clusterer);
}

function addMarker(coordPosition){
myPlacemark = new ymaps.Placemark(coordPosition, {
// Свойства
// Текст метки
iconContent: 'Точка'+index
}, {
// Опции
// Иконка метки будет растягиваться под ее контент
preset: 'twirl#blueStretchyIcon'
});
myMap.geoObjects.add(myPlacemark);

document.getElementById('CoordX').value = coordPosition[0].toPrecision(15);
document.getElementById('CoordY').value = coordPosition[1].toPrecision(15);
index++;
}

function calcRoute(options){
ymaps.route(options, {
        // Опции маршрутизатора
        mapStateAutoApply: true, // автоматически позиционировать карту
        avoidTrafficJams: true   // Учитывать пробки
    }).then(
    function (router) {
    route = router;
        myMap.geoObjects.add(route);
       
        //заполняем и сохраняем инфо про маршрут
        document.getElementById('RouteInfo').value = "Длина маршрута - " + route.getHumanLength() + ". Время - " + route.getHumanJamsTime();
       
        //генерация события для перехвата в 1С
        var evt = document.createEventObject();
  document.body.fireEvent('ondatasetcomplete', evt);
    },
    function (error) {
        alert("Возникла ошибка: " + error.message);
    });
}

function Reset(){
// Найдём на карте геообъект по его id
myMap.geoObjects.each(function (geoObject) {
    myMap.geoObjects.remove(geoObject);
});

PointArray = [];
index = 1;
}

function FindAdres(Adres){
Reset();
var myGeocoder = ymaps.geocode(Adres);
myGeocoder.then(
function (res){
var firstGeoObject = res.geoObjects.get(0);
if(firstGeoObject != null){
myMap.panTo(
// Координаты нового центра карты
firstGeoObject.geometry.getCoordinates(), {
/* Опции перемещения:
   разрешить уменьшать и затем увеличивать зум
   карты при перемещении между точками
*/
flying: true
}
);

myPlacemark = new ymaps.Placemark(firstGeoObject.geometry.getCoordinates(), {
// Свойства
// Текст метки
iconContent: Adres
}, {
// Опции
// Иконка метки будет растягиваться под ее контент
preset: 'twirl#blueStretchyIcon'
});
myMap.geoObjects.add(myPlacemark);
}else{
alert("Ничего не найдено");}
}
);
}

function ReverseSearchAdres(CoordX, CoordY, Adres){
Reset();

var CoordPosition = [CoordX, CoordY];
myMap.panTo(
    // Координаты нового центра карты
    CoordPosition, {
        /* Опции перемещения:
           разрешить уменьшать и затем увеличивать зум
           карты при перемещении между точками
        */
        flying: true
    }
);

myPlacemark = new ymaps.Placemark(CoordPosition, {
// Свойства
// Текст метки
iconContent: Adres
}, {
// Опции
// Иконка метки будет растягиваться под ее контент
preset: 'twirl#blueStretchyIcon'
});
myMap.geoObjects.add(myPlacemark);
}

function addToPointArray(CoordX, CoordY, ID, Text){
var point = new ymaps.GeoObject({
    geometry: {type: "Point", coordinates: [CoordX, CoordY]},
    properties: {
        clusterCaption: ID,
        balloonContentBody: Text
    }
});
PointArray.push(point);
}

function drawCluster(){
clusterer.add(PointArray);
myMap.geoObjects.add(clusterer);
}

function createPolygon(ArrayPoint, Name, color) {
// Создаем многоугольник
        myPolygon = new ymaps.Polygon([
            // Координаты вершин внешней границы многоугольника.
            ArrayPoint
        ], {
            //Свойства
            hintContent: Name
        }, {
            // Опции.
            // Цвет заливки (зеленый)
            fillColor: color,
            // Цвет границ (синий)
            strokeColor: '#0000FF',
            // Прозрачность (полупрозрачная заливка)
            opacity: 0.6,
            // Ширина линии
            strokeWidth: 5,
            // Стиль линии
            strokeStyle: 'shortdash'
        });
           
        myMap.geoObjects.add(myPolygon);
    }
   
    function WebClientClick() {
    //очистка перед кликом координат, иначе после клика в упр. формах идет считывание координат
    document.getElementById('CoordX').value = "0";
document.getElementById('CoordY').value = "0";
   
    var WebClientOperation = document.getElementById("WebClientOperation").value;
//alert(WebClientOperation);
switch (WebClientOperation) {
        case "0":   // ничего не делаем
           var a = 1;
        default:   // запускаем функцию
            eval(WebClientOperation);
        }
        document.getElementById('WebClientOperation').value = "0";
}   
    </script>
</head>

<body>
    <div id="map" style="width:100%; height:100%"></div>
    <input type="hidden" id="CoordX" name="CoordX" value="0"></input>
    <input type="hidden" id="CoordY" name="CoordY" value="0"></input>
    <input type="hidden" id="RouteInfo" name="RouteInfo" value=""></input>
    <input type="hidden" id="WebClientOperation" name="WebClientOperation" value="0"></input>
    <input type="hidden" id="WebClient" name="WebClient" onclick="WebClientClick();"></input>
</body>
</html>

дфтын

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

Добавлено: 12 июн 2017, 00:29


Могу подсказать в 1С TMS реализован очень хороший код решения задачи комиваеджора

Теги:

Похожие темы (2)

Рейтинг@Mail.ru

Поиск