Разработчики, работающие с платформой «1С:Предприятие 8», часто задаются вопросом: как именно устроена графическая подсистема этой среды? На каком фреймворке построены окна конфигуратора и клиентских приложений? Использует ли 1С популярные кроссплатформенные библиотеки вроде Qt, wxWidgets или JUCE, либо же под капотом скрывается собственное закрытое решение?
В этой статье мы подробно разберем внутреннюю архитектуру графического движка платформы 1С. Выясним, с помощью каких библиотек C++ и системных API отрисовываются управляемые формы на различных операционных системах, как эволюционировал интерфейс платформы и каким образом осуществляется кроссплатформенность.
Для начала разберем главный миф: платформа 1С не использует сторонние коммерческие или открытые GUI-фреймворки общего назначения (такие как Qt) для построения своего основного интерфейса. Вся клиентская часть платформы, написанная преимущественно на языке C++, базируется на собственном проприетарном решении.
Архитектура платформы разделена на множество динамических библиотек. За отрисовку и создание элементов управления отвечает специализированный низкоуровневый компонент — библиотека wbase (в операционной системе Windows она представлена файлом wbase.dll, а в Linux — wbase.so).
Рассмотрим подробнее, за что отвечает библиотека wbase:
wbase динамически рассчитывает размеры и положение элементов «на лету» в зависимости от разрешения экрана, системного масштабирования и размера шрифтов.Поскольку исторически основной операционной системой для платформы «1С:Предприятие» являлась Windows, графические технологии развивались в рамках этой экосистемы. Проанализируем, как менялся подход к рендерингу:
Классический интерфейс (Обычные формы):
В версиях 1С 8.0, 8.1 и на обычных формах в 8.2 интерфейс отрисовывался с помощью стандартных системных графических интерфейсов Windows — GDI (Graphics Device Interface) и GDI+. Обычные формы жестко привязывались к пиксельной сетке. Из-за этого при изменении системного масштаба (DPI) элементы интерфейса часто «плыли», текст становился размытым или не помещался в границы кнопок.
Современный интерфейс «Такси» (Управляемые формы):
С выходом управляемых форм и интерфейса «Такси» разработчики платформы кардинально переработали графический движок. Для поддержки мониторов с высоким разрешением (Ultra HD, 4K) и обеспечения плавной анимации современная платформа 1С v8.3 под Windows задействует аппаратное ускорение.
Рендеринг в управляемом интерфейсе комбинирует низкоуровневые вызовы Direct2D и технологии Direct3D через контекст устройства DXGI. Это позволяет переложить часть задач по отрисовке шрифтов, сглаживанию векторных примитивов и масштабированию окон на графический процессор (видеокарту). Именно поэтому современные формы выглядят четко при любом масштабе операционной системы.
С появлением полноценных клиентских приложений для операционных систем семейства Linux (Ubuntu, Debian, RedHat, Astra Linux) перед разработчиками 1С встала задача перенести C++ движок wbase на Unix-совместимые графические серверы (X11 и Wayland). Рассмотрим, как это было реализовано:
Интеграция с GTK+:
Для создания системных окон, обработки событий мыши, клавиатуры и системного фокуса нативный клиент 1С в Linux использует свободный кроссплатформенный фреймворк GTK+ (в зависимости от релиза платформы задействуются библиотеки GTK+ 2 или GTK+ 3). Системные окна 1С мимикрируют под оформление текущего оконного менеджера Linux за счет вызовов этого API.
Проблема WebKit и отображение HTML:
Для вывода форматированного текста, интерактивных отчетов и полей HTML-документов на Linux-клиенте используется библиотека WebKitGTK (исторически — пакет libwebkitgtk-3.0). Поскольку эта библиотека отвечает за рендеринг веб-содержимого внутри оконного приложения, стабильность работы клиента 1С напрямую зависит от нее.
Системные администраторы часто сталкиваются с тем, что в современных дистрибутивах Linux библиотека webkitgtk старых версий исключена из репозиториев по соображениям безопасности. Без нее нативный клиент 1С может аварийно завершать работу или не запускаться вовсе. Решается эта проблема ручной установкой совместимых пакетов или настройкой символических ссылок на библиотеки совместимости C++ (например, libstdc++.so.6).
Уникальность управляемых форм заключается в том, что декларативное описание интерфейса позволяет запускать бизнес-приложение вообще без установки локального клиента 1С — прямо в обычном веб-браузере. Выясним, как устроен этот процесс:
Когда пользователь открывает базу через веб-клиент:
DOM (Document Object Model).CSS3, которые обеспечивают визуальное соответствие интерфейсу «Такси».JavaScript.Для наглядности рассмотрим пример кода на встроенном языке 1С, который выполняется на клиенте:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ПеременнаяТекста = "Добро пожаловать в веб-клиент!";
ПоказатьПредупреждение(, ПеременнаяТекста);
КонецПроцедуры
При запуске этой формы в веб-клиенте платформа преобразует данную процедуру в JavaScript-функцию, которая обращается к внутреннему JS-фреймворку 1С для вывода модального окна средствами HTML/CSS. Таким образом, в браузере за отрисовку интерфейса отвечают исключительно стандартные веб-технологии, поддерживаемые движками V8, WebKit или Gecko.
В рамках новой ветки развития программных продуктов 1С (таких как «1С:Кабинет сотрудника», «1С:Шина» и др.) активно внедряется технология «1С:Элемент». Проанализируем ключевые отличия этой технологии от классических управляемых форм:
Подводя итог, можно утверждать, что графический интерфейс управляемых форм 1С — это сложная гибридная система. На десктопных ОС Windows и Linux она опирается на собственное высокопроизводительное C++ ядро wbase, тесно интегрированное с системными графическими API (Direct2D/GTK), а в браузерах трансформируется в классическое веб-приложение на базе HTML5 и JavaScript.