|   |   | 
| 
 | Запуск из 1с js скрипта и получение обратно в 1с результата выполнения. | ☑ | ||
|---|---|---|---|---|
| 0
    
        EvgKolivagin 06.06.22✎ 16:54 | 
        Добрый день!
 Есть api яндекс карт. С помощью этого api я получаю маршрут пешехода поделенный на отрезки между заданными точками. Как мне вернуть данные этого маршрута в 1с? Т.е. есть некая серверная процедура в 1с она должна инициировать построение маршрута через api яндекс, а потом результат построения этого маршрута должн вернуться в эту серверную процедуру, где далее должен быть обработан. Как это возможно сделать? Если это вообще возможно... | |||
| 1
    
        Asmody 06.06.22✎ 16:56 | 
        казалось бы, при чем тут js?     | |||
| 2
    
        Asmody 06.06.22✎ 16:57 | 
        В 1С для обращения к всяким веб api есть HTTPСоединение и Ко     | |||
| 3
    
        Выпрь 06.06.22✎ 17:00 | 
        А зачем на сервере маршрут строить? В самой задаче маршрутизации главное не маршрут построить, а заказы поделить на рейсы. У Яндекса кстати есть маршрутизация. Не дёшево конечно | |||
| 4
    
        EvgKolivagin 06.06.22✎ 17:00 | 
        (2) Да есть, но обращаясь таким способом я получаю с помощью GET запроса текст html страницы скрипт при этом не выполняется или я не понимаю как этот результат обработать...     | |||
| 5
    
        Выпрь 06.06.22✎ 17:01 | 
        (4) в соседней ветке селениум рекомендуют     | |||
| 6
    
        Asmody 06.06.22✎ 17:01 | 
        (4) Потому что надо смотреть на то, что выполняется "под страницей".
 У Яндекса все api неплохо документированы. | |||
| 7
    
        EvgKolivagin 06.06.22✎ 17:02 | 
        (3) У меня есть координаты точек, мне нужно узнать оптимальное время, которое понадобиться пешеходу на перемещение между этими точками, для этого я пытаюсь использовать api яндекс     | |||
| 8
    
        EvgKolivagin 06.06.22✎ 17:04 | 
        (6) Как мне под страницу заглянуть?)) js знаю плохо     | |||
| 9
    
        EvgKolivagin 06.06.22✎ 17:06 | 
        (6) Документацию Яндекс я изучал, но там все примеры заточены на вывод карты с маршрутом на html страницу, с этим я справился, сейчас мне каким- то образом надо возвращать данные о времени между точками маршрута в 1с     | |||
| 10
    
        EvgKolivagin 06.06.22✎ 17:11 | 
        (5) Я так понял, что селениум там рекомендуют для тестирования и тестирования node.js. Мне же надо как-то результат обычного js скрипта обработать и сделать это в 1с.     | |||
| 11
    
        EvgKolivagin 06.06.22✎ 17:14 | 
        Я много чего попробовал, но гдавный затык это как инициировать выполнение js скрипта на html странице программно из серверной процедуры 1с.     | |||
| 12
    
        Выпрь 06.06.22✎ 17:33 | 
        (11) или селениум или напрямую методы апи вызывать     | |||
| 13
    
        Asmody 06.06.22✎ 17:37 | 
        (11) Ты на 146% уверен, что построением маршрута занимается клиентский код на js?     | |||
| 14
    
        EvgKolivagin 06.06.22✎ 17:42 | 
        (13) У меня в js вызывается функция api яндекса, которая формирует маршрут, затем в подписке на событие я получаю данные о времени на каждом участке.     | |||
| 15
    
        EvgKolivagin 06.06.22✎ 17:44 | 
        (13) Вот кусок скрипта с подпиской:
 // Подписка на событие готовности маршрута. multiRoute.model.events.add('requestsuccess', function() { // Массив расстояний TimeOnRoute = []; // Получение ссылки на активный маршрут. var activeRoute = multiRoute.getActiveRoute(); // Получение коллекции путей активного маршрута. var activeRoutePaths = activeRoute.getPaths(); // Проход по коллекции путей. activeRoutePaths.each(function(path) { if (path.properties.get("duration").value != 0){ TimeOnRoute.push({"document_id": DocumentId}); TimeOnRoute.push({"distance": path.properties.get("distance").value, "duration": path.properties.get("duration").value}); } console.log("Длина пути: " + path.properties.get("distance").text); console.log("Время прохождения пути: " + path.properties.get("duration").text); }); var JsonString = JSON.stringify(TimeOnRoute); document.getElementById('result_multi').innerHTML = JsonString; // Записываем данные о времени на перемещение между точками в файл var xmlhttp = new XMLHttpRequest(); xmlhttp.overrideMimeType("application/json"); xmlhttp.open("POST", "http://127.0.0.1/lift_test_2/hs/YaMapHTTP/v1/route", false); xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); xmlhttp.send(JsonString); }); // Подписка на событие готовности маршрута. multiRoute.model.events.add('requestsuccess', function() { // Массив расстояний TimeOnRoute = []; // Получение ссылки на активный маршрут. var activeRoute = multiRoute.getActiveRoute(); // Получение коллекции путей активного маршрута. var activeRoutePaths = activeRoute.getPaths(); // Проход по коллекции путей. activeRoutePaths.each(function(path) { if (path.properties.get("duration").value != 0){ TimeOnRoute.push({"document_id": DocumentId}); TimeOnRoute.push({"distance": path.properties.get("distance").value, "duration": path.properties.get("duration").value}); } console.log("Длина пути: " + path.properties.get("distance").text); console.log("Время прохождения пути: " + path.properties.get("duration").text); }); var JsonString = JSON.stringify(TimeOnRoute); document.getElementById('result_multi').innerHTML = JsonString; // Записываем данные о времени на перемещение между точками в файл var xmlhttp = new XMLHttpRequest(); xmlhttp.overrideMimeType("application/json"); xmlhttp.open("POST", "http://127.0.0.1/lift_test_2/hs/YaMapHTTP/v1/route", false); xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); xmlhttp.send(JsonString); }); | |||
| 16
    
        EvgKolivagin 06.06.22✎ 17:47 | 
        (15) Сорян чет фигня какая-то скопировалась в предыдущем посте
 // Подписка на событие готовности маршрута. multiRoute.model.events.add('requestsuccess', function() { // Массив расстояний TimeOnRoute = []; // Получение ссылки на активный маршрут. var activeRoute = multiRoute.getActiveRoute(); // Получение коллекции путей активного маршрута. var activeRoutePaths = activeRoute.getPaths(); // Проход по коллекции путей. activeRoutePaths.each(function(path) { if (path.properties.get("duration").value != 0){ TimeOnRoute.push({"document_id": DocumentId}); TimeOnRoute.push({"distance": path.properties.get("distance").value, "duration": path.properties.get("duration").value}); } console.log("Длина пути: " + path.properties.get("distance").text); console.log("Время прохождения пути: " + path.properties.get("duration").text); }); var JsonString = JSON.stringify(TimeOnRoute); document.getElementById('result_multi').innerHTML = JsonString; }); | |||
| 17
    
        EvgKolivagin 06.06.22✎ 17:59 | 
        Похоже это ограничение самого api и сохранять данные нельзя. Во всяком случае надо отдельно с яндексом об этом договариваться...
 Результаты всех запросов к API должны быть отображены на карте Яндекса. Например, это данные, полученные с помощью сервиса геокодирования или маршрутизации. Если вам необходимо использовать данные API без отображения на карте, напишите нам. Спасибо всем кто учавствовал в обсуждении. | |||
| 18
    
        Гений 1С гуру 06.06.22✎ 21:39 | 
        (0) хахаха, ты мою ветку видел: Проблема с ID точки (метки) СДЭК на яндекс-картах ?     | |||
| 19
    
        Гений 1С гуру 06.06.22✎ 21:43 | 
        Попробуй кстати эту: https://infostart.ru/public/877596/
 Там что-то про маршруты есть. Я ее использовал для добавления точек на карту. | |||
| 20
    
        Бабрак Кармаль 06.06.22✎ 22:31 | 
        (18) Дебилушко, ему это всё на сервере надо
 Хахаха, гыгыгы. | |||
| 21
    
        ДедМорроз 06.06.22✎ 22:47 | 
        Ну а что мешает на сервере запустить браузер как отдельный процесс,а потом "поохотиться" за данными на странице?
 То бишь расширение к браузеру приляпать? | |||
| 22
    
        EvgKolivagin 07.06.22✎ 09:18 | 
        (19) Дело в том, что на карту мне не нужно добавлять, мне нужны эти данные для своих вычислений.     | |||
| 23
    
        EvgKolivagin 07.06.22✎ 09:20 | 
        (21) Выглядит слишком не надежно из-за большого числа промежуточных элементов     | |||
| 24
    
        Garykom гуру 07.06.22✎ 09:32 | 
        1. Почитать про лицензию
 https://yandex.ru/dev/maps/commercial/ https://yandex.ru/dev/maps/jsapi/doc/2.1/terms/index.html?from=club 2. JS не надо, все делается через HTTPСоединение прекрасно. Сам проверял | |||
| 25
    
        EvgKolivagin 07.06.22✎ 10:20 | 
        (24) Через HTTPСоединение вы имеете ввиду это? https://yandex.ru/dev/maps/router/doc/concepts/about.html     | |||
| 26
    
        Бабрак Кармаль 07.06.22✎ 10:44 | 
        (21) > что мешает на сервере запустить браузер
 Здравый смысл. | |||
| 27
    
        Garykom гуру 07.06.22✎ 10:48 | 
        (25) Нет
 Строка <script src="https://api-maps.yandex.ru/2.1/?apikey=ваш API-ключ&lang=ru_RU" type="text/javascript"> получает js файл внутри которого есть нужный new ymaps.multiRouter.MultiRoute( но если изучить код полученного модуля js от яндекса то там внутри будут обычные вызовы http запросов и вот 1С прекрасно может эмулировать эти запросы напрямую но это не законно на бесплатной версии апи яндекс карт | |||
| 28
    
        EvgKolivagin 07.06.22✎ 10:57 | 
        (27) Я так понял, чтобы все было по закону нужно просто докупить отдельный пакет который называется "Матрица Расстояний и Построение Маршрута". Этот пакет позволяет слать HTTP GET запросы и получать данные маршрута. И не нужно с js извращаться.     | |||
| 29
    
        Garykom гуру 07.06.22✎ 11:01 | ||||
| 30
    
        Garykom гуру 07.06.22✎ 11:02 | 
        (29)+ ну или сразу https://infostart.ru/public/1000836/     | |||
| 31
    
        EvgKolivagin 07.06.22✎ 11:41 | 
        (30) Спасибо за наводку     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |