Как взаимодействуют JavaScript и 1С в типовых и кастомных решениях?

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

В современной разработке на платформе 1С:Предприятие язык JavaScript находит широкое применение. Разработчики используют его как для построения интерактивных интерфейсов, недоступных стандартным элементам формы, так и для фоновой обработки данных, рендеринга графиков или интеграции с внешними микросервисами. Разберем подробно, где именно в типовых конфигурациях применяется JavaScript, а также какие способы интеграции и взаимодействия между 1С и JS доступны разработчику.

Применение JavaScript в типовых конфигурациях 1С

Если мы обратимся к типовым конфигурациям на базе Библиотеки стандартных подсистем (БСП) — таким как 1С:ERP, 1С:Комплексная автоматизация, 1С:Управление торговлей, 1С:УНФ и 1С:Документооборот, мы обнаружим JavaScript в следующих механизмах:

  1. Геосервисы и интерактивные карты: интеграция с сервисами Яндекс.Карты или OpenStreetMap. На управляемых формах через элемент ПолеHTMLДокумента отображаются интерактивные карты для построения маршрутов доставки, геозонирования и визуализации адресов клиентов.
  2. WYSIWYG-редакторы и работа с почтой: форматирование исходящих писем, заполнение HTML-шаблонов и редактирование форматированного текста часто используют готовые браузерные JS-редакторы, встроенные в платформу.
  3. Визуализация процессов и предварительный просмотр: в 1С:Документооборот с помощью JS-библиотек строится интерактивная визуализация маршрутов согласования документов и организуется предпросмотр файлов.
  4. Встроенные виджеты коммуникаций: интеграция панелей телефонии, чатов и веб-виджетов взаимодействия с клиентами.

Отображение и двусторонний обмен через ПолеHTMLДокумента

Основным механизмом внедрения JavaScript в пользовательский интерфейс 1С является элемент формы ПолеHTMLДокумента. Он позволяет подключать сторонние библиотеки (например, Chart.js для построения диаграмм или highlight.js для подсветки синтаксиса кода).

Рассмотрим, как организуется обмен данными между платформой 1С и скриптом на веб-странице:

  1. Вызов функций JavaScript из кода 1С: выполняется обращение к объекту документа через контекст формы. Мы можем вызывать глобальные методы страницы через свойство defaultView (или parentWindow), передавая параметры, предварительно сериализованные в формат JSON.
  2. Передача событий из JavaScript в 1С: классическим подходом является инициирование перехода по специальной ссылке с пользовательской схемой (например, location.href = "v8action://myEvent?data=" + encodeURIComponent(data)). На стороне 1С этот переход отслеживается через обработчик события ПриНачалеНавигации элемента формы, где разработчик отменяет переход (устанавливая Отказ = Истина) и считывает переданные параметры.

Выполнение JavaScript на клиенте через COM-объект HTMLFile

В среде Windows под 32-разрядными клиентами для быстрого вычисления JavaScript-выражений или разбора специфических форматов часто применялся системный COM-объект HTMLFile. Посмотрим на пример кода, позволяющего выполнить скрипт напрямую из встроенного языка 1С:


Функция ВыполнитьКодJavaScript(ТекстСкрипта)
    
    ХТМЛ = Новый COMОбъект("HTMLFile");
    ХТМЛ.Open("text/html");
    ХТМЛ.Write("<script type=""text/javascript"">
    |var ХТМЛ;
    |" + ТекстСкрипта + "
    |</script>");
    
    Документ = ХТМЛ.documentElement.document;
    Документ.script.ХТМЛ = ХТМЛ;
    
    Возврат Документ.script;
    
КонецФункции

Важное ограничение: данный способ работает исключительно на платформе Windows и не функционирует на сервере 1С под управлением Linux, а также может вызывать сбои в 64-битных рабочих процессах.

Создание внешних компонент Native API на JavaScript

Платформа 1С:Предприятие штатно поддерживает создание внешних компонент по технологии Native API непосредственно на языке JavaScript для работы в среде веб-клиента. Разработчик подготавливает архив с кодом компоненты и файлом манифеста manifest.xml, после чего подключает его штатным методом:


ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечати", "MyJSComponent", ТипВнешнейКомпоненты.Native);

Это открывает прямой доступ к браузерным интерфейсам, работе с веб-сокетами, криптографией и локальными устройствами без необходимости компиляции C++ библиотек.

Использование Node.js и микросервисной архитектуры

Когда требуется выполнить ресурсоемкую обработку, манипуляции со сложными форматами файлов (например, прямая генерация Word/Excel без установленного MS Office) или использовать пакеты экосистемы npm на сервере, применяют среду выполнения Node.js.

Рассмотрим два подхода к интеграции:

  1. Запуск скрипта через команду операционной системы: КомандаСистемы("node.exe C:\Scripts\generator.js");

    Такой вызов блокирует выполнение текущего потока до завершения процесса ОС и запускает виртуальную машину V8 заново на каждый вызов, что создает накладные расходы по времени.

  2. Взаимодействие по HTTP/REST (рекомендуемый подход):

    Сервис на Node.js запускается как постоянный фоновый веб-сервис. Из кода 1С разработчик отправляет асинхронные или синхронные запросы с помощью встроенных объектов HTTPСоединение и HTTPЗапрос, передавая структурированные данные через JSON. Это обеспечивает максимальную производительность, масштабируемость и полную кроссплатформенность.

Технические нюансы и ограничения

При проектировании решений с использованием JavaScript важно учитывать ограничения платформы:

  1. Различие движков рендеринга: встроенное ПолеHTMLДокумента в зависимости от операционной системы и типа клиента использует Chromium Embedded Framework (CEF) или WebKit. Необходимо тестировать используемый стандарт ECMAScript на всех клиентских рабочих станциях.
  2. Политика безопасности (CORS): скрипты, выполняющиеся внутри HTML-поля 1С, подчиняются стандартным ограничениям безопасности веб-браузеров (Same-Origin Policy), что требует корректной настройки заголовков при прямых AJAX-запросах к внешним API.
← На главную