Я расскажу вам про интернет-технологии и их возможное будущее в мире 1С.
Ситуация с интернет-технологиями в 2018 году
Мы живем в удивительное время – сейчас нет таких приложений или устройств, которые бы не работали с интернетом. Интернет-технологии и протокол HTTP – повсюду. Куда ни глянь, в любом месте – везде вы наткнетесь на интернет.
Основной тренд интернет-технологий в 2018 году:
-
Растет популярность концепции микросервисов – маленьких приложений, которые независимы, масштабируемы и т.д. и общаются по HTTP.
-
Создается множество различных интеграционных служб – сейчас в любом чайнике уже есть HTTP-сервер, который позволяет вам управлять чайником с телефона. Это все тоже интернет-технологии.
-
И, что самое интересное, всех этих сервисов нужно все больше и больше – аппетит приходит во время еды. Эта тенденция будет только расти и расти. И скоро уже, наверное, в вилке или в ложке будет стоять какой-нибудь веб-сервер.
Потребность в HTTP-приложениях
Как я уже сказал, потребность в HTTP-приложениях растет. Какими они вообще могут быть?
-
Это могут быть сайты;
-
Сервера с веб-интерфейсами;
-
Админские приложения и инструменты – те же Zabbix, Jenkins – у них у всех есть веб-интерфейс.
Современные приложения, как правило, уже не десктопные. Они уже работают в браузере, и в будущем, на мой взгляд, все будет только больше и больше уходить в веб.
Поэтому, если вам в вашей системе 1С нужно что-то сделать интересное, классное, привлекательное для клиентов – вам тоже, скорее всего, придется смотреть в сторону HTTP-протокола и веб-приложений.
-
Например, вам может потребоваться какой-то красивый современный веб-интерфейс к 1С.
-
Или вам может потребоваться какая-то витрина данных для удаленного филиала, где можно заполнить какие-то три поля, чтобы подать заявку в Service Desk. Это может быть всего лишь одна формочка – отправлять эти данные в 1С может быть даже избыточно.
-
Потребность в HTTP-приложениях в любом случае есть, она понятна, вам всегда может потребоваться что-то, что взаимодействует по HTTP. Обычно для таких вещей приходится привлекать сторонние команды разработчиков, которые знают JavaScript, PHP, NodeJS, т.е. какой-нибудь фреймворк, который умеет вашему приложению (например, вашей 1С) отвечать по HTTP-протоколу. Получается, что вам приходится нанимать веберов и зависеть от них, а они начинают хитрить, говорить, что им некогда, что это стоит много денег и т.д.
-
Но мы, как 1С-ники, можем реализовать такие приложения сами – нам для HTTP-приложений не нужны Node.js-еры или питонщики. Цель этого доклада – рассказать о том, как мы можем делать все это сами.
Типичный пример – у бизнеса появляется классная идея сделать слушалку для запросов клиентов, которая будет по HTTP из базы 1С возвращать какие-то JSON-чики. И ваш заказчик просит вас такую сделать.
Вы говорите – я могу сделать HTTP-сервис на 1С, захостим на наших мощностях, все будет отлично.
Вам говорят – нет, он должен хоститься в Амазоне или в облаке Azure, чтобы был доступ по всему миру – как мы туда 1С прокинем? Нам нужно что-то полегче, чем 1С.
Вы говорите – тогда нужно на Python или на NodeJS писать – я это не умею.
Бизнес говорит – ну придумай что-нибудь, ты же 1С-ник, ты должен уметь все.
И мы начинаем думать, какой инструмент веб-разработки нам, как 1С-никам, подошел бы.
История разработки OneScript.Web
Сейчас хочется немного истории.
-
В 2014 году я на конференции Инфостарта презентовал любопытный инструмент, который я написал. Этот инструмент я назвал OneScript. На тот момент мне хотелось просто поделиться с сообществом тем, что есть такая любопытная штука, с которой можно делать разные интересные вещи.
-
В 2015 году инструментом OneScript заинтересовались в одном крупном федеральном ритейлере, и мы в этой компании начали активно его применять. Это дало очень большой позитивный выхлоп. Впоследствии инструменты, которые там родились, вышли в мир OpenSource.
-
2016-2017 год. Продукт начал широко развиваться – родилось большое количество решений, написанных с его помощью. OneScript стал широко известен в сообществе.
-
По состоянию на сегодняшний день «знание OneScript» – это отдельный навык, который можно встретить в резюме.
-
По сути, мы вместе с вами, с сообществом OpenSource-разработчиков 1С, создали внутри нашей отрасли отдельную отрасль «автоматизации автоматизаторов», продвигая в среде 1С-специалистов такую концепцию, как DevOps.
-
Сегодня OneScript, как инструмент, применяется уже в сотнях компаний, причем, как правило, в крупных, потому что им это нужнее. В мелких компаниях не особо нужно себя автоматизировать, а когда баз становится много, там уже без автоматизации никуда.
-
Мы настроены серьезно и будем продолжать расширять наш инструментарий.
И сегодня я так же, как и в 2014 году, хотел бы анонсировать новый продукт на базе OneScript, который называется OneScript.Web. Это рабочее название. Возможно, кто-то предложит более классное, но пока оно такое.
-
Как я уже говорил, потребность в HTTP-приложениях огромна, рынок требует, чтобы они были.
-
Нам нужно научиться писать их самим, чтобы не зависеть от каких-то сторонних веб-разработчиков – мы можем делать это сами.
-
Причем, это не только сайты, это, скорее, веб-приложения или какие-то REST-сервисы, но и сайты в том числе.
-
Самое главное, что теперь появился инструмент написания веб-приложений на языке 1С.
Архитектура фреймворка 1Script.Web
Как я уже говорил, OneScript.Web сделан на базе уже известного инструмента OneScript.
Архитектурно он основан на кроссплатформенном веб-фреймворке от Microsoft ASP.NET MVC – поэтому, благодаря новому .NET Core, абсолютно кроссплатформенный, будет работать на любых linux-системах и даже в докер-контейнерах.
Иными словами, OneScript.Web – это MVC-фреймворк, которым можно управлять с помощью кода 1С.
Подход MVC
Как работает протокол HTTP? У вас есть некий браузер, в котором клиент в адресной строке что-то вбивает, этот запрос уходит на сервер, там он обрабатывается, и обратно в браузер возвращается ответ. Так работают абсолютно все HTTP-приложения.
И подход MVC – это такой подход к проектированию веб-приложений, когда внутри этого «черного ящика»-сервера обработка HTTP-запроса поделена на три части – модель, контроллер и представление (Model, View и Controller), каждая из которых отвечает за свою осмысленную деятельность.
Если упрощать и возвращаться к 1С, то:
-
Модель – это предметная область, метаданные, то, чем наше приложение вообще занимается. Это какие-то описания реального мира – контрагенты, номенклатура, что угодно.
-
View – это представления, формочки, то, что видит на экране пользователь.
-
А Controller – это входная точка обработки, с которой все начинается. Чаще всего, это либо HTTP-сервис, либо обработчик команды в модуле формы. Прямого аналога в мире 1С нет.
URL – основа навигации по приложению
Взаимодействие с удаленным веб-приложением всегда строится вокруг URL – именно он является «точкой входа» для получения от приложения какой-то информации.
Как правило, URL выглядит следующим образом: есть имя сервера, и дальше через какие-то сегменты (разделы) вы осуществляете навигацию внутри приложения.
Эти сегменты URL можно представить как некие классы внутри приложения, у которых есть методы. То есть, какой-то клиент по этому адресу может запросить у определенного класса вашего приложения вызов определенного действия.
Как вы можете ответить на этот запрос в приложении, написанном на OneScript.Web?
Чтобы запрос по этому адресу смог обрабатываться в вашем коде 1С, вам нужно просто добавить в ваше приложение модуль с соответствующим названием и реализовать в нем обработку этого метода. Например, вы можете создать в модулях приложения контроллер обработки заказа – файл orders.os с методом Details и каким-то параметром этого метода.
Все это довольно гибко настраивается, для этого существует схема шаблонизации:
-
Вы задаете в приложении один или несколько шаблонов маршрута, по которым ваше приложение будет отвечать.
-
Все варианты настройки шаблонов маршрутов я описывать не буду – их очень много.
-
Если в адресной строке будет вбит URL, который не совпадает с шаблоном, программа будет автоматически отвечать «404 Не найдено».
-
А в случае совпадения с шаблоном запрос будет попадать в ваш код – в соответствующий метод контроллера.
Вот так это работает.
Инициализация приложения
Как происходит инициализация приложения?
Вспомним картинку с браузером – HTTP-запрос пролетает некий конвейер. Пришел запрос, как-то обработался, и возник ответ. За то, как этот запрос обрабатывается, отвечает конвейер обработки запроса.
Этот конвейер состоит из кубиков, которые по-английски называются Middleware (софт, который посередине). Я не знаю, как перевести это слово на русский, дам шоколадку тому, кто скажет хороший перевод этого слова на русский язык.
Так вот, путь обработки запроса строится из блоков, кубиков конвейера.
-
Например, приходит HTTP-запрос.
-
Если в нем есть обращение к какому-то статическому файлу на диске, этот файл сразу отдается клиенту. Например, пришел запрос к картинке, которая есть на диске – она отдается клиенту.
-
Дальше проверяется логин-пароль.
-
И, если запрос попадает в шаблонный URL, клиенту возвращается ответ.
Как настроить такой конвейер?
-
В фреймворке есть модуль приложения, и в нем, как в настоящей 1С, есть инициализирующая процедура «ПриНачалеРаботыСистемы».
-
В ней вы можете набрать конвейер, просто вызывая методы приложения, как блоки/кубики, в нужном порядке.
На скриншоте показано, как с помощью кода построить конвейер, который был описан на предыдущем слайде.
Первые две строчки я могу поменять местами. Например, мы не хотим отдавать картинки кому попало, мы хотим, чтобы всегда спрашивался пароль, а только потом отдавались картинки. Тогда мы первые две строчки просто поменяем местами, чтобы у нас сначала спрашивался пароль.
Тогда конвейер будет выглядеть следующим образом:
-
Сначала авторизация;
-
Потом проверка на отдачу статики;
-
И затем бизнес-логика.
Конвейер обработки можно строить любым образом – например, мы можем вообще выкинуть весь этот MVC и просто отдавать статические файлы по паролю – тогда мы можем построить конвейер так, как на слайде.
Соответственно, в процедуре «ПриНачалеРаботыСистемы» мы решаем, что вообще будет делать наше веб-приложение – будет ли в нем нужна авторизация, маршрутизация и пр.
Вызов методов приложения. РезультатДействия
А что же такое Контроллер? Это, как я уже говорил, входная точка, которая обрабатывает запрос.
По сути, это модуль 1С, у которого есть экспортные методы. Все экспортные методы вашего модуля-контроллера доступны извне – внешняя система по URL может вызвать любой экспортный метод вашего контроллера.
Например, метод-действие Details возвращает некое представление – вьюшку «КарточкаТовара». Это – экспортный метод, который вызывается по URL в браузере.
Запрос приходит в контроллер, в нем выполняется некое действие и возвращается результат этого действия, как отдельный объект.
Что такое «Результат действия»? Это – базовый тип для различных вариантов ответа клиенту. Нам необязательно отвечать клиенту именно HTML-страничкой:
-
Мы можем отдать ему с сервера какой-то файл на скачивание;
-
Мы можем ответить ему каким-то JSON или XML;
-
Мы можем просто возвращать коды ошибок – «Не найден», «Не авторизован» и т.д.
HTTP-приложения традиционно отвечают разным типом содержимого. Для каждого из таких типов содержимого в системе предусмотрен отдельный объект:
-
РезультатДействияСодержимое;
-
РезультатДействияФайл;
-
РезультатДействияПредставление;
-
РезультатДействияКодСостояния и т.д.
Контроллер должен вернуть один из таких результатов действия. Это сделано для разделения ответственности, потому что формирование и отправка ответа – это разные действия.
Как верстать страницы?
Итак, самое интересное – как же верстать HTML-страницы?
Понятно, что мы можем ответить XML-кой, но интересно строить еще и интерфейс – красивые формы, чтобы там все было модно-молодежно и т.д. И это – самая сложная часть, потому что мир фронтэнда крайне разнообразен.
-
Существуют тысячи фреймворков и способов формирования веб-интерфейса (HTML-интерфейса). И выбрать какой-то, который был бы прост для вхождения 1С-ников, достаточно сложно – потому что все это выглядит очень низкоуровневым. Вообще, HTML и CSS – это, по сути, язык ассемблера, они очень низкоуровневые, очень избыточные. И мыслить в терминах HTML и CSS – это трудоемко. Нужно что-то более высокоуровневое.
-
Например, уже сейчас с помощью различных JS-фреймворков типа React, Angular и пр. вы можете строить Single Page Application, передавая им на вход JSON-чики, сформированные с помощью Oscript.Web, а какие-то JavaScript-еры вам будут писать интерфейс на Angular.
-
Как я уже говорил, рынку требуется построение фронтэнд-а для 1С. Поэтому мы в «Серебряной пуле» ведем свои исследовательские работы по теме «Фронтэнд для 1С-ников» – об этом вчера рассказывал Алексей Лустин.
-
Также есть доклад Игоря Антонова, который рассказывал, как строить интерфейсы для 1С на React – вы также можете применить его наработки.
И сейчас движок OneScrip.Web предлагает для верстки страниц родной ASP-шаблонизатор, который называется Razor. Он достаточно простой, легковесный и мощный, представляет собой HTML-страницу с вкраплениями кода на C#. Поскольку это родной движок от Microsoft, в него ничего дополнительно не прикручено, поэтому русскоязычная документация, которая есть на сайте Microsoft полностью соответствует тому, что вы можете делать с веб-движком OneScript с помощью Razor.
Выглядит он следующим образом – на слайде показан пример вьюшки из веб-консоли администрирования кластера 1С, которую я покажу в конце своего доклада.
В эту вьюшку передается некий объект языка 1С, который нужно вывести, например, это может быть таблица значений или структура.
И дальше внутри Razor-овской вьюшки вы можете работать с этим объектом, как со структурой – через @ можете обращаться к методам класса 1С, перебрать строки, колонки с помощью цикла «Для каждого из» – что угодно.
Сейчас развитие фреймворков, особенно WebAssembly, идет семимильными шагами.
-
Мы уже можем уйти от HTML и верстать так, как показано на слайде – создавать высокоуровневые компоненты – командные панели, кнопки. Такое можно делать на React или на Blazor.
-
Можно пойти еще дальше и сделать это все через «Новый ВебФронт», о котором рассказывал Алексей.
Вариантов, которые можно было бы применить, очень много. Пока что мы не выбрали какой-то идеальный. Поэтому так же, как это было с обычным OneScript, с OneScript.Web мы тоже рассчитываем на то, что сообщество OpenSource подскажет нам наиболее правильный путь.
Работающие приложения. Odminus
Какие уже существуют работающие приложения, которые можно пощупать?
-
Во-первых, существует хранилище готовых пакетов OneScript – то самое облачное хранилище пакетов, с которого мы все, как девопсеры (те, кто занимается DevOps для 1С), скачиваем готовые приложения. У нас есть консольный пакетный менеджер opm, мы набираем в нем «opm install ЧтоНибудь» – и с этого сайта hub.oscript.io скачивается какой-то пакет. Веб-интерфейс хаба пакетов написан на движке OneScript.Web.
-
Кроме того, мы у себя внутри разрабатываем Личный кабинет клиента «Серебряной пули», тоже на OneScript.Web.
-
И существует еще одна почти готовая разработка, которую можно щупать и смотреть – административная консоль кластера 1С. Называется она Odminus. Название канонично написано через «о», потому что правильный «одмин» всегда пишется через «о».
Что такое Odminus?
-
Это – та самая «Административная консоль управления серверами в кластере 1С», но только в браузере.
-
При этом, за счет того, что она использует сервер администрирования RAS, она еще и не зависит от версий платформы.
-
И, самое главное – не требует регистрации COM-компонент. Зачем я вообще начал ее писать? Потому что каждый раз, когда мне нужно было посмотреть сеансы на сервере или завершить какой-то сеанс, мне приходилось перерегистрировать COM-оснастку, потому что сервер, на котором находится нужный мне сеанс – другой версии. Я выходил из себя из-за того, что мне приходилось делать какие-то лишние телодвижения, чтобы что-то поправить. Поэтому я разработал эту веб-консоль. Теперь, чтобы сделать что-нибудь с кластером, мне достаточно просто зайти на страничку в браузере – ничего не устанавливая и не настраивая.
-
Код открытый, его можно дорабатывать – он написан на 1С. Эту веб-консоль уже сейчас можно брать и дописывать исключительно средствами языка 1С, не изучая вообще никаких PHP.
Выглядит она следующим образом. У приложения в браузере есть статический URL – на главной странице система выводит вам список агентов кластеров, которые вы сюда сами добавили – ваш серверный парк кластеров 1С.
Можно зайти на страницу агента кластера – он покажет, где он хостится, какой у него сетевой порт. Это – честная HTML-ная веб-форма – здесь все, как положено.
Вот так выглядит устройство этого кластера – информационные базы, менеджеры и т.д. Все можно посмотреть.
Можно добавить какой-то рабочий сервер, поработать с объектами кластера.
Можно прямо в браузере отрегулировать интервал перезапуска и лимит по памяти.
Бекэндом для приложения Odminus является код на 1С, реализующий обертку к стандартной консольной утилите от фирмы 1С, которая называется RAC (Remote Administration Client).
Я даже не писал эту обертку сам, ее написал Артем Кузнецов – OpenSource рулит. Я просто скачал с хаба opm готовый пакет, который вы уже сейчас можете использовать. С помощью этой обертки я получил готовую объектную модель для управления своими серверами, чтобы просто писать: Кластер.Серверы(), ИнформационнаяБаза.Сеансы() и прочее.
Я просто взял готовое решение и, вызывая его методы в контроллерах своего приложения, рисую такие веб-формочки. В приведенном на слайде куске кода я получаю кластер по ID, передаю объект кластера в формочку, и она рисуется.
Даже без веб-движка, если вам нужно как-то порулить вашим кластером, вы можете скачать эту библиотеку и в объектной модели работать с кластером 1С без COM, на Linux, без регистрации версий и т.д. Я рассказываю это к тому, что в экосистеме пакетов OneScript уже сейчас представлено очень большое количество инструментов, с которыми можно работать.
Выгоды и перспективы
Зачем все это нужно?
-
Это все нужно для того, чтобы быстро выводить свое решение на рынок. Если у вас или у вашего бизнеса есть некая идея, но вы понимаете, что вам придется для ее реализации пойти покланяться в ножки команде веб-разработчиков – попросить их сделать для вас маленький HTTP-сервис, который будет что-нибудь отвечать. Чтобы этого избежать, остаться в рамках той же команды и решить свою задачу, не завися не от кого и не прося никого – можете воспользоваться инструментом OneScript.Web. Он даст вам быстрый старт уже имеющейся командой, независимо от смежников.
-
Более того, вам не потребуется лицензия 1С на эти серверы. В 1С каждый HTTP-вызов требует лицензию, а OneScript.Web не требует никаких лицензий. Развернули его на сервере и точно так же отвечаете по HTTP, по REST, какими угодно файликами. Никаких лицензий при этом не требуется.
-
Программируете вы все равно на 1С. Это – тот же самый язык 1С, только несколько библиотечек добавлено сверху.
-
Тут еще и удовольствие, что вы изучаете что-то новое, модное. Как я уже говорил, в каждой кофеварке сегодня стоит веб-сервер. OneScript.Web тоже сделан на базе очень легковесного, контейнеризируемого веб-сервера от Microsoft – Kestrel. Если вы вдруг делаете умную кофеварку с HTTP-сервисом, которым хотите управлять с телефона, вы можете залить в нее код на 1С, и он будет работать, потому что занимает очень мало места. OneScript.Web использует новое ядро ASP.NET от Microsoft, которое как раз заточено под такие легковесные приложения. Поэтому вы можете программировать кофеварки на 1С и оставаться при этом в тренде. Это очень круто, на мой взгляд.
Данная статья написана по итогам доклада, прочитанного на конференции INFOSTART EVENT 2018 EDUCATION.