Версия для печати темы (https://pro1c.org.ua/index.php?s=00a8b53a48e6dc3b87b075152e634d35&showtopic=17598)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ 1С Предприятие 8 _ Взаимодействие 1С и javascript

Автор: Vofka 18.04.14, 11:46

Лирика: в наше время интеграция с другими информационными системами, программными продуктами и технологиями повсюду. С развитием web-а интеграция с ним так же сейчас используется на каждом шагу. Один из самых распространенных примеров интеграции 1С с web - это отображение карт внутри 1С, прокладывание маршрутов по ним и т.п. Для этого в 1С используется ПолеHTMLДокумента, в которое подгружается текст страницы и дальше описываются правила взаимодействия. Для успешной работы с этим нужно "это" как-то вызывать из 1С и часто нужно иметь обратную связь.

Я покажу 2 вещи:
1) Как из 1С можно вызвать javascript функцию
2) Как из javascript вызвать функцию 1С

Рассматривать это буду в контексте работы управляемой форме. В обычной форме все схоже.

Как из 1С можно вызвать javascript функцию?

Текст страницы:

HTML
<html>
<head>
<title>Test</title>
<script type='text/javascript'>
function message(mes) {
alert(mes)
}
</script>
</head>
<body>
</body>
</html>


Вызвать функцию message можно двумя способами. Делать это нужно в процедуре/функции с директивой компиляции &НаКлиенте

Раз:
Элементы.ИмяРеквизитаПоляХТМЛДокумента.Документ.parentWindow.eval("message('тест')");


Два:
Элементы.ИмяРеквизитаПоляХТМЛДокумента.Документ.parentWindow.message("тест");


Но это просто, дальше будет интересней.

Как из javascript вызвать функцию 1С?

Для этого нужно сделать специальную инфраструктуру в коде javascript-а на страничке.

Текст страницы:
HTML
<html>
<head>
<title>Test</title>
<script type='text/javascript'>
var evtObj = document.createEventObject();
var myParam;
function f(){
var now = new Date();
document.body.myParam = now.toString();
document.body.fireEvent('onhelp', evtObj);
}
</script>
</head>
<body>
<br />
<input type=""button"" value=""Go"" onclick=""f()"" />
</body>
</html>


В функции f() передать параметры в 1С можно путем присваивания значения переменной myParam. Теперь в 1С в обработчике события ПриНажатии ПоляHTMLДокумента получаем это значение:
ЗначениеПеременнойДжаваСкрипт = ДанныеСобытия.Document.body.myParam;


Скорей всего есть и другие способы передать что-то из javascript в 1С, как-то даже более красивее, но на данный момент других рабочих вариантов я не знаю. Если кто-то поделится, я думаю, это будет не только мне полезно узнать.

В качестве "ПС": данная статья написана скорее как памятка, т.к. нормального родного способа в 1С нету, а в интернетах пока найдешь и приведешь к рабочему виду - прийдется потратить какое-то время и силы, которые уже были потрачены мной, в результате чего появилась эта памятка. Надеюсь кому-то это так же будет полезно smile.gif .

(с) Моё

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua