Сделайте мне, пожалуйста, скрипт (заказчик)
Я расскажу про свой опыт использования 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.
Приглашаем на конференции Инфостарта 2025 годаINFOSTART TEAMLEAD EVENT
Не только для разработчиков, но и для руководителей отделов разработки, тимлидов и ИТ-директоров. INFOSTART A&PM EVENT (Анализ & Управление проектами)
Практическая конференция для аналитиков и руководителей проектов 1С. |