|
ПолеHTMLДокумента обращение к 1С | ☑ | ||
---|---|---|---|---|
0
Gsoom2010
19.08.12
✎
22:43
|
Добрый день!
Вопрос: как из кода HTMLДокумента вызвать процедуру 1С? Нашёл только как из 1С вызвать функцию JavaScript: v8: v8: Как выполнить функцию JavaScript в ПолеHTMLДокумента и получить ее результат , но ещё бы понять как из скажем того же JavaScript вызвать процедуру 1С передав в неё данные. |
|||
1
mikecool
19.08.12
✎
22:43
|
может как то через владельца документа
|
|||
2
Юрий Лазаренко
19.08.12
✎
23:11
|
(0) У поля HTML есть событие ПриНажатии. Отлавливай его, смотри кто и с какими параметрами вызвал и запускай соответствующие процедуры. Если процедура 1С должна вызываться не при нажатии на поле HTML, а при других условиях, то попробуй генерить событие onClick яваскриптом (сам так делать не пробовал, но по идее должно сработать).
|
|||
3
Stim
19.08.12
✎
23:12
|
можно нескромный вопрос - почему функцию 1С нельзя выполнить в той среде, все обычно выполняются все функции 1С? из яваскрипт получить параметры и выполнить функцию в модуле?
|
|||
4
Юрий Лазаренко
20.08.12
✎
07:40
|
(3) Кто сказал что нельзя?
|
|||
5
Stim
20.08.12
✎
09:32
|
(4) автору видимо нельзя это сделать, раз он хочет одеть штаны через голову
|
|||
6
Юрий Лазаренко
20.08.12
✎
09:37
|
(5) Да нормально он все делает вроде. Из ХТМЛ дергает базу, получает данные из нее и помещает обратно.
|
|||
7
Юрий Лазаренко
20.08.12
✎
09:37
|
Или я что-то не понял?
|
|||
8
Stim
20.08.12
✎
09:41
|
(6) нет.
насколько я понял, "HTMLДокумент" - это термин и объект 1С, следовательно автор хочет в какой-то обработке, в которой есть поле HTMLДокумента - выполнить код |
|||
9
Dimasik2007
20.08.12
✎
09:44
|
Я делал так - получал событие onClick (его можно вызвать из js), и парсил ссылку (в которую можно запихать любые свои данные например в base-64 виде)
В примере в ссылке есть номер документа, по клику ищу подобные номера в базе и открываю на экран. [code] Процедура ПолеHTMLДокумента1onclick(Элемент, pEvtObj) СтандартнаяОбработка = Ложь; Узел = pEvtObj.srcElement; href = ""; Пока Истина Цикл Попытка ИмяЦели = Узел.tagName Исключение Прервать; КонецПопытки; Если ИмяЦели = "A" Тогда Попытка href = Узел.href; Исключение КонецПопытки; Прервать; КонецЕсли; Узел = Узел.parentElement; КонецЦикла; href = Прав(href,11); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПоступлениеТоваровУслуг.Ссылка |ИЗ | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг |ГДЕ | ПоступлениеТоваровУслуг.Номер = &НомерДокумента"; //Параметры запроса Запрос.УстановитьПараметр("НомерДокумента",href);// Строка Результат = Запрос.Выполнить().Выбрать(); Пока Результат.Следующий() Цикл ОткрытьЗначение(Результат.Ссылка); КонецЦикла; Если НЕ СтандартнаяОбработка Тогда pEvtObj.returnValue = Ложь; КонецЕсли; КонецПроцедуры [/code] |
|||
10
Юрий Лазаренко
20.08.12
✎
09:46
|
(8) Ну да. А что плохого в таком подходе?
|
|||
11
Dimasik2007
20.08.12
✎
09:47
|
Далее, если нужно чтобы процедура что-то получила и отрисовала на страничке, можно сделать следующее.
1. Сформировать требуемые параметры (например массив цифр). 2. Дергать функцию eval, в которой можно, например, добавлять в массив переменной js добавлять данные. 3. Дергать функцию eval, в которой будет вызваться соответствующая функция скрипта, выполняющая отрисовку или что-то там еще. |
|||
12
Dimasik2007
20.08.12
✎
09:49
|
Так делал место логиста, когда по клику в карте на метке из 1с подгружались данные о заказе, формировался баллун с описанием и дополнительным функционалом (открыть заказ, перенести заказ, указать водителя и тп).
|
|||
13
Gsoom2010
21.08.12
✎
21:20
|
Я как раз и связываю самописную транспортную базу с Яндексом, мне нужно чтобы при работе с картой вносились изменения в базу (дёргались из JS процедуры 1С с соответствующими параметрами). Вывести точки на карту не вызвало проблем, вызывать из 1С JS процедуры тоже не проблема, а вот из JS вызывать 1С процедуры оказалось люто бешеным делом...
|
|||
14
Gsoom2010
21.08.12
✎
21:23
|
(9) а покажи пример JS кода где вызывается onclick
|
|||
15
Gsoom2010
21.08.12
✎
21:31
|
Возможно будет проще понять если опишу конкретную задачу:
1. В обработке получаю адреса по доставкам. 2. Генерится код HTML с точками на Яндекс карте по этим адресам. 3. Из самой обработки можно управлять отображением точек вызывая функции JS. 4. А вот дальше никак: пользователь жмёт на карте на точку, балун открывается и пользователь видит кнопочку "Отменить заявку" и мне нужно по нажатии на эту кнопочку изменить данные в 1С соответственно (вызвать процедуру удаления заявки из 1С). |
|||
16
Asmody
21.08.12
✎
22:16
|
в JavaScript можно вызвать document.fireEvent(), в котором вызвать одно из событий, которое умеет отлавливать 1Ска. данные можно передавать в любом элементе DOM или создавать свой, специально для этого
|
|||
17
Dimasik2007
21.08.12
✎
22:53
|
(14) Да пожалуйста, http://rusfolder.com/32230969
|
|||
18
Dimasik2007
21.08.12
✎
22:55
|
Это вариант с онкликом, вариант (16) более предпочителен, так как получается нативными средствами вызов разнообразных событий.
В моем решение используется фэйковая невидимая гиперссылка, в которую JS скрит записывет текст вызываемого обработчика, потом вызывает ее свойство Клик(), обработчик срабатывает в 1С, далее зная текст (в примере генерируется вызов функции), далее "Выполнить" и все, дело в шляпе. |
|||
19
Dimasik2007
21.08.12
✎
22:58
|
(15) Не видел текста, такое решение предлагаю. Адреса запихиваете в массив, в баллуне на кнопке вешаете обработчик наподобие примере, который будет передавать данные например УДАЛИТЬ, 1023), т.е. удалить заявку № 1023, далее по указанный методе обрабатываете, потом вызываете функцию JS которая найдет и удалит баллун.
|
|||
20
Dimasik2007
21.08.12
✎
22:58
|
не забудьте только числа преобразовывать в формат без группировок
|
|||
21
Dimasik2007
21.08.12
✎
23:06
|
Самые ранние демки выглядели так
http://s2.ipicture.ru/uploads/20120821/LzeUlnT3.png |
|||
22
Юрий Лазаренко
21.08.12
✎
23:18
|
(18) Туплю наверное. Чем твой вариант с онкликом по невидимой ссылке хуже fireevent'а, вызванного для этой же ссылки или другого элемента?
|
|||
23
Asmody
21.08.12
✎
23:24
|
(22) да ничем, особо. только онклик будет ловиться при каждом клике на док и надо разруливать то оно или нет, а через fireEvent можно разные события (типа ondataset…) задействовать под разные дела
|
|||
24
Юрий Лазаренко
21.08.12
✎
23:27
|
(23) Ферштейн
|
|||
25
Dimasik2007
21.08.12
✎
23:53
|
(22) Тем более, когда клепал, не знал про эту функцию. Велосипеды они такие велосипеды.
|
|||
26
Dimasik2007
22.08.12
✎
00:04
|
(23) А пример про создание DOM кинуть можете?
|
|||
27
Gsoom2010
22.08.12
✎
09:57
|
(16) Идею в принципе понял, у вас нет примера реализации с созданием DOM?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |