Обратная связь из поля браузера в 1С

Иногда требуется что-то передать из поля браузера в 1С. Нашел решение на инфостарте, но оно уже устарело.

Но идея хорошая — вызывается событие onClick, а в этом событии содержатся уже необходимые данные для передачи в 1С.

Но в примере в JS используется устаревший, работавший только в IE метод FireEvent:

var evt = document.createEventObject(); // создадим пустой объект событие
evt.propertyName = 'функц1'; // в реквизит propertyName предлагаю помещать название результата ( что-то вроде типа, или название функции от которой получили данные )
evt.data = '156'; //в реквизит data будем передавать данные результата
document.body.fireEvent('onclick', evt); 

Я попробовал использовать новый синтаксис, все работало без ошибок, но событие не вызывалось:

var evt = document.createEvent('Event');     
evt.initEvent('onclick', 'zzz', 'bbb'); 
document.body.dispatchEvent(evt);

И тогда мне пришел гениальный по своей простоте ход. Я просто вызываю метод click у поля:

function call_1s(event) {  
	document.body.click();
}

<div onclick="call_1s(arguments[0])">TEST</div> 

Для проверки я создаю div с текстом TEST, при клике на котором формируется виртуальный клик.

И в поле ввода, содержащего HTML-документ вызывается сначала мой виртуальный клик, потом уже реальный клик по div TEST.

Понятно, что клик можно вызывать не только у body, но и у любого другого элемента, например у скрытого div и считывать его содержимое или тег value.

В общем такой простой и незамысловатый способ позволяет легко организовать обратную связь от поля браузера в 1С.

Я использую таким образом, что когда узел дерева сворачивается, извещаю об этом 1С, она запоминает состояние узла — свернутое или развернутое.

Кстати, чтобы понять, работает код или нет, я после каждой строки вставлял alert с номерами 1, 2, 3, 4…

Таким образом я понимал, на какой строке спотыкался JS. Можно было, конечно, catch использовать для ловли ошибок, но лень вспоминать его правила.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

комментариев 9

  1. rzd:

    Вызывать события чтобы получить данные это как лечить зубы с помощью проктолога

    • а какие другие варианты предлагаются? Обработчик ожидания? он подвешивает клиентскую часть.
      Нет, если данные нужно передать в 1С для мгновенной реакции на них, то onclick — самое оно.

      • rzd:

        Чтобы получить данные объекта нужна ссылка на объект. Никаких виртуальных событий не нужно

        • давайте более конкретно, чтобы мы разговаривали об одном и том же, а не о сферических конях в вакууме.
          вот есть поле HTML-документа.
          Оно неким образом отображает данные из базы.
          Например поле «Комментарий» объекта Номенклатуры в поле INPUT.
          Когда пользователь меняет текст в этом поле INPUT, нужно сразу же (условно) отразить это изменение в объекте базы.
          Ваши действия с помощью «ссылки на объект»?
          а я при завершении ввода вызываю onclick и сообщаю, что поменялось.
          1С считывает данные из поля ввода и делает, что нужно.

          • rzd:

            Значит происходит событие «при завершении ввода»? Вот его и надо использовать

          • в поле HTML браузера нет такого события, доступного 1с.
            Его можно отловить на JS, но нужно как-то сообщить 1С, что оно случилось.

  2. rzd:

    Автору явно не хватает умения донести мысль.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *