Где найти JavaScript-файлы платформы 1С и как интегрировать собственный код

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

При работе с веб-клиентом 1С:Предприятие 8.3 разработчики часто сталкиваются с необходимостью расширить стандартный функционал с помощью собственных JavaScript-скриптов. Типичный сценарий: при анализе страницы в браузере видна ссылка вида scripts?sysver=8.3.15.1565, однако попытки найти соответствующую папку scripts в каталоге установки сервера (особенно на ОС Linux/CentOS) не приносят результата. В этой статье мы разберем внутреннюю архитектуру платформы и выясним, как правильно интегрировать свой код, не пытаясь "взломать" программные файлы 1С.

Почему папки scripts не существует на диске

Проанализируем структуру платформы 1С. В отличие от классических веб-приложений, где статические файлы (JS, CSS, изображения) лежат в открытом виде в директориях веб-сервера, 1С использует механизм динамической генерации контента. Запрос к scripts обрабатывается не файловой системой, а специальным модулем расширения веб-сервера (например, mod_1c20.so для Apache или isapi_1c83.dll для IIS).

Сами исходные коды JavaScript упакованы внутри бинарных ресурсов платформы. В случае CentOS они "зашиты" в библиотеки, такие как core83.so или другие файлы ресурсов в директории /opt/1cv8/x86_64/.... При обращении клиента расширение веб-сервера извлекает нужные скрипты из бинарного файла, формирует общий пакет и отдает его браузеру. Именно поэтому команда locate или поиск по файловой системе ничего не находят.

Способ 1: Использование Поля HTML документа

Если нам нужно запустить свой скрипт (например, для работы с WebSocket по адресу 127.0.0.1:15739), наиболее правильным и безопасным методом в рамках идеологии 1С является использование объекта ПолеHTMLДокумента. Рассмотрим, как это реализовать по шагам.

Во-первых, создадим на управляемой форме реквизит с типом Строка (неограниченной длины) и перетащим его на форму, установив вид Поле HTML документа. Во-вторых, программно сформируем HTML-контент, включающий наш JavaScript.


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ТекстHTML = 
    "<html>
    |<head>
    |<script>
    |   function connectWebSocket() {
    |       var socket = new WebSocket('ws://127.0.0.1:15739');
    |       socket.onopen = function() {
    |           console.log('Соединение установлено');
    |       };
    |       socket.onmessage = function(event) {
    |           // Передаем данные обратно в 1С
    |           window.external.onEvent1C(event.data);
    |       };
    |   }
    |</script>
    |</head>
    |<body onload='connectWebSocket()'>
    |   <h1>WebSocket Bridge Active</h1>
    |</body>
    |</html>";
    
    ЭтаФорма.РеквизитПолеHTML = ТекстHTML;
КонецПроцедуры

Для взаимодействия JavaScript с кодом 1С используем событие ПриНажатии или специализированные обработчики, доступные в ПолеHTMLДокумента. Важно помнить, что в веб-клиенте такой скрипт будет работать в контексте безопасности браузера пользователя. Для реализации нестандартных интерфейсных сценариев в веб-клиенте подойдёт пример использования поля HTML документа для расширения возможностей ввода.

Способ 2: Инъекция скрипта через настройки веб-сервера (Apache)

Если задача стоит более глобально — например, внедрить скрипт во все страницы веб-клиента без изменения конфигурации 1С, мы можем воспользоваться возможностями самого веб-сервера Apache, установленного на CentOS. Разберем ситуацию, когда мы хотим добавить <script src="..."> в поток данных.

Для этого в конфигурационном файле Apache (обычно это /etc/httpd/conf/httpd.conf или файл в conf.d) можно использовать модуль mod_substitute. Проанализируем пример настройки:


<Location "/your_1c_base">
    AddOutputFilterByType SUBSTITUTE text/html
    Substitute "s|</head>|<script src='/my_scripts/custom.js'></script></head>|ni"
</Location>

В данном случае сам файл custom.js должен физически располагаться в папке, к которой у Apache есть доступ (например, /var/www/html/my_scripts/). При каждом запросе страницы веб-клиента Apache будет находить тег </head> и вставлять перед ним ссылку на ваш скрипт. Это позволяет "подмешивать" свой код в среду выполнения 1С, однако следует соблюдать осторожность, чтобы не нарушить работу стандартных функций платформы.

Способ 3: Внешние компоненты (Native API)

Рассмотрим ситуацию, когда JavaScript в браузере не обладает достаточными правами для работы с локальным оборудованием или специфическими портами. В этом случае вместо правки JS-скриптов правильнее будет разработать внешнюю компоненту. Для Linux (CentOS) компоненты пишутся на языке C++ или Rust и компилируются в .so файлы.

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

Особенности работы с WebSocket в разных версиях платформы

Проанализируем версию платформы, указанную в вопросе (8.3.15). На тот момент встроенных средств для прямой работы с протоколом ws:// в языке 1С практически не было. Однако, начиная с версии 8.3.18, в платформе появился объект InternetConnection и расширенная поддержка протоколов связи. Если у вас есть возможность обновить платформу, рекомендуем рассмотреть использование штатных механизмов HTTPСоединение или новых объектов для работы с асинхронными запросами, что может избавить от необходимости внедрения чистого JavaScript.

Выводы и рекомендации

Подведем итог нашему исследованию. Пытаться найти физическую папку scripts на сервере 1С бесполезно — она виртуальна. Для решения задачи подключения по WebSocket мы рекомендуем:

  1. Использовать Поле HTML документа для простых задач интеграции внутри форм.
  2. Использовать модули веб-сервера (Proxy/Substitute) для глобального внедрения скриптов в веб-клиент.
  3. Использовать внешние компоненты, если требуется высокая производительность и работа вне контекста браузера.

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

← На главную