1с не работает html
Сегодня рассмотрим такой элемент форм 1С как Поле HTML документа.
Название его говорит само за себя и предназначено это поле для отображения кода в формате html. Первое, что приходит на ум это конечно же организовать просмотр сайтов. И такая возможность действительно есть. И второе — для тех кто немного знаком с html и css есть возможность самим написать код для отображения в html поле. Учитывая, что у css3 достаточно широкие возможности стилизации, и в том числе присутствует возможность анимации, может получится достаточно живая и красочная картинка. Плюс, как известно, в html можно включать и код на языке java script. И тут уже возможности ограничиваются только вашей фантазией. Рассмотрим на примере оба вышеперечисленных варианта. Для демонстрации создадим внешнюю обработку на управляемых формах.
Просмотр веб страницы через поле HTML документа
Эта возможность реализуется очень просто. В реквизиты формы добавим реквизит Сайт с типом «Строка»:
Разместим этот реквизит на форме и в свойствах выберем вид — «Поле HTML документа»:
И конечно же добавим строку для ввода адреса сайта.
Остальное делается практически одной строчкой кода, которую мы вставим в обработчик события ПриИзменении адресной строки сайта:
На самом деле не совсем понятно где это может пригодится, если есть стандартный браузер. Ну с фирмой 1С все понятно — она таким образом рекламу нам показывает каждый раз когда мы 1С:Предприятие запускаем)).
Метатег X-UA-Compatible
которая говорит браузеру Internet Explorer, что он должен работать в режиме совместимости с самой последней его версией. В которой нам конечно же доступны CSS3 и HTML5.
Пишем свой код для поля HTML документа
А теперь создадим свою мини веб страничку и отобразим ее в другом поле HTML документа. По аналогии с предыдущим примером создадим реквизит СтилиCSS и разместим его в отдельной закладке на форме.
Далее перейдем к написанию кода html. Минимально необходимый код, так сказать заготовка нашей странички выглядит следующим образом:
Внутри тега обычно прописывают различные метатеги, а также мы поместим в него тег в котором пропишем стили css. Как правило стили css размещают в отдельном файле, но поскольку у нас нет такой возможности воспользуемся тегом style. Содержимое же самой страницы размещают внутри тега . В качестве примера нарисуем внутри нашего поля html квадрат, а с помощью стилей css заставим его при наведении курсора мыши растягиваться на всю ширину.
Итоговый код html будет выглядеть следующим образом:
Теперь вставим этот код в процедуру ПриСозданииНаСервере:
Проверяем как это выглядит в режиме 1С:Предприятия
Наводим курсор на квадрат и наблюдаем как он в течение 5 секун плавно растягивается на всю ширину нашего поля:
Платформа 1С для отображения Web содержимого в “Поле HTML документа “, использует компонент Web Browser, входящий в состав этой операционной системы. По умолчанию этот компонент работает в режиме совместимости c IE7. Данный режим безнадежно устарел и большинство современных сайтов не смогут правильно работать.
Примеры ошибок
Ваш браузер не поддерживается Google Maps JavaScript API. Выберите другой.
На этой странице произошла ошибка сценария.
Настройка эмуляции режима совместимости
Для того чтобы “встроенный” браузер заработал в нужном режиме и веб страницы внутри 1С открывались без ошибок, необходимо добавить параметр в реестр операционной системы Windows.
Имя параметра (DWORD): 1Cv8c.exe
Значение (десятичное): 11000
Ветка реестра зависит от разрядности ОС Windows и Платформы 1С.
Для 64 разрядной Windows с установленной 32 разрядной 1С:
Для 64 разрядной Windows с установленной 64 разрядной 1С:
Для 32 разрядной Windows с установленной 32 разрядной 1С:
Пример настройки для 64 разрядной Windows с установленной 32 разрядной 1С
Откройте редактор Реестра
Правым кликом мыши добавьте параметр (DWORD)
Укажите имя 1Cv8c.exe
Откройте параметр и присвойте ему десятичное значение 11000
В результате в реестре появится параметр 1Cv8c.exe со значением
На этом настройка завершена. Браузер 1С будет работать в режиме эмуляции IE11.
Работа с альтернативным интерфейсом на управляемых формах 1С доступна через HTML. Альтернативный интерфейс может понадобиться, если стандартных элементов управления 1С недостаточно, но хочется чего-то большего. В данной статье перечислены некоторые секреты работы с веб-интерфейсом на управляемых формах 8.2.
Показ Html-страницы на управляемой форме 1С
Для показа Html-страницы необходимо на форму вставить Поле Html Документа и в источник данных поместить html-код. Нужно иметь ввиду следующее: тонкий и веб-клиент на Internet Explorer работают по-особенному. В двух этих случаях используется Internet Explorer в режиме совместимости с IE 7.
Первый секрет заключается в том, что тонкий клиент можно перевести в режим совместимости с более старшей версией IE. Для этого нужно использовать meta X-UA-Compatible. Так на Windows 7 после добавления
можно использовать SVG-объекты, например:
Поэтому, если ваша верстка сложнее, чем показ рисунка, то советую сохранить html-код еще и в другом месте.
Хранение всего подряд в общих картинках
Современная веб-страница не ограничена одним только html. К ней в дополнение идут картинки, js/css-файлы. Традиционный подход допускает хранение и обращение к картинкам, помещенным в общие картинки конфигурации, но с js/css 1С-разработчикам приходится исхитряться. Текстовые файлы или записывают в архив и распаковывают перед показом страницы или целиком помещают в html. Такой подход не задействует встроенный практически в каждый браузер кэш для get-запросов.
Мой опыт состоял в том, чтобы поместить в общие картинки java-скрипт. Этот опыт частично удался, т.е. все браузеры и тонкий клиент запустили jQuery, кроме IE. Если кто-нибудь знает секрет и сможет заставить работать этот способ на IE, прошу, отписаться. Действия необходимо делать следующие:
1. Создать общую картинку и поместить в нее любую картинку
2. На html-макете в режиме редактирования выделить любой текст и через меню Элементы-Ссылка выбрать общую картинку
3. Текст из ссылки вставить в блок script
4. Заменить общую картинку на JavaScript-содержимое
Встроенный фреймворк 1С для веб-клиента
Мало кто знает, что веб-клиент 1С включает в себя фреймворк, упрощающий работу с элементами форм. Фреймворк работает на JavaScript. Обращение к нему возможно через parent.WebUI. функции его требуют дополнительных исследований, но свойства выглядят следующим образом:
В теории этот фреймворк можно задействовать для вызова серверных процедур 1С. В этом случае произойдет полная интеграция html-поля с другими элементами управляемой формы, что повлечет платформенную независимость. Сейчас обратная связь достигается за счет WebBrowser Control, который привязан к Windows.
Ключевое слово __STYLE__
Долго ломал голову, что же означает ключевое слово __STYLE__, которое 1С автоматически подставляет в шаблон пустого html-макета. Но исследования запросов показало, что __STYLE__ ничем не заменяется, и на этот запрос сервер возвращает 500 ошибку: Internal Server Error.
В ранних версиях Internet Explorer (далее IE) вплоть до IE8 вызовы функций Javascript (далее JS) можно было осуществлять примерно так:
Начиная с версии IE9 такие вызовы, а также вызовы через eval () не работают, однако именно с этой версии начинается поддержка HTML5 и объекта Canvas, который предоставляет огромные возможности по рисованию, работе с картинками, аудио и видео и т.д. Также начиная с IE9 размер строки картинки в формате Base64 не ограничен (в IE8 - до 32К).
Однако, взаимодействие между Javascript'ом (далее JS) и 1С выглядит не так, как в старых версиях.
Решение:
Решением является использование JS-функции fireEvent.
Далее в статье рассматриваются вызовы 1С->JS и JS->1С для IE9 на примере функций вычисления суммы 2 чисел в 1С и JS. Cоответсвенно, функция JS вызывается из 1С, а 1С-функция - из JS.
Стоит сказать, что описываемая схема передачи параметров функций и их результатов - не единственное возможное решение, но достаточно универсальное.
В обработке к статье - полная версия примера.
Сначала укажем, что наш HTML-код должен выполняться на движке IE9. Для этого в разделе напишем строчку:
Можно обойтись и одним , в нашем примере их несколько для наглядности. Содержимое DIV-контейнера (точнее, свойство innerHTML) имеет строковый тип.
ExtCommand - сюда будем передавать код вызываемой JS-функции.
EventName - здесь будет имя действия, которое нужно выполнить в 1С
BufferData - для передачи параметров или любых других строковых данных
Также нам понадобится невидимая кнопка для вызова JS-функций:
И JS-функция ExecCommand (), которая будет выполнять любой JS-код, передаваемый из 1С.
function ExecCommand ()
<
code = document.getElementById ("ExtCommand").innerHTML;
result = "" + eval (code);
document.getElementById ("BufferData").innerHTML = result;
>
Вызов Javascript из 1С:
Вызов 1С из Javascript:
Разместим на HTML-странице такие элементы:
Их назначение понятно из названий.
Далее функция ExtSum, которая вызывает обработчик ПриНажатии у ПолеHTMLДокумента в 1С:
function ExtSum ()
<
// параметры вызова - имя действия
document.getElementById ("EventName").innerHTML = 'CalcSum';
// параметры действия строкой через точку с запятой
document.getElementById ("BufferData").innerHTML = Val1.value+";"+Val2.value;
var evt = document.createEventObject();
// вызывает обработчик "НТМЛПриНажатии" в 1С
document.body.fireEvent('onclick', evt);
document.getElementById ("Summa").value = document.getElementById ("BufferData").innerHTML;
>
Ну, и обработчик ПриНажатии в 1С:
Этот пример тестировался и работает на платформе 1С 8.3.5.1517, на платформе 8.3.5.1383 выдавалась ошибка, похоже, платформенный баг.
Что делать, если необходим богатый интерфейс, а управляемые формы нам его не могут обеспечить? Использовать HTML и JavaScript. В статье рассмотрено взаимодействие кода 1С и JavaScript, работающее на любой платформе: толстый, тонкий и веб-клиент, под Windows и Linux.
На текущий момент штатные средства 1С в управляемых формах не могут в полной мере удовлетворить потребность в богатом и отзывчивом интерфейсе. Ведь, по словам разработчиков платформы, управляемые формы призваны обеспечить быструю и эффективную разработку бизнес-логики приложения, с некоторым ущербом интерфейсу. Для абсолютного большинства ситуаций это верный подход, но есть случаи, когда необходимо и то, и другое.
Решением является использование HTML и JavaScript.
Предлагается решение, которое работает как в тонком, так и в веб-клиенте. Под Windows и Linux.
Примечание: при упоминании работоспособности в тонком клиенте, также подразумевается работоспособность и в толстом клиенте (управляемое приложение).
Взаимодействие кода 1С и JavaScript.
Вызов методов языка JavaScript из кода 1С.
Методы JavaScript могут быть вызваны из 1C так:
Глобальные переменные доступны следующим образом:
Для браузера Internet Explorer окно документа доступно через
Для остальных браузеров через
Подготовка переменных модуля для взаимодействия с JavaScript и вызов функции:
Подробнее остановимся на передаваемых агрументах.
В тонком клиенте под Windows, помимо примитивных типов Строка, Число, Булево. в функцию JavaScript можно передавать и нативные объекты 1С, такие как Структура, Массив, Соответствие, УправляемаяФорма, и др. Затем, в теле javascript функции доступны свойства и методы этих объектов.
Данный метод очень удобен, и он подходит, если хватает возможности работы в тонком клиенте в ОС Windows.
В тонком клиенте под Linux, а также в веб-клиенте метод не работает. При передаче структур, массивов, соответствий в аргумент функции, в её теле эти агрументы равны undefined. Работает передача строк, чисел, булев.
Функции сериализации и десериализации в/из JSON:
Используются механизмы работы с JSON, реализованные в платформе 8.3.6.1977.
Теперь, прежде чем передавать структуру в функцию JavaScript, преобразуем её в строку:
Изменится и код функции Javascript, так как строку нужно преобразовать обратно в объект, пусть и не 1С-овский, но удобный для обработки:
Глобальный объект JSON, используемый для сериализации и парсинга (десериализации) в javascript, доступен начиная с Internet Explorer 8.
HTML документ в тонком клиенте, по умолчанию, даже при наличии установленного IE11, отображается в режиме совместимости с IE5 (Quirks mode), поэтому необходимо его перевести в Standarts mode установной тега в теле тега head.
Если на компьютере установлен IE7 (когда переход в режим минимум IE8 невозможен), то нужно использовать следующий скрипт: который реализует функционал работы с JSON в IE < 8 (по аналогии с работой с JSON в платформе начиная с версии 8.3.6.1977, и до неё).
В функции javascript можно создавать массивы или объекты javascript, заполнять их, и возвращать в 1C.
Вызов методов 1С из JavaScript
В тонком клиенте под Windows доступен очень удобный метод:
В HTML документе создается глобальная переменная, например externalForm. При загрузке документа, переменной externalForm присваивается ссылка на текущую упрваляемую форму, доступную через ЭтотОбъект или ЭтаФорма.
Затем, в коде JavaScript становятся доступны любые клиентские экспортные методы и переменные модуля данной управляемой формы.
В тонком клиенте на Linux и в веб-клиенте методы и свойства переменной externalForm не доступны в javascript, их значение - undefined, поэтому используется следующая методика:
Объявляем глобальную переменную javascript, в которую будем помещать передаваемое значение.
В документ добавляем невидимую кнопку
Присваиваем передаваемое значение, например имя необходимой функции или любое другое значение, переменной interactionVariable и вызываем нажатие невидимой кнопки.
И обрабатываем событие ПриНажатии у поля HTML документа.
Благодарю за внимание, не претендую на уникальность и надеюсь, что и данная информация будет полезна многим.
Прикреплена демонстрационная обработка.
Специальные предложения
Еще один интересный приём передачи данных JavaScript -> 1C, работающий только в тонком/толстом клиентах на Windows.
(23) unpete, Хоть и не замечал пропусков, но ваш метод всё же, более надёжен, спасибо. Одно непонятно, как поведет себя одновременный .pop() у этого стека в 1С, и .push() в javascript, при отсутствии mutex'ов.
(1)hello is there any english document ? I didnt understand it :) Basicly i need when i click a event in html document i want to start 1c procedure or function how can i do it ?
Прочитал с большим интересом :) В своё время "подружил" HTML-форму c Flash элементом на нём - с передачей данных туда и обратно.. но потом flash умер и всё как то сошло на нет :)
В общем, управляемые формы уже не мучал в этом отношении.
Пишите еще. Интересно, насколько можно улучшить UI у 1С с помощью js - фото и видео бы добавить в следующих статьях.. и посмотреть работу таких фреймворков в окне 1С, как Angular/React/.. и т.п.
Жму руку и буду ждать продолжения..
(2) kote, Постараюсь написать полезный материал.
Исходный код HTML документа можно хранить в макете типа ТекстовыйДокумент. Хотя есть и макет типа Документ HTML, с мгновенным просмотром результата изменений, но хранить код в нем не советую, так как конфигуратор портит код, работающий с новыми версиями браузеров.
Создаете реквизит формы, с типом Строка, переностите его на форму, изменяете тип элемента с Поле ввода на Поле HTML документа. Получаете содержимое макета ТекстовыйДокумент и присваиваете его созданному реквизиту с типом Строка.
(4) vano-ekt, Нужно указывать мета-тег x-ua-compatible для перевода браузера в Standards mode, тогда документ будет отображаться в режиме версии, установленной на компьютере. Тег присутствует в статье. Проблема реальна, когда сборка Windows на компьютере старая, и установлен IE8, или IE7. Поэтому нужно писать разметку HTML таким образом, чтобы обеспечивать совместимость и с этими браузерами.
Для решения которое я разрабатываю, я выбрал минимальный порог - IE8. То есть, если хотите чтобы приложение работало, обновите ваш IE6/7 до IE8, так как для поддержки IE7 нужно слишком много костылей. Такой же порог выбрали и разработчики 1С для веб-клиента.
Надо сделать коллективное обращение в 1С, об отказе использования IE WebContol в толстом/тонком клиентах под Windows, и переход на Webkit, с вшитием его в платформу, то есть чтобы версия Webkit не зависела от того что установлено на компьютере.
Пы.сы. интересная идея возникла, попробовать накидать тестовую страничку для проверки директив ангулара. как найдется минутка накидаю.
(7) vandalsvq, Указание использовать последний доступный Standards mode решает проблемы. Библиотеки работают, так, как нужно.
Как я описал выше, проблема действительно присутствует когда у пользователя просто не установлен на компьютере IE8+.
(6) logarifm, Успокойтесь, отбросьте негатив, попробуйте javascript, весьма вероятно - Вам понравится.
Надо сделать коллективное обращение в 1С, об отказе использования IE WebContol в толстом/тонком клиентах под Windows, и переход на Webkit, с вшитием его в платформу, то есть чтобы версия Webkit не зависела от того что установлено на компьютере.
.. и более того - учитывая сколько геморроя.. не СКОЛЬКО ГЕМОРРОЯ доставляет web-клиент, когда у пользователей постоянно обновляется Хром/Фаерфокс.. может, вообще стоит выпустить СВОЮ СБОРКУ хрома/фаерфокса - которая будет гарантированно работать с 1С через web?
Ведь загвоздка, на самом деле - хоть тонкий клиент и весит меньше, чем дистрибутив броузера - проблема в правах на установку и зависимости тонкого клиента от версии платформы на сервере.. Ну сделали бы как то - вариантов море - например, тонкий клиент, портабельный/не требующий установки - распаковал и работай.. или обновление чтобы не требовало прав на установку ПО.. или вообще - чтоб тонкий клиент не требовал соответствия версии сервера и своей (т.е. по сути специализированный такой броузер базы 1С)..
Подобные обращения писались многократно. Цитирую дословно ответ С. Нуралиева с весеннего партнерского семинара 2015 года: "Это сложно и очень опасно".
Лучше, не базовый Webkit, а Blink с движком V8 (Chromium) - поддержка ES6-ES7 там намного лучше. Например, Object.Observe() или ServiseWorkers работают только в V8. В других javascript движках еще даже не анонсированы.
Проблему подтверждаю. Платформа 1С аварийно завершает работу при нетривиальных манипуляциях с DOM внутри поля HTMLДокумента.
Платформа 1С содержит гениальные объекты данных. Про регистр, документ, справочник и ссылочную типизацию можно говорить только в превосходной степени.
При этом, та же платформа содержит серьёзные архитектурные ошибки в модели тонкого и веб-клиентов. Эти проблемы не решить рефакторингом или оптимизацией, т.к. их корни в постановке задачи, а не в реализации. Попытки применить педали и костыли - естественны. Перед людьми возникают задачи и они пытаются их решать используя доступные в платформе средства.
Читайте также: