поле хтмл документа 1с
Веб браузер в 1С используя поле HTML документа
Обработка Веб браузер проста, состоит из поля HTML документа и 20 строчек кода:
Скачать обработку для 1С 8.3.7 : WebBrauzer.rar
Но у сайтов, владельцы которых позаботились о совместимости, все открывается без ошибок, например: этот https://helpf.pro или http://www.rbc.ru
Похожие FAQ
Еще в этой же категории
Ключевые слова и Изображения
Слова упорядочены по частоте использования в тексте
Изображения
darkoder, по вашему рецепту перевёл Поле HTML документа в режим совместимости с ie11, а ссылка
для того чтобы перевести 1с в режим совместимости с ie11 надо в реестре в ветке[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION]создать параметр dword с именем 1cv8.exe и десятичным значением 11001 |
а так же создать 1cv8c.exe и 1cv8s.exe м такими же параметрами
для того чтобы перевести 1с в режим совместимости с ie11 надо в реестре в ветке
создать параметр dword с именем 1cv8.exe и десятичным значением 11001
а так же создать 1cv8c.exe и 1cv8s.exe м такими же параметрами
для того чтобы перевести 1с в режим совместимости с ie11 надо в реестре в ветке
создать параметр dword с именем 1cv8.exe и десятичным значением 11001
Вывод сообщений в HTML поле средствами 1С
А как выводить большое количество сообщений (довольно информативных), да и ещё, чтобы можно было на эти сообщения нажимать, открывать объекты, создавать новые прямо из этого окна? Если вы задавались таким вопросом, то надеюсь данная статья вам поможет. В самой статье, я постараюсь донести саму логику и суть реализации моей идеи. Полный код с примером будет прикреплен ниже. (Каждая скачка является мотивацией для написания новых статей)
Обязательные условия для работоспособности модуля:
Если вышеперечисленные пункты вас устраивают, то предлагаю ознакомиться с кратким описанием идеи. Итак, если нам нужно собрать сообщения в процедуре «ТекущаяИсполняемаяПроцедураНаКлиенте», то перед ней мы вызываем процедуру начала сбора сообщений (по сути это просто генератор уникального идентификатора для хранилища значений где будут временно храниться наши сообщения), а после процедуры «ТекущаяИсполняемаяПроцедураНаКлиенте» мы вызываем процедуру окончания сбора ошибок, которая почистит за собой мусор и выведет наши сообщения на форму в HTML.
Самое замечательно то, что ссылки в HTML поле уже хранят в себе наши параметры. Что позволяет работать с ними как нам захочется (открывать значения по ссылкам, создавать объекты, передавая в них наши параметры и тп.) Надеюсь, идея немного понятна, ведь она довольно простая.
А теперь немного пробегусь по основному коду и покажу реализацию примера вывода такого сообщения.
Итак, у нас есть кнопка на форме и её клиентская процедура, а также у нас будет процедура»ЛюбаяПроцедураВКоторойБудетФормированиеОшибок()», в которой у нас непосредственно и будет происходить сбор сообщений для последующего вывода на экран.
Как мы видим, передается параметр GUIDОперации он необходим для того случая, когда сбор сообщений будет одновременно в нескольких процедурах и это нам позволит разделить данные списки сообщений (да, параметр GUIDОперации придется тащить через все вложенные процедуры и функции, этот параметр не обязательный, но тогда вы берете на себя ответственность за некорректный вывод сообщений. Повторюсь, работать будет 🙂 ) Вообще, все параметры необязательные, ЭтаФорма нужна если мы захотим заблокировать форму вызова в момент работы с окном ошибок. Второй параметр соответственно заголовок формы HTML.
Итак, проваливаемся в процедуру ЛюбаяПроцедураВКоторойБудетФормированиеОшибок()
Результат выполнения данного кода:
Теперь немного подробнее о показанных процедурах:
Вариант вызова данный процедуры на сервере СообщенияВHTML.ДобавитьСообщение(«»);
ОписаниеСообщения непосредственно само сообщение текстом, которое мы хотим вывести;
Самое интересное, что в параметре ОписаниеСообщения мы также можем формировать ссылки на объекты, которые захотим открыть и даже сохранять в них параметры для дальнейшей обработки, все это в виде текста в формате HTML;
Пример вызова такой преобразовывающей процедуры:
Вариант вызова данной процедуры на сервере СообщенияВHTML.СсылкаНаОбъект(Объект.Контрагент,ПредставлениеОбъекта)
Посмотрим, что у неё внутри:
Как видим, просто формируется строка с тегами для HTML, которые мы будем обрабатывать при нажатии.
Таким же образом, мы можем помещать во временное хранилище ссылки на Таблицы значений, Структуры, Соответствия и т.п., что дает нам больше возможностей для обработки нажатия на ссылку. К примеру, при нажатии на ссылку создать документ, загрузить в него заранее переданную таблицу значений и открыть созданный документ.
Давайте посмотрим, как это просто реализовать:
Тут мы используем процедуру СообщенияВHTML.СсылкаНаОбъектСПараметром(«новый документ поступления», ТаблицаТовары, «СоздатьДокументПоступлениеТоваров»)
Посмотрим, что внутри процедуры:
Как видим, все по-прежнему просто.
Осталось только понять, а как обрабатывать ссылки в HTML поле? Для этого у нас есть замечательное событие у элемента «ПриНажатии»
Где мы обращаем внимание на процедуру СообщенияВHTMLОбработкаСобытийКлиент.ОбработкаСобытийПоКлючам(КлючСобытия,ДанныеИзHTML);
Вот где и понадобился нам ключ, который мы задавали при записи в HTML, к примеру, я передал ключ «СоздатьДокументПоступлениеТоваров«, а значит в самой процедуре мы видим:
Здесь в параметре КлючСобытия нам и прилетает тот самый ключ, а в параметре ДанныеИзHTML хранится адрес на наши любые переданные параметры, которые мы легко можем получить таким образом:
Итого, у нас ключ и мы знаем что необходимо создать и открыть документ, а также имеются параметры, которые мы хотим поместить в новый документ.
Ещё довольно интересный момент, по поводу вывода картинок (в следующем примере написана функция только под «БиблиотекаКартинок», т.е для всех картинок, которые добавлены в конфигурацию, но по данному примеру я думаю не составит труда добавить функции с картинками по ссылке, либо указав путь на диске)
Посмотрим что у неё внутри:
Спасибо что дочитали до конца 🙂 Значит мой труд уже не был напрасен, плюсик вам в карму.
1С 8.x : Формирование HTML-документа, содержащего ссылки на объекты базы данных
В данной статье рассматривается способ программного формирования HTML документа, содержащего ссылки на объекты базы данных 1С, такие как справочники, документы и т.д. Показан пример построения обработчика события OnClick ПоляHTMLДокумента, для обработки клика на html-ссылке.
Предисловие
Однажды, дописывая обработку, создающую и модифицирующую, не суть важно какие документы, я подумал, что неплохо было бы вывести для пользователя некое резюме:
“Создан документ такой-то”
“Изменен документ такой-то” и т.д.
От обычного, в таких случаях, вывода информации в окно сообщений я сразу отказался, так как не удобно это, сначала читать в окне сообщений “Создан документ … ” а потом запоминать его номер, открывать соответствующий журнал (или форму списка) и искать там этот документ. А если документов много и пользователь хочет посмотреть все документы?(или выборочно) Насколько это неудобно я убедился при отладке обработки …
То, что в форме есть элемент управления именуемый ПолеHTMLДокумента я конечно знал, но вот представилась возможность познакомиться с ним поближе. Было решено реестр обработанных документов выводить в виде html документа содержащего ссылки на эти самые документы, а по клику на ссылке открывать форму соответствующего документа. Здесь мне многие могут возразить: “А почему бы для этих целей не использовать обычный макет, выводимый в табличный документ, а для открытия документов использовать расшифровку? И чем Ваш способ лучше?” Отвечаю: Конечно можно использовать, и мой способ ничем не лучше. Он просто другой. Ведь у хорошего программиста для решения одной задачи должно быть в арсенале несколько инструментов.
Итак, перейдем от слов к делу, в рамках данной статьи рассмотрим следующую задачу: Сформировать html-документ, содержащий ссылки на элементы справочника номенклатура, по клику требуется открывать форму соответствующего элемента. Создаем новый отчет, его форму, на форме размещаем элемент управления ПолеHTMLДокумента.
Текст модуля формы:
Код 1C v 8.х
Ну вот html мы сформировали, теперь чтобы ссылки “ожили” надо написать обработчик события OnClick элемента управления ПолеHTMLДокумента.
Код 1C v 8.х
Всё можно пробовать!
РеКС — друг в мире компьютеров
Интерактивное отображение произвольной 2D графики в форме приложения 1С:Предприятие можно реализовать в стандартном поле управляемой формы с установленным видом Поле HTML документа, которое предназначено для отображения изображений описанных языками HTML, XML и их расширениями SVG или VML. Формирование изображения в релизах до релиза 8.3.14 выполняется встроенным в платформу 1С браузером MS Internet Explorer, чьи версия, функциональность и опции отличаются от IE установленного в системе.
Масштабируемая векторная SVG иллюстрация (размер: 4.6KB несжатый)
Приведенные ниже заметки описывают средства динамического синтеза графики для отображения в управляемых формах 1С и разработки алгоритмов интерактивного взаимодействия с этой графикой в форме.
Поле HTML документа
Управляемая форма может содержать элемент вида Поле HTML документа, использующего в качестве источника данных реквизит типа Строка, в котором может находиться произвольный гипертекст удовлетворяющий требованиям HTML5. Элемент Поле HTML документа создает НаКлиенте веб-браузер Webkit, в котором создает документ соответствующий гипертексту из реквизита источника данных. Элемент обеспечивает НаКлиенте полный динамический доступ к веб-документу, каскаду его элементов и свойств и скриптам.
HTML данные
Строковый реквизит данных допускает массу альтернативных реализаций, типовая структура предполагает:
Поле html документа в управляемых формах 1с. Управляемые формы: Поле HTML Документа и веб-клиент
Платформа 1С представляет собой достаточно мощный инструмент, предназначенный для решения широкого круга задач. В этой статье мы хотим рассказать об одном типе объекта, с помощью которого можно:
Этот объект называется в 1С полеHTMLдокумента.
Элемент управления ПолеHTMLДокумента имеет одно существенное ограничение в использовании – его нельзя использовать для расположенных в таблице полей.
Создание собственного браузера в 1С
Давайте попробуем с помощью этого поля создать обработку, открывающую ссылку на ресурс в интернете:
Проверим, как это работает.. Получим картинку (Рис.4) Рис.4.
Проанализируем, что мы видим:
С чем связана ошибка? С тем, что ПолеHTMLДокумента – это фактически типовой Internet Explorer, причем не самой последней версии, который не поддерживает большинство современных ресурсов. Так что сайты, не поддерживающие режим совместимости, будут открываться с ошибками в сценарии.
Для удобства пользователя можно на форме создать навигационные команды «Вперед» и «Назад», которые будут описывать соответствующие перемещения.
Создание ссылки на объект базы данных
Задача состоит в следующем:
Создадим нашу обработку и форму на ней.
Подробнее рассмотрим, что мы сделали:
Попробовав сейчас активировать любую из имеющихся гиперссылок мы столкнемся с тем, что «Такая страница не найдена»(Рис.8) Рис.8
Продолжим описывать обработчик.
Создадим процедуру, которая обрабатывает клик мышки по гиперссылке на элемент справочника (Рис.9).
Рис.9
Рассмотрим её подробнее:
Протестируем выполнение созданного кода.
Так как в настройках нашей программы запрещено использование модальных окон, выполнение выше приведенного кода завершилось ошибкой (Рис.10). В противном случае все бы отработало нормально.
Рис.10
Зайдем в конфигураторе в меню Текст->Рефакторинг->Нерекомендуемые синхронные вызовы->Преобразовать вызовы модуля. По прошествии некоторого времени текст нашего модуля будет выглядеть как на Рис.11
Рис.11
Опробовав обработку еще раз можно убедиться, что все работает нормально и при щелчке на ссылку открывается соответствующий элемент справочника.
Некоторые пояснения к коду. Статистика говорит, что в пределах одной базы маловероятно существование элементов с одинаковыми идентификаторами, однако платформа может гарантировать уникальность только в пределах одной таблицы. Именно поэтому мы и формировали ссылку из двух частей.
Пара слов о Javascript
Вызовы функций JS в ранних версиях программы осуществлялись через параметр поля document.parentWindow.MyFunk(), однако в современных браузерах эта возможность была утрачена. Не срабатывают так же вызовы через eval().
Выход состоит в использовании специальной функции fireEvent, которая является универсальным механизмом обмена данными между 1С и Javascript.
Во время реализации одного проекта, возникла необходимость выполнять javascript(далее JS) код под управление объекта ПолеHTMLДокумента, с получением результат в 1С. Приведённые примеры, в найденных статьях, показались не очень удобными в использовании (сугубо личное мнение). Было принято решение попробовать найти другое, более простое, решение, на поиски отводилось не более 1 дня.
Процедура ВыполнитьСкрипт(ТекстСкрипт) ДИВ = Элементы.док.Документ.getElementById(«TEST»); ДИВ.setAttribute(«onclick», ТекстСкрипт); ДИВ.click(); КонецПроцедуры
Дополнение от 02.08.2016
В комметариях был предложен еще один способ вызова JS (спасибо ), если у вас есть возможность менять код HTML документа, то можно прописать функцию в нем и затем ее вызывать. передавая в нее код на JS.
Возврат результата JS в 1С
Для передачи результата скрипта в 1С из объекта ПолеHTMLДокумента будем использовать событие. Привяжем к ПолеHTMLДокумента событие ПриНажатии которое получает на вход 3 параметра:
Чтобы вызвать событие при нажатии понадобиться выполнить следующий js код
Var evt = document.createEventObject(); // создадим пустой объект событие evt.propertyName = «функц1»; // в реквизит propertyName предлагаю помещать название результата (что-то вроде типа, или название функции от которой получили данные) evt.data = «156»; //в реквизит data будем передавать данные результата document.body.fireEvent(«onclick», evt); // выполним событие при нажатии ПолеHTMLДокумента
Выполнив данный js код в процедуру при нажатии вторым параметром придет созданный нами объект событие. Который довольно удобно обрабатывать.
Пример разбора ответа.
&НаКлиенте // получаем имя и результат события Процедура ДокПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка) ИмяОперации = ДанныеСобытия.Event.propertyName; ДанныеОперации = ДанныеСобытия.Event.data; Если ИмяОперации = «» Тогда //не наше событие Возврат; КонецЕсли; Если ИмяОперации = «Функц1» Тогда // обработка результат ИначеЕсли ИмяОперации = «функц2» Тогда // обработка результат //. КонецЕсли; КонецПроцедуры
Этот метод избавляет от использования обработчиков ожидания, и предоставляет удобный идентификатор события. По идентификатору мы точно знаем какие данные нам пришли, и как их разобрать.
Дополнения от 26.03.2016
// отключим всплывание события
// отключим стандартное поведение
В результате для передачи данных в 1с из JS мы получим функцию.
Вывод.
Комбинируя эти методы, вы сможете довольно легко запускать необходимый вам js код, и получать данные в 1С, для дальнейшей обработки.
Пример реализации в
Взаимодействие javascript и интерфейса 1С дает огромные возможности для реализации нестандартных функций. Раньше можно было напрямую вызывать функции JavaScript через DOM объект document Поля HTML документа. В современных браузерах эта возможность ушла. Более того, в веб-клиенте появляется тип ВнешнийОбъект, который вообще нигде не описан. На Инфостарте были предложения вызывать JavaScript через fireEvent, но это очень неудобно. Предлагаю свой вариант решения.
С чего все началось
Разбираться с HTML полем меня сподвигло большое количество задач, в которых была необходимость реализовать интерактивные карты с мониторингом, маршрутизацией и т.д. Поскольку встроенными средствами 1С сделать это невозможно, то раньше использовал ActiveX компоненту собственного изготовления. На обычных формах все работало приемлимо, не считая, что решение и рядом не стояло с открытыми фреймворками типа OpenLayers. После появления управляемых форм, была попытка встроить все тот же ActiveX в HTML документ и разместить его в поле. Решение работает, но в виду ужесточения политики безопасности Microsoft, требовало изменения настроек безопасности на каждом клиенте, что в конечном счете оказалось неприемлимым. Вот тогда мы и поставили перед собой задачу, прикрутить к управляемым формам карты на основе Web-движков (Яндекс.Карты, OpenLayers и прочие Tile ориентированные движки).
Вариант 1. Работает в толстом клиенте, работает в тонком клиенте, не работает в веб-клиенте
Суть метода заключается в получении свойства parentWindow элемента формы ПолеHTMLДокумента. Выглядит примерно так: