Как из 1С открыть HTML-страницу с автоматически заполненными полями

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

В процессе автоматизации бизнес-процессов часто возникает необходимость упростить взаимодействие пользователя с внешними веб-ресурсами. Типичный пример — необходимость открытия страницы активации сервиса (например, отраслевого ИТС) с уже подставленными данными логина, пароля или адреса электронной почты — поможет расширение для автозаполнения логинов и паролей на сайтах. Рассмотрим подробнее, какими способами можно реализовать заполнение полей на стороннем сайте средствами 1С:Предприятие.

Метод 1. Использование параметров URL (GET-запросы)

Прежде чем приступать к сложному программированию, проанализируем самый простой и эффективный способ. Многие веб-сервисы поддерживают передачу данных для полей формы непосредственно в адресной строке, используя так называемые GET-запросы. Разберем по шагам, как это проверить и реализовать.

Для начала нам необходимо выяснить имена атрибутов name или id у интересующих нас полей на целевой странице. Откроем страницу в браузере, нажмем F12 (инструменты разработчика) и исследуем код элементов ввода. Если мы видим теги типа input name="email", есть высокая вероятность, что сайт примет данные через URL.

Сформируем строку адреса в 1С и вызовем стандартное приложение (браузер):


АдресСайта = "https://example.com/activation";
Параметры = "?email=" + ЭлектроннаяПочта + "&login=" + ЛогинПользователя;
ПолнаяСсылка = АдресСайта + Параметры;

ЗапуститьПриложение(ПолнаяСсылка);

Этот метод является наиболее безопасным и быстрым, так как не требует внедрения в структуру страницы. Однако он работает только в том случае, если разработчики сайта предусмотрели такую возможность.

Метод 2. Управление DOM-моделью через Поле HTML-документа

Если передача через URL невозможна, мы можем использовать встроенный в 1С инструмент — Поле HTML-документа. Этот элемент управления позволяет загрузить страницу непосредственно в форму 1С и программно изменять её содержимое. На его основе создаются даже сложные элементы, такие как универсальные поля ввода для веб-клиента или полноценные редакторы форматированного текста. Выясним, как это работает на практике.

Разместим на управляемой форме реквизит с типом «Строка» и установим для него вид «Поле HTML-документа». Основная задача здесь — дождаться полной загрузки страницы, прежде чем пытаться заполнить поля. Для этого проанализируем событие ДокументСформирован.

Пример программного заполнения полей после загрузки:


&НаКлиенте
Процедура ПолеHTMLДокументСформирован(Элемент)
    // Получаем доступ к объектной модели документа (DOM)
    ДокументHTML = Элементы.ПолеHTML.Документ;
    
    // Ищем элементы по их ID и устанавливаем значения
    ПолеEmail = ДокументHTML.getElementById("email");
    Если ПолеEmail <> Неопределено Тогда
        ПолеEmail.value = "user@mail.ru";
    КонецЕсли;
    
    ПолеLogin = ДокументHTML.getElementById("login");
    Если ПолеLogin <> Неопределено Тогда
        ПолеLogin.value = "my_login_123";
    КонецЕсли;
КонецПроцедуры

Важно помнить, что современные сайты часто используют динамическую подгрузку контента (AJAX). В таких ситуациях событие ДокументСформирован может сработать раньше, чем нужные поля появятся в структуре документа. Чтобы решить эту проблему, рассмотрим использование обработчика ожидания, который будет проверять наличие элементов на странице каждые несколько секунд.

Метод 3. Инъекция JavaScript-кода

Иногда прямое обращение к элементам через 1С может быть громоздким. В таких случаях эффективнее выполнить произвольный JavaScript-код в контексте открытой страницы. Этот подход позволяет не только заполнять поля, но и реализовывать сложные интерактивные диаграммы или даже встраивать целые пользовательские интерфейсы на Vue.js — для этого подойдет инструмент создания интерактивных дашбордов и HTML-интерфейсов в 1С. Это позволяет использовать всю мощь языка JS для поиска элементов, например, через querySelector или getElementsByClassName.

Проанализируем пример использования метода ВыполнитьScript:


КодJS = "
|   (function() {
|       var emailField = document.querySelector('input[type=\"email\"]');
|       var loginField = document.querySelector('input[name=\"login\"]');
|       if (emailField) emailField.value = 'test@example.com';
|       if (loginField) loginField.value = 'admin';
|   })();
|";

Элементы.ПолеHTML.ВыполнитьScript(КодJS);

Преимущество этого метода: JavaScript выполняется быстрее внутри движка браузера, и вы можете реализовывать сложную логику поиска элементов, которую трудно описать на языке 1С при работе с COM-объектами или встроенными типами платформы.

Метод 4. Генерация промежуточной локальной страницы

Рассмотрим ситуацию, когда нам нужно вывести пользователю сообщение и кнопку, которая перенаправит его на сайт с уже готовыми данными. Мы можем динамически создать HTML-файл на диске, записать в него нужный скрипт перенаправления или форму, и открыть его через 1С.

Посмотрим на пример формирования такого файла:


&НаСервере
Процедура СформироватьИОткрытьЛокальнуюСтраницу(ТекстСообщения)
    ПутьHTML = "C:\Temp\redirect.html";
    Текст = Новый ТекстовыйДокумент;
    
    Текст.ДобавитьСтроку("<html><body onload='document.forms[0].submit()'>");
    Текст.ДобавитьСтроку("<p>" + ТекстСообщения + "</p>");
    Текст.ДобавитьСтроку("<form method='POST' action='https://site.ru/login'>");
    Текст.ДобавитьСтроку("<input type='hidden' name='email' value='user@mail.ru'>");
    Текст.ДобавитьСтроку("</form></body></html>");
    
    Текст.Записать(ПутьHTML);
    
    #НаКлиенте
    ЗапуститьПриложение(ПутьHTML);
КонецПроцедуры

Этот способ позволяет имитировать отправку POST-запроса, что часто требуется для авторизации, когда передача логина и пароля в открытом виде через URL (GET) запрещена политикой безопасности сайта. Более подробно обмен с сайтом через POST-запросы рассмотрен в отдельной пошаговой инструкции.

Важные замечания по движкам рендеринга

Выясним причину, почему код может работать по-разному на разных компьютерах. Начиная с версии платформы 8.3.14, 1С позволяет выбирать движок для Поля HTML-документа: Internet Explorer или Chromium.

  1. Chromium: Более современный, поддерживает стандарты HTML5/CSS3. Для работы с ним в 1С используется объектная модель, специфичная для платформы.
  2. Internet Explorer (WebBrowser): Использует старую модель COM. Если ваша база работает в режиме совместимости со старыми версиями, обращение к Элементы.ПолеHTML.Документ вернет COM-объект, работа с которым требует синтаксиса, отличного от Chromium.

При использовании Chromium рекомендуется отдавать предпочтение методу ВыполнитьScript, так как он обеспечивает наибольшую кроссплатформенность и стабильность работы формы в тонком и веб-клиентах.

Заключение

Мы разобрали основные стратегии взаимодействия 1С с внешними веб-интерфейсами. Выбор конкретного метода зависит от сложности целевого сайта:

← На главную