Разработка гибридного web-приложения на 1С, возможности и ограничения

06.09.21

Интеграция - WEB-интеграция

Все чаще разработчики склоняются к использованию 1C в качестве бэкенда при разработке веб-приложений. Но благодаря встраиванию веб-клиента 1С в сайт можно получить еще больше готовой функциональности. О том, как реализовать гибридное приложение за счет связки 1С с другими веб-технологиями, рассказал разработчик компании Neti Эльдар Мингалиев.

Сделайте мне, пожалуйста, скрипт (заказчик)

Я расскажу про свой опыт использования 1C при разработке веб-приложения. Опыт вышел достаточно путаный и продолжительный по времени, поэтому надеюсь, будет интересно.

Меня зовут Эльдар Мингалиев, я разработчик 1C. Начинал свой путь с веб-разработки, трудился в веб-студии на PHP. На 1С разрабатываю 7 лет и люблю комбинировать подходы и технологии. На текущий момент работаю в компании Neti.

 

О задаче

 

 

Расскажу вам небольшую историю о том, как появилась задача разработки гибридного веб-приложения и как она решалась.

Заказчик – владелец таксопарка по франшизе Яндекса. Он пришел к нам со следующей болью: у него было много водителей, и он каждый день тратил очень много времени на выплату денег таксистам.

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

  • каким-то образом получить заявку от водителя – либо он лично приходил в офис, либо звонил, либо как-то иначе оповещал таксопарк о своем желании получить деньги;

  • владелец должен был зайти в диспетчерскую, посмотреть, какой у водителя баланс, сравнить с той суммой, которую он запросил;

  • потом посчитать и отнять коэффициенты таксопарка, зайти в платежную систему, выплатить;

  • потом зайти снова в диспетчерскую и списать эту сумму с баланса у водителя.

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

В компании, так как она достаточно молодая, не было никакой автоматизации, кроме веб-клиента диспетчерской Яндекса, а он не подразумевал какую-то доработку или кастомизацию.

Также у владельца таксопарка был доступ к API Яндекс.Такси и к API платежной системы Qiwi, которая использовалась для выплат сотрудникам.

 

Идеи, как все реализовать

 

Настало время подумать над тем, как это реализовать. Я не сторонник использовать большие фреймворки для маленьких задач, и было пока неясно, насколько это все «взлетит», будет ли это пользоваться популярностью у водителей и понравится ли владельцу – все было достаточно туманно.

Поэтому я предложил использовать PHP, написать небольшой скрипт, который, используя интеграцию, позволил бы выполнять в простой HTML форме.

 

 

Но тут пришел заказчик и сказал: «А я еще хочу, чтобы хранилась история выплат».

Тогда к PHP добавился еще MySQL.

 

 

Результат на первой итерации

 

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

Я сдал первый скрипт, и в целом он работал.

 

Но, когда заказчик увидел, как это работает, и сколько времени на другие дела у него появилось, он попросил еще:

  • статистику выплат;

  • автоплатеж с настройками;

  • возможность видеть несколько таксопарков в одной системе.

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

 

Результат на второй итерации

 

 

В результате, примерно за два месяца родился второй релиз кабинета владельца.

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

В этом интерфейсе мы можем:

  • управлять водителями;

  • заводить таксопарки;

  • если что-то не подтянулось автоматически, можем загрузить это по кнопке;

  • можем статистику посмотреть и т.д.

На рынке в этот момент были конкуренты и аналоги, которые предоставляли такие возможности, какие хотел мой заказчик. Но в определенный момент два крупных игрока рынка были скомпрометированы, и данные Яндекс.Таксометра и платежных систем утекли в публичный доступ. В связи с этим заказчик на меня еще сильнее насел, чтобы сделать свое, максимально защищенное от атак извне, и так как не публичное, привлекающее меньше внимания возможных взломщиков. Пришлось в экстренном порядке прокачать базовые навыки по обеспечению безопасности.

 

Дальнейший процесс разработки

 

 

Требования поступали регулярно, поэтому процесс разработки продолжился. Заказчик все больше и больше входил во вкус, ему все больше и больше нравилось то, как автоматизация решает его проблемы.

Он стал добавлять новые требования, с каждым разом все грандиознее – например, попросил сделать личный кабинет водителя, чтобы водитель сам себе мог делать выплаты.

 

 

Я эту задачу сделал, личный кабинет водителя у нас появился. Но его увязка с существующими бизнес-процессами потребовала больших усилий. Мне это все переставало нравиться, потому что каждый раз приходилось всякий раз практически полностью изменять архитектуру проекта и базы.

 

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

Но требования заказчика росли и накапливались. Он хотел:

  • выгрузку статистики в Excel;

  • печатные формы, которые можно было бы сдавать в налоговую;

  • журнал ошибок и действий в системе

  • антифрод выплат;

  • ручную активацию/деактивацию водителя в системе

  • выплаты через ведомость Сбербанка;

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

На чистом PHP с использованием сторонних библиотек это все можно сделать, но это занимает много времени. А я, как разработчик 1С, всегда смотрел на то, как это все реализовано в 1С, как там все это просто сделать – и печатную форму, и статистику в Excel выгрузить.

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

 

 

Фреймворк поможет структурировать код, там будет встроенная авторизация, инструменты миграции и реструктуризации базы. Потому что, разрабатывая приложения на чистом PHP, я столкнулся с тем, что внесение изменений в СУБД – достаточно тяжелая для разработчика операция. Нужно всегда держать в голове все взаимосвязи и сущности в базе, и, если ты изменил одну колонку, надо правильно реструктуризировать и перенести данные на новую структуру. В 1С эта задача решена классно, поэтому дальше об этом поговорим.

 

 

Первоначально схема приложения у нас выглядела так:

  • у нас был Linux-хостинг. На нем стоял Apache, MySQL;

  • регламентные задания выполнялись в Cron;

  • управлял всем PHP;

  • админку для владельца и личный кабинет водителя мы сделали на традиционных HTML и JS с использованием Bootstrap и AdminLTE;

  • кэши пользователей мы хранили в Redis.

 

Выбор фреймворка

После некоторых раздумий мы приступили к выбору фреймворка. Нам были важны такие моменты, как:

  • скорость переноса проекта на новые рельсы;

  • скорость внедрения новых возможностей;

  • широкий инструментарий для управления системой;

  • совокупная стоимость владения системой.

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

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

  • сделать сущность в базе;

  • написать обертки для операций CRUD;

  • нарисовать вью, который отображает список;

  • вью, который отображает объект;

  • вью, который позволяет редактировать объект.

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

Я выбирал из трех PHP-фреймворков – Laravel, YII, Codelgniter.

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

Да, для каждого из этих фреймворков есть RBAC плагины (Role Based Access Control – то, что у нас называется ролями пользователя) содержащие какие-то минимальные возможности для управления доступом на уровне записей, но они требовали время на изучение, внедрение и доработку, а в исходном виде они не позволяли настроить доступ так, как нам хотелось.

Фреймворк я выбирал по следующим критериям:

  • Laravel я достаточно хорошо изучил, но у него был минус с моделью управления доступом, про который я сказал.

  • YII не был мною изучен, и к тому времени устарел. Когда выйдет новая версия – непонятно, а брать что-то старое мне не хотелось.

  • Codelgniter тоже не был мною изучен и тоже требовал доработки модели управления доступом.

Я сделал выбор в пользу Laravel, и начал делать небольшой прототип.

Но пока я делал прототип, ко мне пришел заказчик и сказал: «Я видел 1С, на нем все быстро и удобно, дизайн мне понравился. А еще я пообщался с конкурентами, они сделали себе такую систему на 1С, и у них все хорошо».

В результате мы добавили к сравнению 1С.

Естественно, у 1С в данном случае есть свои недостатки:

  • скорее всего, будут проблемы с кастомизацией интерфейса – если заказчик захочет что-то очень красивое или необычное, это, скорее всего, сделать это будет либо очень сложно, либо невозможно;

  • нужны лицензии;

  • есть проблемы с отображением веб-клиента на смартфоне.

Но я добавил Laravel еще один минус:

  • по сравнению с 1С у Laravel более медленный процесс разработки форм и классов – в 1С, как мы все знаем, это очень быстро, если мы написали backend, то добавить frontend почти ничего не стоит.

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

 

Web-приложение на 1С

 

 

Система была построена следующим образом.

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

  • Также хочу отметить HTTP-коннектор от Владимира Бондаревского для работы с внешними API. Это решение развязало мне руки, и я смог настраивать и конфигурировать интеграцию с внешними API Qiwi и Яндекс достаточно быстро и просто – достаточно только разобрать структуру входного и выходного сообщения. Проблемы с редиректами, доступностью и преобразованием данных HTTP-коннектор берет на себя.

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

  • Личный кабинет для водителя я оставил на PHP + JS. Он уже написан, и мне ничего не помешало использовать уже готовую функциональность. В данном случае решено было оставить личный кабинет водителя на PHP + JS, потому что у водителей разные устройства. Это решение позволило добиться максимальной кроссплатформенности, максимальной легкости в разработке и деплое.

 

Встроенный веб-клиент для личного кабинета владельца

 

 

Переходим дальше. На слайде я демонстрирую работу встроенного веб-клиента.

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

Хочу обратить внимание на адресную строку. Это не такой адрес, как формирует 1С по умолчанию. И в этом главная сила того, что появилось во встраиваемом веб-клиенте.

 

 

Теперь веб-клиент 1С может быть частью веб-приложения.

  • Мы можем навести максимальную красоту в маршрутизации нашего приложения. 1С – это больше не нечто отдельно стоящее, что требует особенного ухода или сильно выбивается из бизнес-процесса остального сайта.

  • Также мы получили возможность влиять на поведение веб-клиента извне. Например, как я сделал: убрал окно стартера, сделал кастомную авторизацию. Мы можем отправлять сообщения из веб-клиента в родительский сайт и из родительского сайта в веб-клиент и определять таким образом поведение страницы.

  • Мы получили возможность кастомизировать интерфейс. Я убрал лишние кнопки-бургеры, чтобы ограничить возможности по открытию окна «Все функции», открытию файла, переходу в подсистемы и т.д.

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

 

 

Давайте погрузимся в «недра». На слайде я демонстрирую, как скрыть окно загрузки и вместо него установить спиннер.

Ничего особенного здесь не сделано. По большей части этот код представлен в документации на ИТС. Единственное, что я добавил:

  • в начале у нас создается блок с id=’webClientContainer’ со «скрытой» видимостью (visibility: hidden);

  • а в момент, когда веб-клиент загрузился (функция onStartWebClient), у нас этот блок ставится «видимым» (visibility: visible);

  • также при старте запускается спиннер – блок с id=’page-preloader’, и в момент, когда приложение загружено, спиннер отключается.

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

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

 

 

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

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

Здесь я получаю сформированный документ, когда он готов, удаляю не нужные мне элементы, и добавляю новый класс ‘pulsing’ – он работает в момент, когда человек в первый раз зашел в нашу систему, чтобы подсветить ему важные элементы в веб-клиенте.

 

 

Личный кабинет водителя

 

Для личного кабинета водителя у нас устроена двухфакторная аутентификация. Мы отправляем код, обработка кода осуществляется в 1С.

Вы можете видеть, что с момента нажатия на кнопку «Отправить код» до выдачи сообщения о том, что код отправлен, проходит немного времени.

Также для входа в сам личный кабинет не требуется много времени, значит, 1С работает достаточно быстро.

Личный кабинет построен на PHP + JS. PHP получает данные из 1С, для этого написан минимальный коннектор к HTTP-сервисам 1С, и личный кабинет эти данные успешно получает. Задержки при получении данных минимальные. Сейчас у нас около 150 пользователей, которые периодически заходят в нашу систему для использования функциональности выплат – нагрузка не ощущается и незаметна.

Личный кабинет написан с использованием Bootstrap. Я, к сожалению, не дизайнер и не верстальщик, я разработчик, и Bootstrap позволил сделать этот личный кабинет хоть немного похожим на что-то стоящее, потому что до этого он выглядел совсем ужасно.

Личный кабинет умеет загружать фотографии в 1С, в том числе и с камеры смартфона, умеет отображать эти фотографии.

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

 

 

Текущая архитектура компонентов выглядит следующим образом.

  • На Windows-VDS стоит 1С и PostgreSQL.

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

  • Еще стоит Apache, на котором опубликована 1С и крутятся скрипты на PHP.

  • Личный кабинет остался на PHP + JS.

  • А админкой для владельца стал веб-клиент 1С.

  • Кэши пользователей все так же храним в Redis.

 

Результаты после года работы

 

 

Что можно отметить после более чем года работы в такой связке?

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

  • Встраиваемый веб-клиент работает стабильно, ни одной серьезной проблемы я с ним не встречал за все это время.

  • Даже в файловом варианте скорость работы была достаточно высокая.

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

 

 

Мне стало интересно, насколько быстро работает 1С, и я сделал нагрузочные тесты с использованием jmeter. Для тех, кто не осведомлен, – это разработка Apache на Java, которая позволяет запустить какое-то количество запросов, указанное в настройках теста, в многопоточном режиме.

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

Я представил небольшие описания машин, на которых это запускалось:

  • Файловая 1С была установлена локально на SSD, оперативы 16 gb процессор Ryzen 5 3600.

  • Удаленная база на PostgreSQL – это Intel Core 2.6 ГГц, 6 ГБ оперативы и HDD.

В таблице нагрузочных тестов первая строка для файловой базы, вторая – для базы с PostgreSQL.

  • Видно, что отправлялось 400 пакетов.

  • Средний запрос

    • в файловую базу занимает почти 5000 миллисекунд. Этот показатель получается, когда у нас очень много одновременных коннектов и время ожидания растет;

    • средний запрос к базе на PostgreSQL занимает 1,5 тысячи миллисекунд, грубо говоря, 1,5 секунды.

  • Как можно увидеть на показателях min и max:

    • деградация производительности при использовании PostgreSQL и кластера серверов даже на более слабой машине заметно меньше. То есть при увеличении количества соединений максимальное время растет не такими большими темпами, как на файловой базе.

    • Но и на файловой базе скорость вполне удовлетворительная.

  • Также мы можем увидеть в последней колонке (throughput – количество запросов в секунду):

    • на файловой базе количество запросов в секунду больше;

    • но на PostgreSQL количество запросов в секунду ненамного меньше, и их скорость более линейна. При дальнейшем масштабировании базы PostgreSQL будет вести себя более предсказуемо.

 

Немного про Redis

 

 

Расскажу немного про Redis.

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

Не хотелось делать анонимную авторизацию в 1С, поскольку это совсем уж дырка в безопасности, поэтому решили хранить данные сессии в Redis – так как эти данные нужны до момента аутентификации в 1С, под них нужно отдельное хранилище.

К тому же связка с Redis позволяет нам в дальнейшем масштабировать личный кабинет, хранить статику в кэшах, следить за статикой – тоже будет достаточно просто.

Для удобства администрирования Redis, чтобы не сидеть в консоли, есть хороший клиент phpRedisAdmin, который позволяет подконнектиться к Redis, посмотреть все ключи и информацию по ним

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

 

 

Хочу добавить про Redis и безопасность, которая стала краеугольным камнем.

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

Redis же поступает наоборот – он по умолчанию при установке открывают порт и доступен всем извне. Для меня это было новостью, я не опытный пользователь Redis, и анализируя логи и записи в базе, я обнаружил неприятные вещи: кто-то пытался атаковать наш сервер через возможные уязвимости в коде обрабатывающего данные из Redis. Но из-за того что в коде не было подобных уязвимостей, win-инфраструктуры и 1С эти поптыки были обречены на провал. Так что обязательно при установке Redis закрывайте порт Redis от подключений извне.

 

Резюме

 

 

Какие выводы можно сделать по результатам работы:

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

  • За год с лишним онлайна ни один из элементов стека не проявил сильных недостатков. За исключением Redis – я не знал, что нужно закрывать порт.

  • Количество возможностей для работы с 1С в браузере увеличилось в разы благодаря встроенному веб-клиенту.

  • Хочу всем посоветовать не замыкаться на 1С – комбинация технологий поможет получить наилучший результат.

 

Вопросы

 

Как удалось убрать начальное окно загрузки? Пришлось залезать внутрь платформы?

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

А сам логин/пароль каким образом передают в 1С?

Логин и пароль передается в строке подключения.

Какое максимальное количество пользователей вам удалось подключить?

У нас около 150 пользователей, активно использующих систему. Это водители. Но они не работают, как правило, 8 часов 7 дней в неделю, они работают несколько часов в неделю или когда есть свободное время. И у них потребность в сервисе не настолько постоянная, они используют его час в неделю, грубо говоря. Но эти 100-150 пользователей регулярно заходят и что-то делают в системе.

Количество одновременных пользователей вы не замеряли?

Замеряли. Мы, как честные люди, захотели сделать все по-правильному и максимально разобраться с вопросом клиентского лицензирования – изучили материалы на ИТС, использовали Aladdin Monitor, чтобы убедиться, точно ли не используется лицензия при запросах к базе от кабинетов водителей. Да, при подключении водителей к HTTP-сервисам лицензия не тратится, но мы обязаны для всех одновременных пользователей иметь ключи. Мы замерили и до сих пор постоянно замеряем, сколько у нас пользователей могут работать одновременно – при старте сессии мы на кластере смотрим активные соединения. И как только у нас увеличивается количество пользователей, мы принимаем решение о докупке лицензий. В текущий момент максимум, который у нас был, это 50 пользователей. Мы так посчитали, что в принципе при такой загрузке количество потенциальных пользователей можно делить на 5 и иметь столько ключей. То есть их не так много получается.

Это у вас клиент-серверная база или файловая?

Клиент-серверная, но раньше она была файловая. Но разницы тут особенно никакой, кроме того, что пришлось купить еще лицензию на сервер.

И даже файловая база у вас такой объем пользователей тянула?

Да, без проблем.

Как на мобильных устройствах отображается?

Личный кабинет водителя заточен для просмотра на смартфоне. И слайды, которые я показывал, это то, как он выглядит у пользователей - Developer Tools браузера позволяет отобразить, как интерфейс будет выглядеть на смартфоне.

То есть интерфейс вполне нормально работает на мобильных устройствах, и с этим проблем нет?

Да. Владелец таксопарка использует либо компьютер, либо iPad. А там достаточно большой экран, поэтому с веб-клиентом проблем нет.

Почему не рассматривался личный кабинет на чистом JS-фреймворке + 1С без PHP?

Мне не нравится подход использования интеграции с платежными данными на клиенте. Я не хотел, чтобы эти данные были видны на клиенте, поэтому весь процессинг происходит в PHP на сервере. На клиенте мы только видим отображение и рендеринг.

А если на форме надо вывести два отчета из одной базы 1С в двух фреймах. Это две сессии 1С или одна?

Это две сессии.

Веб-клиент не потребляет лицензию?

Потребляет. Как раз веб-клиент здесь – самый большой потребитель лицензии, потому что сессия http-соединения длится, конечно, в зависимости от того, как мы настроили, может, 20 секунд, а может, 5, а может, и бесконечно. А веб-клиент живет достаточно долго, потому что там и операций больше выполняется, и данные постоянно обновляются.

В докладе была фраза «подсветить нужный элемент в веб-клиенте». То есть вы из JavaScript управляли элементами самого веб-клиента или фрейма, в котором он находится?

Нам доступна вся верстка во фрейме, в котором он выводится. И поэтому мы можем делать там все, что угодно. В определенных рамках, конечно, но можем.

Даже версткой самого веб-клиента управлять?

Да. Я же показывал в презентации, что удалил лишние кнопки, которые мне были не нужны.

 

*************

Данная статья написана по итогам доклада (видео), прочитанного на онлайн-митапе "Web-клиенты для 1С".

 

Другие публикации:

Разбираемся с web-kit в 1С, на примере интеграции TinyMCE в управляемую форму в УТ 11.4.

Веб-форма авторизации/регистрации/восстановления пароля для веб-клиента 1С с помощью HTML/CSS/PHP/HTTP-сервисов 1С

 

 

Приглашаем на конференции Инфостарта 2025 года

INFOSTART TEAMLEAD EVENT

Не только для разработчиков, но и для руководителей отделов разработки, тимлидов и ИТ-директоров.
Место: Москва
Даты: 24-25 февраля 2025 г.

Подробнее

INFOSTART A&PM EVENT (Анализ & Управление проектами)

Практическая конференция для аналитиков и руководителей проектов 1С.
Место: Санкт-Петербург
Даты: 29-31 мая 2025 г.

Подробнее


Web-клиент HTTP-сервисы интеграция web-приложение Веб-клиент

См. также

WEB-интеграция Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Функциональное решение для торговли на всех популярных маркетплейсах. Работает со схемами FBO и FBS. Простое в использовании и установке, не вносит изменения в код программы. Существенно упрощает работу с товарным ассортиментом, обработку заказов с площадок, работу с поставками, а также ведение аналитики по продажам и остаткам.

119999 руб.

19.07.2024    1768    52    0    

3

WEB-интеграция Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    17969    49    50    

29

Обмен с ГосИС Мастера заполнения WEB-интеграция Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет Оперативный учет Управляемые формы 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Универсальное расширение конфигурации для автоматической загрузки и заполнения реквизитов контрагентов (партнеров) из ОГРН для 1С:ERP Управление предприятием 2 (1С:ERP Управление предприятием 2, редакция 2.4), 1С:ERP Управление предприятием 2 (1С:ERP Управление предприятием 2, редакция 2.2), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.5), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.4), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.3), 1С:Управление торговлей 8 (Управление торговлей, редакция 11.2), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.4), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.2), 1С:Комплексная автоматизация 8 (1С:Комплексная автоматизация, редакция 2.0) и 1С:Бухгалтерия 8 (Бухгалтерия предприятия, редакция 3.0).

3900 руб.

08.11.2017    63569    407    295    

73

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    14332    42    8    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Steelvan 306 07.09.21 11:30 Сейчас в теме
Что мешало хранить часто забываемые пароли в печеньках в обозревателе клиента ?
Что мешало добавить кнопку "Напомнить пароль" с отправкой забытого пароля в беседку, СМС или на почту ?

Это же обычная практика для веба.
Бэнни; +1 Ответить
2. Бэнни 209 07.09.21 12:44 Сейчас в теме
(1)Заказчиком выбрана стратегия с двухфакторной аутентификацией, пароль выдается на сессию. Если сессию принудительно не завершать кнопкой "Выйти", то сессия условно бессмертная.
Пароли хранить в куках нельзя из соображений безопасности. В куках можно хранить токен авторизованной сессии, что собсно и происходит, а все сессионные данные лежат в Redis, куда имеет доступ только сервер.
"Напомнить пароль", так же не актуально, в связи с выбранной заказчиком стратегии аутентификации
3. ixijixi 1909 07.09.21 14:57 Сейчас в теме
Логин и пароль передается в строке подключения.
Это разве безопасно? Специалисты, просветите.
Бэнни; +1 Ответить
4. Steelvan 306 07.09.21 18:49 Сейчас в теме
(3) Если https, то все данные шифруются.
Это же шифрование применяют на сайтах, где принимаю оплату насвязи.
Вот и прикинь насколько безопасно :)

Но это только при условии, что https соединение уже установлено.
Если это первый взять запрос к серверу, то любой прокси сервер данные перехватит.

Плюс если http без шифрования, то любой прокси сервер данные перехватит даже в процессе работы, когда соединение уже установлено.
Бэнни; +1 Ответить
5. Steelvan 306 08.09.21 12:49 Сейчас в теме
(2)

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

Например, мы храним внутренний ид справочника "Учетки".
При запросе от клиента просто берем ид из заголовка и ищем ссылку по этой строке ида.
Если находим => опознаем.
Если не находим => отдаем запрос опознавания.
Бэнни; +1 Ответить
6. Бэнни 209 08.09.21 12:50 Сейчас в теме
(5)Ну собсно и мы тоже храним идентификатор сессии.
hornet_X; +1 Ответить
7. shura_k 09.09.21 13:29 Сейчас в теме
не сталкивались с вопросом CORS?
когда iframe 1с запускается с другого сайта, домен второго уровня один, а вот сами сайты разные.
в таком случае не дает обратиться к document 1с
9. Бэнни 209 14.09.21 12:18 Сейчас в теме
(7)Нет, с таким не работал, но Гугл говорит что нужно просто передать заголовок разрешающий ваш домен.
8. Степной 27 14.09.21 11:44 Сейчас в теме
(5) Интересен опыт, подробнее получится описать?

Как я понял:

1. Первичная аутентификация предполагает указание логина и пароля.
Под аутентификацией понимается поиск пользователя в справочнике?
При этом доступ к веб-сервису (или что там) не предполагает аутентификации как таковой?


2. В случае успеха, в ответ клиент получает УИД элемента справочника, который хранится в cookie.

3. При последующих запросах УИД передается в заголовке. Наличие УИД в запросе и его корректность = идентифицированный пользователь.
Не думали в сторону выдачи не УИД, а что-то типа токена с ограниченным сроком действия?
Функцию восстановления пароля как-то реализовывали?
10. Бэнни 209 14.09.21 12:23 Сейчас в теме
(8)нет все немного не так. У каждого юзера личного кабинета есть обычный логин и пароль в 1С, только эти логин и пароль не светятся наружу. Аутентификацию выполняет php-сервер с помощью двух факторной аутентификации, после того как она пройдена php-сервер кладет в redis временный логин и пароль юзера в 1С а юзеру возвращает токен из данных redis, некий гуид записи в redis, сначала токен был срочный, потом переделали на бессрочный. Этот токен уже кладется в куки, используя который он может уже пройти авторизацию в 1С с помощью опять же php-сервера.

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

Но если вам интересно, в другой моей публикации есть форма логина с восстановлением пароля.
форма авторизации
11. Степной 27 14.09.21 12:56 Сейчас в теме
(10) Мой комментарий был к посту 5)
Все равно благодарю за доп. информацию, в принципе, все понятно.
12. Steelvan 306 07.03.23 12:44 Сейчас в теме
А мы делаем веб-приложения делового назначения на 1Сных http-сервисах.
Скорость разработки куда больше, чем на php и прочих языках.

Веб-формы получаются вполне на 1Сные похожи и людям привычные.
Например, https://infostart.ru/1c/articles/1818521/
Оставьте свое сообщение