Вопрос по Java скрипту

1. user5300 1000 27.05.19 13:36 Сейчас в теме
Добрый день, прошу помочь с JavaScript - ом.

Имею макет с текстом :
|<!DO CTYPE html">
|.....
|	<sc ript type="text/javascript">
|
|function Sweet(point1,point2) {
|	 // Координаты Москвы
|ymaps.geocode(point1).then(function (res) { var moscowCoords = res.geoObjects.get(0).geometry.getCoordinates();
|         // Координаты Питера
|ymaps.geocode(point2).then(function (res) { var Piter= res.geoObjects.get(0).geometry.getCoordinates();
|	// Расстояние
|	document.getElementById('Znach').value = (ymaps.formatter.distance(ymaps.coordSystem.geo.getDistance(moscowCoords, Piter)));
|});
|});
|}
|......
|
|<body>
|	<input type="hidden" id="Znach" name="Znach" value=""></input>
|</body>

Показать


Пытаюсь выполнить функцию из 1С :

Процедура ВыполнитьСкрипт(Команда) Экспорт 
	ЭлементыФормы.HTMLДок.document.getElementById("WebClientOperation").value = Команда;
	ЭлементыФормы.HTMLДок.document.getElementById("WebClient").click();
КонецПроцедуры

...
ЭлементыФормы.HTMLДок.document.getElementById("WebClientOperation").value ="Sweet(Москва,Питер)";
Результат = ЭлементыФормы.HTMLДок.document.getElementById("Znach").value;
....
Показать


Но результат выходит пустой(
Такое ощущение что функция просто не выполняется... Ошибок не выводит никаких.
Может кто подскажет ?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
39. user5300 1000 28.05.19 12:43 Сейчас в теме
(36) Всё, разобрался.
1 Не правильно параметры передавались
2 Ошибка расчета внутри функции

Функция просто не выполнялась, всем спасибо
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. 1eye 27.05.19 13:57 Сейчас в теме
Попробуй value менять через вызов функции в JS
3. user5300 1000 27.05.19 14:01 Сейчас в теме
(2) value вообще не меняется внутри функции, какое значение не присвоил бы внутри
4. 1eye 27.05.19 14:02 Сейчас в теме
если очень нужно именно из 1с, попробуй сделать общую переменную модуля на клиенте, присвой ей значение ЭлементыФормы.HTMLДок.document.parentWindow/defaultView (в зависимости от ОС) и обратись через нее
5. user5300 1000 27.05.19 14:04 Сейчас в теме
(4) parentWindow уже не работает же на IE 8 и выше
7. 1eye 27.05.19 14:06 Сейчас в теме
8. user5300 1000 27.05.19 14:12 Сейчас в теме
(7) а это для чего ? чтоб скрипт отобразить ?
карта выводится на форме же, остальные функции тоже выполняются, а именно эту пропускает, может функция не правильно нарисована js ?
6. user5300 1000 27.05.19 14:05 Сейчас в теме
ошибку выдает так,
да, именно с 1с нужно, работа с картой
9. 1eye 27.05.19 14:19 Сейчас в теме
так попробуй document.getElementById('Znach').value = (ymaps.formatter.distance(ymaps.coordSystem.geo.getDistance(moscowCoords, Piter))).toString()
10. user5300 1000 27.05.19 14:24 Сейчас в теме
(9) такой же результат, пусто
11. user5300 1000 27.05.19 14:27 Сейчас в теме
(9) как вообще узнать, выполняется функция внутри или нет ? нету что то вроде отладки или сообщить() ? )
12. 1eye 27.05.19 14:34 Сейчас в теме
выведи этот элемент на поле html и посмотри
13. 1eye 27.05.19 14:35 Сейчас в теме
по итогу, что нужно? чтоб при данные расстояния записывались в реквизит?
15. user5300 1000 27.05.19 14:38 Сейчас в теме
(13) именно, сократил функцию до
function Sweet(point1,point2) {
document.getElementById('Znach').value = 4;
alert( "Привет" ); }
Ни одно ни другое не выходит
14. avk72 79 27.05.19 14:36 Сейчас в теме
Добейтесь сначала, чтобы этот скрипт просто работал.
Отлаживайте без 1с.
Создайте любой html файл.

Скопируйте Ваш скрипт.

<!do ctype html>
<ht ml lang="ru">
<head>
  <met a charset="utf-8" />
</head>
<body>
   <div id = "Znach"></div>
   <button on click = "Sweet">Тест</button>
</body>
    <sc ript type="text/javascript">
       function Sweet(point1,point2) {

       //**** Ваш скрипт ********
          // Координаты Москвы
       ymaps.geocode(point1).then(function (res) { var moscowCoords = res.geoObjects.get(0).geometry.getCoordinates()}
          // Координаты Питера
       ymaps.geocode(point2).then(function (res) { var Piter= res.geoObjects.get(0).geometry.getCoordinates();}
          // Расстояние
       document.getElementById('Znach').value = (ymaps.formatter.distance(ymaps.coordSystem.geo.getDistance(moscowCoords, Piter)));
    }
    </sc ript>
</html>
Показать


Открываете файл любым браузером и запускаете инструменты разработчика - консоль.
Смотрим сообщения об ошибках.
16. user5300 1000 27.05.19 14:46 Сейчас в теме
17. 1eye 27.05.19 14:48 Сейчас в теме
полный документ можно?
18. user5300 1000 27.05.19 14:53 Сейчас в теме
19. 1eye 27.05.19 15:00 Сейчас в теме
(18) а sweet откуда вообще вызывается? я вызова не увидел
20. user5300 1000 27.05.19 15:07 Сейчас в теме
(19) из формы 1с :

Процедура ВыполнитьСкрипт(Команда) Экспорт 
    ЭлементыФормы.HTMLДок.document.getElementById("WebClientOperation").value = Команда;
    ЭлементыФормы.HTMLДок.document.getElementById("WebClient").click();
КонецПроцедуры

Процедура Нажатие()
ЭлементыФормы.HTMLДок.document.getElementById("WebClientOperation").value ="Sweet(Москва,Питер)";
Результат = ЭлементыФормы.HTMLДок.document.getElementById("Znach").value;
конецпроцедуры
Показать
21. 1eye 27.05.19 15:12 Сейчас в теме
(20) А она должна при клике отрабатывать?
22. user5300 1000 27.05.19 15:17 Сейчас в теме
(21) ну да, при нажатии на кнопку - рассчитывается расстояние , по идее так должно быть
23. 1eye 27.05.19 15:20 Сейчас в теме
(22) где она вызывается при нажатии? Просто в html не увидел объявления
24. user5300 1000 27.05.19 15:22 Сейчас в теме
(23) вот же функция
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";
		}
Показать
25. 1eye 27.05.19 16:03 Сейчас в теме
(24) т.е. там значение WebClientOperation "Sweet(coord1, coord2)"?
26. user5300 1000 27.05.19 16:08 Сейчас в теме
(25) да, не правильно ? )
Заменил на WebClientOperation "Sweet([coord1], [coord2])"
не помогло
27. user5300 1000 27.05.19 16:14 Сейчас в теме
(25) как вообще произвольно написать функцию ? чтоб напрямую обращаться к ней ?
Добавить класс <input type="hidden" id="Sweet" name="Sweet" on click="Sweet(point1,point2);"></input>
и на форме обратиться к ней ЭлементыФормы.Эксплорер.document.getElementById("Sweet").click();

Как тогда параметры передавать ? ...запутался)
28. avk72 79 27.05.19 18:24 Сейчас в теме +0.5 $m
(27) Примерно так должен файл выглядеть.
Жмете кнопку, и все что нужно, должно работать.
Прикрепленные файлы:
Новый текстовый документТест.html
31. user5300 1000 28.05.19 08:08 Сейчас в теме
(28)да, почти так ) только как функцию вызвать из формы 1с, а не на карте ?)
36. avk72 79 28.05.19 10:47 Сейчас в теме
(31) Сюда загляните.
Пример вызова js из 1с

Примерно так надо

Элементы.НТМЛ.Документ.getElementById ("TestButton").click()
39. user5300 1000 28.05.19 12:43 Сейчас в теме
(36) Всё, разобрался.
1 Не правильно параметры передавались
2 Ошибка расчета внутри функции

Функция просто не выполнялась, всем спасибо
29. deGreese 27.05.19 19:29 Сейчас в теме
Я так понял все эти пляски лишь для того, чтобы вернуть значение из функции Sweet в JS?

В зависимости от платформы это будет работать так:
&НаКлиенте
Процедура КакаяТоПроцедура()
  Результат = Элементы.HTMLДок.Документ.parentWindow.Sweet(<какие-то параметры>); // в случае осла
  // или так
  Результат = Элементы.HTMLДок.Документ.defaultView.Sweet(<какие-то параметры>);//в случае вебкита
КонецПроцедуры


Параметры можно передавать только простых типов. Но если все данные есть на странице, на самой карте, то из 1С наверное нет смысла что-то тащить.
30. user5300 1000 28.05.19 07:49 Сейчас в теме
(29)нет, parentWindow уже не работает с IE 8 и выше
32. deGreese 28.05.19 09:28 Сейчас в теме
(30) прекрасно работает со всеми IE вплоть до 11. В 1С до смены движка HTML на вебкит тоже все прекрасно работало. Поэтому и написал, что в зависимости от платформы подойдет либо этот вариант, либо тот.
33. user5300 1000 28.05.19 09:34 Сейчас в теме
(32)
Прикрепленные файлы:
37. mrcamomile 79 28.05.19 10:58 Сейчас в теме
38. user5300 1000 28.05.19 12:40 Сейчас в теме
(37) второй для примера вставил , обе существуют
34. user5300 1000 28.05.19 09:35 Сейчас в теме
35. user5300 1000 28.05.19 09:43 Сейчас в теме
(32)В ранних версиях Internet Explorer (далее IE) вплоть до IE8 вызовы функций Javascript (далее JS) можно было осуществлять примерно так:

ПолеHTMLДокумента.document.parentWindow.MyFunc (...);
Начиная с версии IE9 такие вызовы, а также вызовы через eval () не работают... )
40. deGreese 28.05.19 14:59 Сейчас в теме
(35) Конечно ругается, потому что неправильно написано.
Надо именно так как написано у меня:
Элементы.HTMLДок.Документ.parentWindow.Sweet();

Где:
HTMLДок - поле HTML документа;
Документ - свойство поля HTML документа;
41. user5300 1000 28.05.19 15:28 Сейчас в теме
(40) написал правильно, ругается на parentWindow,
У меня IE 10 подключен.

parentWindow уже не работает https://infostart.ru/public/347442/ вот, почитай
42. deGreese 28.05.19 22:43 Сейчас в теме
Работает в 11 осле, на скриншоте пруф. Если бы у документа не было parentWindow, статусная строка не установилась бы.

В 1С parentWindow не работает начиная с версии 8.3.14 потому что поле HTML реализовано с помощью вебкита,
Прикрепленные файлы:
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день