Имя: Пароль:
1C
1С v8
Ссылки в поле HTML
0 grum01
 
23.11.16
08:44
Коллеги, поможите, чем можете. Искал - не нашел (или руки кривые).
Формы простые, платформа 8.3.
В общем: на форме есть поле HTML, в нее нужно вставить текст и ссылки. По нажатию на ссылку должна запускаться процедура.
-----------------
ЭлементыФормы.ЗадачиСписокHTML.УстановитьТекст("Ошибки: " + "<a href="+НажатиеСсылки()+">"+Колво+" шт.</a>");
-----------------
С параметрами HTML строки не могу совладать. В указанном варианте процедура "НажатиеСсылки()" выполняется сразу при выводе строки.
Как сделать запуск процедуры по нажатию на ссылку?
1 Сергиус
 
23.11.16
09:27
(0)В процедуре формы ПередОткрытием добавляешь текст:

Текст = "<html xmlns=""http://www.w3.org/1999/xhtml"";; >
    |<head>
    |<title>Тест</title>
    |<script>
    |var xForm1C;
    |
    |function SetForm1c(Form1c)
    |{
    |xForm1C = Form1c;
    |}
    |
    |function Call1C()
    |{
    | xForm1C.НажатиеСсылки();
    |}
    |</script>
    |
    |</head>
    |<body>
    |<a onclick='Call1C()' href="+Колво+" шт.</a>"
    |
    |</body>
    |</html>";

ЭлементыФормы.ЗадачиСписокHTML.УстановитьТекст(Текст);

Для поля HTML создаешь в свойствах событие ДокументСформирован, и в его процедуре задаешь передачу контекста формы в javascript код:

Процедура ПолеHTMLДокументСформирован(Элемент)
    //Передаем контекст формы в переменную javascript
    ЭлементыФормы.ПолеHTML.Документ.parentWindow.SetForm1c(ЭтаФорма);
КонецПроцедуры
2 grum01
 
24.11.16
06:32
(1) Ссылка появляется, при нажатии ругается: "Метод объекта не обнаружен (SetForm1c)"
   Текст = "<html xmlns=""http://www.w3.org/1999/xhtml"";;; >
    |<head>
    |<title>Тест</title>
    |<script>
    |var xForm1C;
    |
    |function SetForm1c(Form1c)
    |{
    |xForm1C = Form1c;
    |}
    |
    |function Call1C()
    |{
    | xForm1C.НажатиеСсылки();
    |}
    |</script>
    |
    |</head>
    |<body>
    |<a onclick='Call1C()'href=>"+Колво+" шт.</a>
    |
    |</body>
    |</html>";
3 grum01
 
24.11.16
07:25
(1) Кстати, почему в ПередОткрытием()? А как быть тогда, если ссылки на форме должны обновляться пока форма открыта (подписка)?
4 grum01
 
24.11.16
08:49
В общем ошибка в
ЭлементыФормы.ПолеHTML.Документ.parentWindow.SetForm1c(ЭтаФорма);
У parentWindow нет метода SetForm1c (не видит)
5 shpioleg
 
24.11.16
08:55
Событие ПриНажатии повесь на поле HTML и посмотри в отладчике, что передается в ДанныеСобытия.
6 grum01
 
24.11.16
09:33
Объект не поддерживает свойство или метод "НажатиеСсылки"
7 grum01
 
24.11.16
09:36
(5) onclick?
8 grum01
 
24.11.16
09:38
Мне кажется, что ошибка в SetForm1c(ЭтаФорма).
Получается, что в переменную xForm1C передается сама форма (графическая). А найти там процедуру НажатиеСсылки() не может.
9 grum01
 
24.11.16
10:09
В общем пробовал по всякому, во всей этой конструкции ошибка при получении функции SetForm1c - не может ее получить

    Текст = "
    |<HTML>
    |<HEAD>
    |<script>
    |
    |var xForm1C;
    |
    |function SetForm1c(Form1c)
    |{xForm1C = Form1c}
    |
    |function Call1C()
    |{xForm1C.НажатиеСсылки()}
    |
    |</script>
    |</HEAD>
    |<BODY>
    |
    |<a onclick='Call1C()' href=>ССЫЛКА</a>
    |
    |</BODY>
    |</HTML>";
10 grum01
 
24.11.16
10:11
Процедура ЗадачиСписокHTMLДокументСформирован(Элемент)
     ЭлементыФормы.ЗадачиСписокHTML.Документ.parentWindow.SetForm1c(ЭтаФорма);
КонецПроцедуры
11 Сергиус
 
24.11.16
10:26
(10)В событие поля ДокументСформирован() помещаешь?
12 grum01
 
24.11.16
10:35
(11) Да, конечно.
именно после помещения в ДокументСформирован() возникает ошибка "Метод объекта не обнаружен (SetForm1c)"
13 Вафель
 
24.11.16
10:52
У тебя после нажатия на ссылку переходин в пустую страницу, там срабатывает досформирован, а в пустом доке нет никаких функций
14 Вафель
 
24.11.16
10:52
сделай вместо ссылки просто <p>
15 Вафель
 
24.11.16
10:53
но нужно будет оформлением поиграться чтоб на ссылку было похоже
16 Вафель
 
24.11.16
10:56
И вообще у поля хтмл есть событие нажатие
17 Сергиус
 
24.11.16
11:04
(0)https://yadi.sk/d/RadVSArszMY8N

Для обычных форм вот так.
18 grum01
 
24.11.16
11:50
(16) Мне не надо нажимать на поле, надо нажимать на ссылку - это разное. На поле планирую размещать несколько ссылок.
19 grum01
 
24.11.16
11:51
(14) так тоже не работает
20 grum01
 
24.11.16
11:54
(17) Это для всего поля. Мне надо несколько ссылок в одном поле вперемешку с простым текстом. И результаты кликанья на разные ссылки должны быть разными.
21 shpioleg
 
24.11.16
12:00
(20) Понятно что для всего.Ты делал как в (5) ? Смотрел что можно вытянуть из фикструктуры ДанныеСобытия?
22 shpioleg
 
24.11.16
12:11
+(21) Я так раньше делал. Только у меня не ссылка была, button Добавить.

&НаКлиенте
Процедура КартаПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
    Если ТипЗнч(ДанныеСобытия) = Тип("ФиксированнаяСтруктура") Тогда    
        Если ДанныеСобытия.Button <> Неопределено Тогда
            Если ДанныеСобытия.Button.Value = "Добавить" Тогда
23 grum01
 
24.11.16
12:47
(21) Я не вижу события ПриНажатии на поле html
24 Сергиус
 
24.11.16
13:20
(17) у процедуры-обработчика есть параметр pEvtObj, из него можно определить при нажатии на какой элемент она(процедура) была вызвана.
25 Сергиус
 
24.11.16
13:20
+(24)посмотри в его свойствах, вот и обрабатывай в коде это.
26 Сергиус
 
24.11.16
13:21
+(26)Либо переходи на упр.формы, там мой код из (1) 100% работает.
27 grum01
 
25.11.16
07:46
Всем спасибо.
С ситуацией так и не разобрался, как-то неоднозначно все.
Пошел другим, "некрасивым" путем: на форму вывожу надпись1 в заголовок которой устанавливаю текст и рядом надпись2, которую делаю гиперссылкой. Надпись2 привязана к надписи1 и надпись1 расширяется в зависимости от длины текста.
Код простой, понятный.
Визуально выглядит даже лучше, чем html-поле.
[url=http://radikal.ru][img]http://s008.radikal.ru/i303/1611/51/0d63d2cb4b31.jpg[/img][/url]
28 grum01
 
25.11.16
07:47