Имя: Пароль:
1C
1С v8
Поле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?
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.