Настройка веб-серверов для работы с «1С:Предприятием. Смотреть что такое "веб-клиент" в других словарях Доступ к опубликованной информационной базе

Задача: ускорить работу с программой 1С на рабочих станциях пользователей.
Инструменты: платформа 1Сver8.2 , конфигурация бухгалтерия предприятия КОРП редакции 2.0 и 3.0 , конфигурация зарплата и управление персоналом. Сервер, с windows на который установим web-сервер IIS, браузер, рабочая станция, хотя и не обязательно можно все делать с сервера.

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

  • Очень тяжелом , толстым клиентом , особенно для древнего железа, на ПК выпущенных в 2005 году типа Celeron 2.0 с частотой шины 400 MGz и памятью в 512 Мb работать с 1С 8 просто не возможно, приложение висит так, что радость от покупки современного продукта сразу пропадает. Сначала, после версии 7.7 я недоумевал, почему же клиент 1С 8.2 так тупит. И запросил в 1С системные требования к ПК для работы. И вот какими должны быть минимальные системные требования к рабочей станции для 1С 8.2:
  1. Требования к операционной системе:

1.1. Windows 2000 с пакетом обновлений Service Pack 4

1.2. Windows XP с пакетом обновлений Service Pack 3

1.3. Windows Vista

  1. Минимальный объем оперативной памяти (RAM):

2.1. Для Windows 2000 SP4, Windows XP SP3 - 256 Мб

2.2. Для Windows Vista, Windows 7 - 512 Мб

  1. Требования к процессору (CPU):

3.1. Intel ими AMD с частотой не менее 1,8 Ггц

  1. Требования к видео подсистеме:

4.1. Видеоадаптер с поддержкой разрешения как минимум 1024*768 dpi

4.2. Монитор с разрешающей способностью не менее 1024*768 dpi

  1. Выход в интернет для получения программной лицензии.

На первый взгляд 1С 8.2 не самая требовательная программа. Но от себя хочется добавить, что приятно работать с толстым клиентом 1С на ПК с двухъядерным CPU и RAM в 1Гб, и уж очень не комфортно на устаревшем железе.

  • Используя тонкий клиент . В работе он и правда показался шустрее, для работы использует управляемые формы. А точнее требует для работы бухгалтерии редакции 3.0 , для бухгалтерии редакции 2.0 программного интерфейса для выполнения работ в тонком клиенте, и забегая вперед, web клиенте нет. Так что не удивляйтесь, если открывая, тонкий клиент для работы с 1С, вы увидите закладку рабочий стол, и три пары кнопок и подумаете, что еще бухгалтеру нужно, календарь, чтоб не прозевать отчетность да калькулятор, чтобы начислить зарплату.
    В тонком клиенте для работы программы, может использоваться ключ защиты расположенный как на стороне клиента, так и ключ установленный на web-сервере с 1С 8.2 , причем на web-сервере обязательно должен быть сетевой ключ, то есть если аппаратный, то сетевой (красного цвета ключ сетевой, синего локальный однопользовательский ), а программный ключ сам по себе сетевой. Ну а подсчетом лицензий может заниматься как менеджер лицензий , так и сервер 1С предприятия при наличии лицензии на него.
  • Web клиент , на мой взгляд лучшее решение для работы с программой, к платформе ПО не привязано, да и работать можно хоть с луны при наличии выхода в интернет. В работе такой вариант показался очень шустрым, нагрузка при работе через Web ложится на Web-сервер. И при наличии сильного железа со стороны сервера, вариант работы через web-клиента хорош. Лицензирование при работе через Web-клиент 1C 8.2 осуществляет Web-сервер, менеджер лицензий, или сервер 1С. Web-клиент идеальное решение для работы с 1С, если парк рабочих мест бухгалтеров давно не обновлялся.

Примечание: через web-клиент и тонкий клиент на сегодняшний день, возможным представляется работа только с бухгалтерией 3.0 , да и то функциональность бухгалтерии 3.0 не достигла функциональности бухгалтерии 2.0 об этом можно почитать здесь: http://www.1c.ru/news/info.jsp?id=15068 Конфигурации от 1С для зарплаты и кадры с управляемыми формами пока еще не существует . Есть возможность использовать конфигурацию написанную компанией Камин – «1С-Камин: Зарплата. Версия 5.0»

Настройка 1С 8.2 для работы с тонким и web клиентом

Для работы тонкого клиента 1С вовсе необязательно настраивать web-сервер, тонкий клиент позволяет работать с базой и конфигурацией локально, в сетевом варианте, через сервер 1С предприятия, web-сервер.

Для работы с 1С8.2 через браузер требуется настроить web-сервер. Для этого установим и настроим IIS

  • Устанавливаем IIS

Установка удаление программ -> установка компонентов windows->сервер приложений->состав

  • В папке wwwroot создаем каталог для web-узла 1c8x

  • В папке 1c8x создаем файл default.vrd с следующим содержимым


Xmlns:xs=http://www.w3.org/2001/XMLSchema
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
base="/1c8x"
ib="File=C:\Base;">

Атрибут base указывает на относительный путь к созданной папке виртуального приложения, атрибут ib строку подключения к базе, в данном случае база расположена на том же сервере, что и web-сервер.

  • Создаем новый web-узел или виртуальный каталог

  • Переходим к настройке узла, вкладка домашний каталог, здесь все стандартно:

  • Устанавливаем платформу 1С8X на web-сервер, при установке обязательно устанавливаем модули расширения web-сервера

  • Выполним регистрацию адаптера Web-сервисов. Для этого в свойствах узла 1C8x перейдем на вкладку домашний каталог нажмем кнопку настройка для настройки приложения и добавим сопоставление расширений, файл wsisapi.dll из папки 1cv82\bin

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

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

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

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

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

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

    Итак, требования к проекту: веб-клиент должен делать то же самое, что и тонкий клиент, а именно:
    1. Отображать пользовательский интерфейс
    2. Исполнять клиентский код, написанный на языке 1С
    Пользовательский интерфейс в 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. Элемент управления ФорматированныйДокумент
    3. Элемент управления Планировщик (реализован на JavaScript и в тонком клиенте, и в веб-клиенте)
    4. Веб-клиент
    Структура каждого проекта напоминает структуру Java-проектов (или.NET проектов – кому что ближе); у нас есть неймспейсы, и каждый неймспейс лежит в отдельной папке. Внутри папки лежат файлы и классы неймспейса. В проекте веб-клиента около 1000 файлов.

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

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

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

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

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

    • Собственный обфускатор – 1556 кб
    • Google Closure Compiler – 1073 кб
    Использование Google Closure Compiler помогло нам повысить быстродействие веб-клиента на 30% по сравнению с нашим собственным обфускатором. Кроме того, на 15-25% (в зависимости от браузера) снизился объем памяти, потребляемой приложением.

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

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

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

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

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

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

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

    /** * @constructor * @extends {Base.SrvObject} */ Srv.Core.GenericException = function () { /** * @type {string} * @expose */ this.descr; /** * @type {Srv.Core.GenericException} * @expose */ this.inner; /** * @type {string} * @expose */ this.clsid; /** * @type {boolean} * @expose */ this.encoded; }
    А чтобы избежать обфускации при взаимодействии с другими окнами мы используем так называемые экспортируемые интерфейсы (интерфейсы, у которых все методы являются экспортируемыми).

    /** * Экспортируемый интерфейс контрола DropDownWindow * * @interface * @struct */ WebUI.IDropDownWindowExp = function(){} /** * Перемещает выделение на 1 вперед или назад * * @param {boolean} isForward * @param {boolean} checkOnly * @return {boolean} * @expose */ WebUI.IDropDownWindowExp.prototype.moveMarker = function (isForward, checkOnly){} /** * Перемещает выделение в начало или конец * * @param {boolean} isFirst * @param {boolean} checkOnly * @return {boolean} * @expose */ WebUI.IDropDownWindowExp.prototype.moveMarkerTo = function (isFirst, checkOnly){} /** * @return {boolean} * @expose */ WebUI.IDropDownWindowExp.prototype.selectValue = function (){}

    We used Virtual DOM before it became mainstream)

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

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

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

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

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

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

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


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

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

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

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

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

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

    В случае, когда прикладному решению нужна функциональность, которой нет в JavaScript, мы используем расширения браузеров:
    • для работы с файлами
    • для работы с криптографией
    • работа с внешними компонентами
    Наши расширения состоят из двух частей. Первая часть – то, что называется расширением браузера (как правило, написанные на JavaScript расширения для Chrome и Firefox), которые взаимодействуют со второй частью - бинарным расширением, реализующим нужную нам функциональность. Надо упомянуть, что мы пишем 3 версии бинарных расширений – под Windows, Linux и MacOS. Бинарное расширение поставляется в составе платформы 1С:Предприятие и находится на сервере приложений 1С. При первом вызове с веб-клиента оно загружается на клиентский компьютер и устанавливается в браузере.

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

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

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

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

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

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

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

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

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

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

    Итак, требования к проекту: веб-клиент должен делать то же самое, что и тонкий клиент, а именно:
    1. Отображать пользовательский интерфейс
    2. Исполнять клиентский код, написанный на языке 1С
    Пользовательский интерфейс в 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. Элемент управления ФорматированныйДокумент
    3. Элемент управления Планировщик (реализован на JavaScript и в тонком клиенте, и в веб-клиенте)
    4. Веб-клиент
    Структура каждого проекта напоминает структуру Java-проектов (или.NET проектов – кому что ближе); у нас есть неймспейсы, и каждый неймспейс лежит в отдельной папке. Внутри папки лежат файлы и классы неймспейса. В проекте веб-клиента около 1000 файлов.

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

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

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

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

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

    • Собственный обфускатор – 1556 кб
    • Google Closure Compiler – 1073 кб
    Использование Google Closure Compiler помогло нам повысить быстродействие веб-клиента на 30% по сравнению с нашим собственным обфускатором. Кроме того, на 15-25% (в зависимости от браузера) снизился объем памяти, потребляемой приложением.

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

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

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

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

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

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

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

    /** * @constructor * @extends {Base.SrvObject} */ Srv.Core.GenericException = function () { /** * @type {string} * @expose */ this.descr; /** * @type {Srv.Core.GenericException} * @expose */ this.inner; /** * @type {string} * @expose */ this.clsid; /** * @type {boolean} * @expose */ this.encoded; }
    А чтобы избежать обфускации при взаимодействии с другими окнами мы используем так называемые экспортируемые интерфейсы (интерфейсы, у которых все методы являются экспортируемыми).

    /** * Экспортируемый интерфейс контрола DropDownWindow * * @interface * @struct */ WebUI.IDropDownWindowExp = function(){} /** * Перемещает выделение на 1 вперед или назад * * @param {boolean} isForward * @param {boolean} checkOnly * @return {boolean} * @expose */ WebUI.IDropDownWindowExp.prototype.moveMarker = function (isForward, checkOnly){} /** * Перемещает выделение в начало или конец * * @param {boolean} isFirst * @param {boolean} checkOnly * @return {boolean} * @expose */ WebUI.IDropDownWindowExp.prototype.moveMarkerTo = function (isFirst, checkOnly){} /** * @return {boolean} * @expose */ WebUI.IDropDownWindowExp.prototype.selectValue = function (){}

    We used Virtual DOM before it became mainstream)

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

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

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

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

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

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

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


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

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

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

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

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

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

    В случае, когда прикладному решению нужна функциональность, которой нет в JavaScript, мы используем расширения браузеров:
    • для работы с файлами
    • для работы с криптографией
    • работа с внешними компонентами
    Наши расширения состоят из двух частей. Первая часть – то, что называется расширением браузера (как правило, написанные на JavaScript расширения для Chrome и Firefox), которые взаимодействуют со второй частью - бинарным расширением, реализующим нужную нам функциональность. Надо упомянуть, что мы пишем 3 версии бинарных расширений – под Windows, Linux и MacOS. Бинарное расширение поставляется в составе платформы 1С:Предприятие и находится на сервере приложений 1С. При первом вызове с веб-клиента оно загружается на клиентский компьютер и устанавливается в браузере.

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

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

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

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

    Теги: Добавить метки


    Публикация базы.
    Чтобы запустить 1С Предприятие через браузер, необходимо зайти в Личный кабинет , в разделе "Информационные базы " нажать на название базы 1С, доступ к которой вы желаете открыть.

    В окне информации о базе нажмите кнопку "Опубликовать базу "



    После завершения процесса публикации появится ссылка, с помощью которой вы сможете зайти в базу.


    Настройка и использование веб-браузера Google Chrome

    Для этого откройте меню Инструменты (Tools) , выберите пункт Параметры (Options) , на закладке Расширенные (Under the Hood) нажмите кнопку Настройки содержания (Content settings) и выполните настройки:


    • на закладке Файлы cookie (Cookies) выберите Разрешить сохранять локальные данные (рекомендуется) (Allow local data to be set (recommended)) или настройте исключения;

    • на закладке JavaScript выберите Разрешить всем сайтам использовать JavaScript (рекомендуется) (Allow all sites to run JavaScript (recommended) или настройте исключения;
    • Разрешите всплывающие окна:
      на закладке Всплывающие окна (Pop-ups) выберите Разрешить всплывающие окна для всех сайтов (Allow all sites to show pop-ups) или настройте исключения.
    • Откройте меню Инструменты (Tools) , выберите пункт Параметры (Options) ;
    • На закладке Расширенные (Under the Hood) в разделе Загрузки (Downloads) установите флажок Запрашивать место для сохранения каждого файла перед загрузкой (Ask where to save each file before download) .

    Настройка и использование веб-браузера Microsoft Internet Explorer

    Для того, чтобы отключить блокировку всплывающих окон, нужно нажать кнопку "Сервис " - "Свойства обозревателя ".

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

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

    Особенности использования

    Для работы с веб-клиентом в операционной системе Windows XP SP 2 требуется наличие системной библиотеки jscript.dll версии 5.6.0.8834 или выше.

    Библиотека находится в каталоге system32 операционной системы. Если на вашем компьютере установлена более ранняя версия библиотеки, то возможно значительное замедление работы веб-клиента. Для обновления версии необходимо скачать пакет обновлений, находящийся по адресу http://support.microsoft.com/kb/942840/en-us .

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

    Для использования веб-браузера необходимо выполнить настройку свойств обозревателя. Для этого

    • В меню Сервис (Tools) выберите пункт Свойства обозревателя (Internet Options) и выполните настройки:
    • Разрешите выполнение JavaScript скриптов:
      • на вкладке Безопасность (Security) для зоны Internet нажмите кнопку Другой (Custom level) ;
      • в разделе Сценарии (Scripting) для параметра Активные сценарии (Active scripting) установите Разрешить (Enable) и нажмите кнопку "OK" .
    • Разрешите всплывающие окна:
      • перейдите на вкладку Конфиденциальность (Privacy) ;
      • в разделе Блокирование всплывающих окон (Pop-up Blocker) снимите флажок Блокировать всплывающие окна (Block Pop-ups) .
    • Разрешите использование cookies:
      • на вкладке Конфиденциальность (Privacy) с помощью регулятора выберите уровень использования cookies - не выше Умеренно высокий (Medium High) .

    Если предполагается совместная работа со сканером штрих-кодов, электронными весами или другими внешними компонентами, необходимо выполнить следующую настройку веб-браузера:

    • на вкладке Безопасность (Security) нажмите кнопку Другой (Custom level) ;
    • в открывшемся окне необходимо установить Разрешить (Enable) для следующих параметров:
      • Запрос разрешения для ActiveX объектов (Automatic promting for ActiveX controls) ;
      • Загрузка подписанных ActiveX объектов с разрешения пользователя (Download signed ActiveX controls) ;
      • Работа с ActiveX объектам и плагинами (Run ActiveX controls and plug-ins) ;
      • Работа с объектами, помеченными как безопасные (Script ActiveX controls marked safe for scripting) .

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

    Для настройки языка ввода по умолчанию выполните следующие действия:

    • откройте настройки операционной системы "Язык и региональные стандарты" ("Regional and Languages Options") ;
    • на закладке "Языки" ("Languages") в разделе "Языки и службы текстового ввода" ("Text services and input languages") нажмите кнопку "Подробнее..." ("Details...") ;
    • в открывшемся окне на закладке "Параметры" ("Settings") в разделе "Язык ввода по умолчанию" ("Default input language") выберите нужный язык;
    • нажмите кнопку "OK" .

    При работе в Internet Explorer 8 в некоторых ситуациях при переходе к уже открытому окну из другого окна будет выдаваться диалог с текстом "Нажмите OK для перехода к окну" и кнопкой OK. После нажатия кнопки будет осуществлен переход к окну.

    Особенности использования расширенных средств работы с файлами

    Реализация для Internet Explorer требует установки специального ActiveX компонент "1С:Предприятие 8.2. Расширение работы с файлами для Internet Explorer (x86)" , либо ее 64 разрядный вариант для 64 разрядного Internet Explorer. Компонент включен в платформу, но ее установка должна быть предусмотрена в конфигурации (должен быть реализован вызов метода УстановитьРасширениеРаботыСФайлами).

    Для работы с компонентом, в браузере должны быть предоставлены права на установку и использование подписанных ActiveX компонентов для зоны, в которой находится веб-сайт.

    Настройка и использование веб-браузера Mozilla Firefox

    При первом запуске 1С в браузере, может появится следующее сообщение с предложением установить расширения браузера, разрешите Firefox установить нужное расширение.

    После окончания процесса установки, перезапустите браузер Firefox.

    После выполнения указанных действий, база 1С должна успешно запуститься. Иначе воспользуйтесь следующей инструкцией:

    Особенности использования

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

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

    Для подключения к информационным базам 1С:Предприятия 8 с помощью Mozilla Firefox нужно выполнить следующие настройки:

    • Откройте браузер, в меню Инструменты (Tools) выберите пункт Настройки (Options) ;
    • Содержимое (Content)
      • Снимите флажок ;
      • Установите флажок Использовать JavaScript (Enable JavaScript) .
    • Перейдите в раздел Приватность (Privacy) установите следующие настройки:
      • Установите флажок Принимать cookies с сайтов (Assept cookies from sites) ;
      • Для детальной настройки приема или отклонения cookies щелкните кнопку Исключения (Exeptions) и следуйте пояснениям диалога настройки.

    Модификацию остальных параметров, которые могут потребоваться для работы с веб-клиентом 1С:Предприятия, можно осуществить с помощью команды "Сервис - Настройка веб-браузера" . В окне выполняются настройки, которые можно также выполнить в настройках самого веб-браузера в диалоге запроса привилегий.

    В окне осуществляется настройка следующих параметров обозревателя (в круглых скобках указывается аналогичные параметры настроек веб-браузера):

    • Разрешить работу с буфером обмена, расширением работы с файлами, внешними компонентами (signed.applets.codebase_principal_support) - для работы с буфером обмена, внешними компонентами и расширенной работы с файлами (значение true);
    • Разрешить использование в параметрах строки запуска не латинских символов (network.standard-url.encode-query-utf8) - для использования не латинских символов в адресной строке (значение true);
    • Разрешить использование клавиатуры для переключения между окнами приложений (dom.popup_allowed_events) - для разрешения навигации по окнам приложения с клавиатуры (добавляет к значению параметра событие keydown);
    • Использовать аутентификацию операционной системы (network.automatic-ntlm-auth.trusted-uris) - если установлен, то будет выполняться аутентификация операционной системы.

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

    • Откройте браузер, в меню Инструменты (Tools) выберите пункт Настройки (Options) ;
    • В открывшемся окне перейдите в раздел Основные ;
    • Установите флажок Всегда выдавать запрос на сохранения файла .

    Особенности использования расширенных средств работы с файлами

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

    Расширение для работы с файлами требует предоставления привилегии UniversalXPConnect . Веб-браузер Mozilla FireFox выполняет запрос привилегии интерактивно, но пользователь может запомнить решение для данного веб-сайта.

    Настройка и использование веб-браузера Apple Safari

    Для использования веб-браузера необходимо выполнить настройку свойств обозревателя.

    Для этого откройте меню выберите пункт Настройки (Preferences) и выполните настройки:

    • Разрешите выполнение JavaScript скриптов:
      на закладке Безопасность (Security) выберите Подключить JavaScript (Enable JavaScript)
    • Разрешите использование cookies:
      на закладке Безопасность (Security) в группе Принимать cookies (Accept cookies) выберите Только от посещаемых сайтов (Only from sites I visit) ;
    • Разрешите всплывающие окна:
      на закладке Безопасность (Security) снимите флажок Блокировать всплывающие окна (Block pop-up windows) .
    • В меню Настройки Safari (Safari Settings) выберите пункт Настройки (Preferences) ;
    • На закладке Основные (General) установите флажок Всегда выполнять запрос перед загрузкой (Always prompt before downloading) .

    Помогла ли вам эта статья? Нет Да (Голосов: 19, Рейтинг: 0.95)

    Сегодня оставлю небольшой пост-заметку о настройке 1C 8.3 в части организации доступа через WEB сервер 1С и службы IIS 8.

    Раньше я по старинке давал доступ пользователям к 1С средствами сервера терминалов. Тогда у меня на работе стоял Windows 2003 сервер c 1C версии 7, была лицензия сервера терминалов, где был развернут терминальный сервер. Статью по настройке этого добра я тоже когда-то писал, . Все было норм, но вот теперь у нас появилось новое железо (на базе Intel Xeon CPU E3-1220 v3, 8gb ОЗУ), новая 1С (v 8.3), новая операционная система (WIndows Server 2012 r2).

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

    Подумал о сервере терминалов, но у меня нет лицензии на сервер терминалов (в интернете не нашел, а покупать сказали дорого). Выход подсказали случайно, оказывается есть в 1C поддержка WEB сервера. Так как опыт с тем же Apache у меня есть и принцип работы я знаю, то решил освоить и WEB сервер 1C.

    Установка и проверка всех компонентов

    Начнем настройку с установки компонентов 1С Web сервера. Проверим, что у нас установлен модуль-расширение веб-сервера 1С. Если не установлен ставим.

    Публикуем базу на веб сервер

    Заходим в базу 1С в режиме конфигуратора. Далее идем в меню «Администрирование» - «Публикация на веб-сервере»

    Публикуем!

    Выставляем права на папки 1C

    Следующий шаг, выставить права на следующие папки:

    Папка bin в 1С.

    Права ставим как на скрине ниже в меню безопасность.

    Подключаемся к веб-серверу с компьютеров клиентов

    Для этого создаем подключение к БД 1С - Пишем название подключения -> выбираем На веб-сервере -> далее как на картинке ниже:

    После этого Вам будет доступно подключение к 1С уже через веб-сервер.

    Ошибки с которыми встретился:

    1C8.3 IIS «Обнаружено потенциально опасное значение Request.Path», полученное от клиента

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

    Что нужно сделать:
    1. Открываем IIS. Пуск - Выполнить - находим «Диспетчер служб IIS»
    2. Открываем наш «сайт»
    3. Идем в меню «Сопоставления обработчиков»
    4. Ищем ISAPI-dll , и выбираем изменить.
    5. Меняем путь запроса с «*.dll» на «*», Исполняемый файл (у Вас может быть другая версия 1С просьба быть внимательней) - «C:\Program Files (x86)\1cv8\8.3.6.2390 \bin\wsisapi.dll».
    6. Сохраняем.

    7. Проверяем.

    На этом пока все. Если есть вопросы, постараюсь помочь.