Как работает веб клиент 1с
Перейти к содержимому

Как работает веб клиент 1с

  • автор:

Веб-клиент

Веб-клиент — это одно из клиентских приложений системы «1С:Предприятие 8». В отличие от «привычных» клиентских приложений (толстого клиента и тонкого клиента), его не нужно предварительно устанавливать на компьютер пользователя. У веб-клиента нет исполняемого файла. Веб-клиента вы не найдете ни в меню, ни среди исполняемых файлов. Потому он и веб-клиент, что ему для начала работы не нужно иметь никаких файлов на компьютере пользователя.

Веб-клиент, в отличие от толстого и тонкого клиентов, исполняется не в среде операционной системы компьютера, а в среде интернет-браузера (Windows Internet Explorer, Mozilla Firefox, Google Chrome или Safari). Поэтому любому пользователю достаточно всего лишь запустить свой браузер, ввести адрес веб-сервера, на котором опубликована информационная база, — и веб-клиент сам «приедет» к нему на компьютер и начнет исполняться.

Веб-клиент использует технологии DHTML и HTTPRequest. При работе веб-клиента клиентские модули, разработанные в конфигурации, компилируются автоматически из встроенного языка «1С:Предприятия 8» и непосредственно исполняются на стороне веб-клиента.

Таким образом, независимо от клиентского приложения (толстый, тонкий, веб-клиент), вся разработка прикладного решения ведется полностью в конфигураторе 1С:Предприятия, серверный и клиентский код пишется на встроенном языке «1С:Предприятия 8».

Работа в интернет-браузере без установки системы на компьютер пользователя

Для работы в режиме веб-клиента требуется веб-сервер, настроенный на работу с «1С:Предприятием 8». Браузер клиента взаимодействует с веб-сервером по протоколу HTTP или HTTPS. Веб-сервер, в свою очередь, взаимодействует с «1С:Предприятием 8» в файловом или клиент-серверном варианте работы.

В качестве веб-сервера используется Apache или IIS.

Веб-клиент

Progressive Web Apps

В веб-клиенте реализована поддержка технологии PWA (Progressive Web Apps). Эта технология поддерживается браузерами (как настольными, так и мобильными). Она позволяет создавать веб-приложения, которые выглядят как нативные приложения и работают почти так же быстро, как нативные приложения.

В веб-клиенте есть команда, которая устанавливает его как отдельное PWA-приложение. В результате на рабочем столе появляется иконка для запуска приложения. Веб-клиент, запущенный из этой иконки, будет похож на нативное приложение — в нем не будет адресной строки браузера, кнопок Домой, Вперед, Назад и др.

Во встроенном языке реализована объектная модель, которая позволяет устанавливать PWA-приложения и обрабатывать события начала и окончания установки.

Аутентификация OpenID Connect

В веб-клиенте реализована поддержка провайдеров OpenID Connect. Для аутентификации в «1С:Предприятии 8», дополнительно к имеющимся способам, пользователи могут использовать свои учётные данные на других сайтах, поддерживающих OpenID Connect аутентификацию.

Веб-клиент на мобильных устройствах

Реализована ограниченная поддержка работы веб-клиента на мобильных устройствах — в браузере Google Chrome под ОС Android и в браузере Safari на iPhone/iPad. Доступны только основные функции веб-клиента.

Встроенный веб-клиент

Веб-клиент «1С:Предприятия 8» можно встраивать в сторонние сайты и обеспечивать взаимодействие веб-клиента с этими сайтами.

В сочетании с различными режимами основного окна клиентского приложения можно реализовать сценарии, в которых встроенный веб-клиент отображается полностью, либо отображаются отдельные формы веб-клиента.

Встроенный веб-клиент, Встроенный веб-клиент

Встроенный веб-клиент

Авторы: Е.Ю. Хрусталева

Про веб-клиент 1С

Одной из приятных особенностей технологии 1С:Предприятие является то, что прикладное решение, разработанное по технологии управляемых форм, может запускаться как в тонком (исполняемом) клиенте под Windows, Linux, MacOS X, так и как веб-клиент под 5 браузеров – Chrome, Internet Explorer, Firefox, Safari, Edge, и все это – без изменения исходного кода приложения. Более того – внешне приложение в тонком клиенте и в браузере функционирует и выглядит практически идентично.
Найдите 10 отличий (под катом 2 картинки):

Окно тонкого клиента на Linux:

image

То же окно в веб клиенте (в браузере Chrome):

image

Зачем мы сделали веб-клиент? Говоря несколько пафосно, такую задачу перед нами поставило время. Уже давно работа через Интернет стала необходимым условием для бизнес-приложений. Вначале мы добавили возможность работы через Интернет для нашего тонкого клиента (некоторые наши конкуренты, кстати, на этом и остановились; другие, напротив, отказались от тонкого клиента и ограничились реализацией веб-клиента). Мы же решили дать нашим пользователям возможность выбрать тот вариант клиента, который им подходит больше.

image

Добавление возможности работы через Интернет для тонкого клиента было большим проектом с полной сменой архитектуры клиент-серверного взаимодействия. Создание же веб-клиента — и вовсе новый проект, начинавшийся с нуля.

Постановка задачи

Итак, требования к проекту: веб-клиент должен делать то же самое, что и тонкий клиент, а именно:

  1. Отображать пользовательский интерфейс
  2. Исполнять клиентский код, написанный на языке 1С

Клиентский код на языке 1С может содержать в себе серверные вызовы, работу с локальными ресурсами (файлами и т.п.), печать и многое другое.

И тонкий клиент (при работе через веб), и веб-клиент пользуются одним и тем же набором веб-сервисов для общения с сервером приложений 1С. Реализация у клиентов, конечно, разная – тонкий клиент написан на С++, веб-клиент – на JavaScript.

Немного истории

Проект создания веб-клиента стартовал в 2006 году, в нем (в среднем) участвовала команда из 5 человек. На отдельных этапах проекта привлекались разработчики для реализации специфической функциональности (табличного документа, диаграмм и т.д.); как правило, это были те же разработчики, что делали эту функциональность в тонком клиенте. Т.е. разработчики заново писали на JavaScript компоненты, ранее созданные ими на C++.

С самого начала мы отвергли идею какой-либо автоматической (хотя бы частичной) конверсии C++ кода тонкого клиента в JavaScript веб-клиента ввиду сильных концептуальных различий этих двух языков; веб-клиент писался на JavaScript с чистого листа.

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

Первая версия платформы 1С:Предприятие с поддержкой веб-клиента вышла в 2009 году. Веб-клиент на тот момент поддерживал 2 браузера – Internet Explorer и Firefox. В первоначальных планах была поддержка Opera, но из-за непреодолимых на тот момент проблем с обработчиками закрытия приложения в Opera (не удавалось со 100%-ной уверенностью отследить, что приложение закрывается, и в этот момент произвести процедуру отключения от сервера приложений 1С) от этих планов пришлось отказаться.

Структура проекта

Всего в платформе 1С:Предприятие есть 4 проекта, написанных на JavaScript:

  1. WebTools – общие библиотеки, используемые остальными проектами (сюда же мы включаем Google Closure Library).
  2. Элемент управления ФорматированныйДокумент (реализован на JavaScript и в тонком клиенте, и в веб-клиенте)
  3. Элемент управления Планировщик (реализован на JavaScript и в тонком клиенте, и в веб-клиенте)
  4. Веб-клиент

Структурно веб-клиент по-крупному разделяется на следующие подсистемы:

  • Управляемый интерфейс клиентского приложения
    • Общий интерфейс приложения (системные меню, панели)
    • Интерфейс управляемых форм, включающий, в том числе, около 30 элементов управления (кнопки, различные типы полей ввода – текстовые, цифровые, дата/время и пр., таблицы, списки, графики и т.д.)
    • Работа с криптографией
    • Работа с файлами
    • Технология внешних компонент, позволяющая их использовать как в тонком, так и веб-клиенте

    Особенности разработки

    Реализация всего вышеописанного на JavaScript – дело непростое. Возможно, веб-клиент 1С – одно из самых больших client-side приложений, написанных на JavaScript – около 450.000 строк. Мы активно используем в коде веб-клиента объектно-ориентированный подход, упрощающий работу с таким большим проектом.

    Для минимизации размера клиентского кода мы вначале использовали свой собственный обфускатор, а начиная с версии платформы 8.3.6 (октябрь 2014) стали использовать Google Closure Compiler. Эффект использования в цифрах – размер фреймворка веб-клиента после обфускации:

    • Собственный обфускатор – 1556 кб
    • Google Closure Compiler – 1073 кб

    Google Closure Compiler очень хорошо работает с объектно-ориентированным кодом, поэтому его эффективность именно для веб-клиента максимально высокая. Closure Compiler делает для нас несколько хороших вещей:

    • Статическая проверка типов на этапе сборки проекта (обеспечивается тем, что мы покрываем код аннотациями JSDoc). В итоге получается статическая типизация, очень близкая по уровню к типизации в С++. Это помогает отловить достаточно большой процент ошибок на стадии компиляции проекта.
    • Уменьшение размера кода через обфускацию
    • Ряд оптимизаций выполняемого кода, например, такие как:

    • inline-подстановки функций. Вызов функции в JavaScript – достаточно дорогая операция, и inline-подстановки часто используемых небольших методов существенно ускоряют работу кода.
    • Подсчет констант на этапе компиляции. Если выражение зависит от константы, в него будет подставлено фактическое значение константы

    Для анализа кода мы используем SonarQube, куда интегрируем статические анализаторы кода. С помощью анализаторов мы отслеживаем деградацию качества исходного кода на JavaScript и стараемся ее не допускать.

    Какие задачи решали/решаем

    В ходе реализации проекта мы столкнулись с рядом интересных задач, которые нам пришлось решать.

    Обмен данными с сервером и между окнами

    Существуют ситуации, когда обфускирование исходного кода может помешать работе системы. Код, внешний по отношению к исполняемому коду веб-клиента, вследствие обфускации может иметь имена функций и параметров, отличающиеся от тех, которые наш исполняемый код ожидает. Внешним кодом для нас является:

    • Код, приходящий с сервера в виде структур данных
    • Код другого окна приложения
    /** * @constructor * @extends */ Srv.Core.GenericException = function () < /** * @type * @expose */ this.descr; /** * @type * @expose */ this.inner; /** * @type * @expose */ this.clsid; /** * @type * @expose */ this.encoded; >

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

    /** * Экспортируемый интерфейс контрола DropDownWindow * * @interface * @struct */ WebUI.IDropDownWindowExp = function()<> /** * Перемещает выделение на 1 вперед или назад * * @param isForward * @param checkOnly * @return * @expose */ WebUI.IDropDownWindowExp.prototype.moveMarker = function (isForward, checkOnly)<> /** * Перемещает выделение в начало или конец * * @param isFirst * @param checkOnly * @return * @expose */ WebUI.IDropDownWindowExp.prototype.moveMarkerTo = function (isFirst, checkOnly)<> /** * @return * @expose */ WebUI.IDropDownWindowExp.prototype.selectValue = function ()<>
    We used Virtual DOM before it became mainstream)

    Как и все разработчики, имеющие дело со сложным Веб UI, мы быстро поняли, что DOM плохо подходит для работы с динамическим пользовательским интерфейсом. Практически сразу был реализован аналог Virtual DOM для оптимизации работы с UI. В процессе обработки события все изменения DOM запоминаются в памяти и, только при завершении всех операций, накопленные изменения применяются к DOM-дереву.

    Оптимизация работы веб-клиента

    Чтобы наш веб-клиент работал быстрее, мы по максимуму стараемся задействовать штатные возможности браузера (CSS и т.п.). Так, командная панель формы (расположенная практически на каждой форме приложения) отрисовывается исключительно средствами браузера, динамической версткой на базе CSS.

    image

    Тестирование

    Для функционального тестирования и тестирования производительности мы используем инструмент собственного производства (написанный на Java и C++), а также набор тестов, построенных на базе Selenium.

    Наш инструмент универсален – он позволяет тестировать практически любые оконные программы, а потому подходит для тестирования как тонкого клиента, так и веб-клиента. Инструмент записывает действия пользователя, запустившего прикладное решение «1С», в файл-сценарий. В это же время происходит запись изображений рабочей области экрана — эталонов. При контроле новых версий веб-клиента сценарии проигрываются без пользовательского участия. В случаях несовпадения скриншота с эталонным на каком-либо шаге тест считается провалившимся, после чего специалист по качеству проводит расследование – ошибка это или запланированное изменение поведения системы. В случае запланированного поведения эталоны автоматически подменяются на новые.

    Инструмент также проводит замеры производительности приложений с точностью до 25 миллисекунд. В ряде случаев мы закольцовываем части сценария (например, несколько раз повторяем ввод заказа) для анализа деградации времени выполнения со временем. Результаты всех замеров записываются в лог для анализа.

    image

    Наш инструмент тестирования и тестируемое приложение

    Наш инструмент и Selenium дополняют друг друга; например, если какая-то кнопка на одном из экранов поменяла свое местоположение – Selenium это может не отследить, но наш инструмент заметит, т.к. делает попиксельное сравнение скриншота с эталоном. Также инструмент в состоянии отследить проблемы с обработкой ввода с клавиатуры или мыши, так как именно их он и воспроизводит.

    Тесты на обоих инструментах (нашем и Selenium) запускают типовые сценарии работы из наших прикладных решений. Тесты автоматически запускаются после ежедневной сборки платформы «1С:Предприятие». В случае замедления работы сценариев (по сравнению с предыдущей сборкой) мы проводим расследование и устраняем причину замедления. Критерий у нас простой – новая сборка должна работать не медленнее предыдущей.

    Для расследования инцидентов замедления работы разработчики используют разные инструменты; в основном используется Dynatrace AJAX Edition производства компании DynaTrace. Проводится запись логов выполнения проблемной операции на предыдущей и на новой сборке, затем логи анализируются. При этом время выполнения единичных операций (в миллисекундах) может не быть решающим фактором – в браузере периодически запускаются служебные процессы типа уборки мусора, они могут наложиться на время выполнения функций и исказить картину. Более релевантными параметрами в этом случае будет количество выполненных инструкций JavaScript, количество атомарных операций над DOM и т.п. Если количество инструкций/операций в одном и том же сценарии в новой версии увеличилось – это почти всегда означает падение быстродействия, которое нужно исправлять.

    Также одной из причин падения производительности может быть то, что Google Closure Compiler по какой-то причине не смог сделать inline-подстановку функции (например, потому что функция рекурсивная или виртуальная). В этом случае мы стараемся исправить ситуацию, переписав исходный код.

    Расширения браузеров

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

    • для работы с файлами
    • для работы с криптографией
    • работа с внешними компонентами

    При работе в Safari наши расширения используют NPAPI, при работе в Internet Explorer — технологию ActiveX. Microsoft Edge пока не поддерживает расширения, поэтому веб-клиент в нем работает с ограничениями.

    Дальнейшее развитие

    Одна из групп задач для команды разработки веб-клиента – это дальнейшее развитие функциональности. Функциональность веб-клиента должна быть идентична функциональности тонкого клиента, вся новая функциональность реализуется одновременно и в тонком, и в веб-клиенте.

    Другие задачи — развитие архитектуры, рефакторинг, повышение производительности и надежности. Например, одно из направлений – дальнейшее движение в сторону асинхронной модели работы. Часть функциональности веб-клиента на настоящий момент построена на синхронной модели взаимодействия с сервером. Асинхронная модель сейчас становится в браузерах (и не только в браузерах) более актуальной, и это заставляет нас модифицировать веб-клиент путем замены синхронных вызовов на асинхронные (и соответствующего рефакторинга кода). Постепенный переход к асинхронной модели объясняется необходимостью поддержки выпущенных решений и постепенной их адаптации.

    • Блог компании 1С
    • Тестирование IT-систем
    • JavaScript
    • Анализ и проектирование систем

    Веб-клиент 1С

    Анна Викулина

    Консультации от квалифицированных специалистов 1С, удаленно по РФ. Моментальная реакция на заявку. 1-я бесплатно!

    1С КОРП для крупного бизнеса

    1С КОРП для крупного бизнеса

    Максимум возможностей с платформой 1С КОРП! 4 мес. РКЛ в подарок при покупке лицензий уровня КОРП!

    Крупные корпорации, использующие программные продукты 1С в своих отдаленных филиалах, часто сталкиваются с проблемой отсутствия возможности установки 1С на отдельно взятых рабочих местах сотрудников. Иногда причиной этому могут стать устаревшие компьютеры, иногда отдаленность, иногда отсутствие IT-персонала. Разработчики 1С решили эту проблему, начиная с версии платформы 8.2, интегрировав в нее специальный веб-клиент. Организация работы в таком виде клиента позволит существенно сэкономить на модернизации компьютеров и содержании штата администраторов 1С.

    Основной принцип и преимущества веб-клиента 1С

    Внешне веб-клиент ничем не отличается от тонкого клиента, за исключением того, что интерфейс 1С открывается в браузере. Для запуска веб клиентов 1С необходима публикация веб-сервера и наличие Интернета на рабочих местах. За связь базы данных и пользовательского интерфейса веб-клиента отвечает веб-сервер и технологии DHTML и HTTPRequest. В момент работы данные передаются через HTTP на веб-сервер, компилируются, а непосредственно исполнение происходит на стороне клиента, в среде интернет-браузера.

    Основной принцип и преимущества веб-клиента 1С

    Достаточная популярность режима веб клиента 1С объясняется перечнем преимуществ:

    • Отсутствие необходимости устанавливать клиентскую часть 1С на рабочих местах;
    • Обеспечение доступа к базе из любой точки мира с доступом в Интернет;
    • Поддержка любых браузеров и, соответственно, любых операционных систем и всех гаджетов с доступом во всемирную сеть;
    • Техническая простота, так как от пользователя требуется просто запустить браузер и правильно набрать адрес;
    • Специальный режим обмена данными с веб-сервером при низкой скорости Интернета.

    Кроме плюсов, режим веб-клиента имеет и определенные недостатки:

    1. Уязвимость веб-сервера, который становиться доступным в любой точке мира;
    2. Определенные ограничения по обмену данными и эксплуатации файловой системы;
    3. Доступность только для конфигураций, использующих управляемый тип приложения и тонкий клиент;
    4. Недоступность локальных лицензий.

    Если вы твердо решили, что Web-клиент 1С отлично подходит для пользователей, то вам придется настроить и опубликовать веб-сервер. В качестве примера рассмотрим настройку стандартного IIS, встроенного в Windows.

    Настройка и публикация веб-сервера

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

    Чтобы начать настройку сервера зайдите в «Панель управления» -> «Программы и компоненты» -> «Включение или отключение компонентов». Найдите в дереве ветвь «Службы IIS/Службы интернета» и проставьте следующие галки:

    • В разделе «Общие функции HTTP»:
      • «Просмотр каталога»;
      • «Документ по умолчанию»;
      • «Статическое содержимое»;
      • «Ошибки HTTP».
      • «Ведение журнала HTTP»;
      • «Монитор запросов».
      • «ASP»;
      • «ASP.NET»;
      • «Расширение ISAPI»;
      • «Расширяемость .NET»;
      • Фильтры ISAPI».
      • «Консоль управления IIS».

      Настройка и публикация веб-сервера

      Для публикации настроенного сервера необходимо установить модули расширения веб-сервера 1С. Для этого в процессе установки 1С необходимо отметить соответствующий пункт в окне изменения способа установки и установить компоненты. Затем запускайте 1С в режиме конфигуратора с административными правами и нажимайте в меню «Администрирование» -> «Публикация на веб сервере…». Платформа 1С самостоятельно обнаружит настроенный веб-сервер, и вам останется только задать имя базы и ее место расположения.

      Публикация на веб сервере

      После того как вы нажмете кнопку «Опубликовать», сервер должен перезапуститься. Теперь можно проверить выполнение работы, произведя запуск веб клиента 1С, прописав в браузере строку: «http:ИмяСервера/ИмяБазы». Необходимо предусмотреть, чтобы все пользователи имели доступ к месту расположения БД на чтение и запись. В ином случае настройка веб-клиента 1С на рабочих местах не даст результата.

      Веб клиент 1С является удобным инструментом для пользователей, производительность рабочих мест которых оставляет желать лучшего. Благодаря простой настройке, минимальным отличиям в интерфейсе приложения и перечню разнообразных преимуществ, веб клиент завоевал определенную популярность в компаниях различного калибра.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *