Сегодня делимся интересным кейсом 3-летней давности. Решили, что он будет интересен и вам.
Готового технического задания не было. После первых встреч по Skype стало понятно, что у проекта большое будущее — спроектировать, оценить и разработать его разом не получится. Решили делать итерациями, описав в ТЗ только первый этап работ. Получился документ на 32 страницы, оцененный программистом в 200 часов. В трёх приложениях к ТЗ детально описывался формат нестандартного обмена данными с веб-сервисами 1С, даже с примерами SOAP-запросов и ответов.
![Личный кабинет клиентов для компании ЕВРАЗ Личный кабинет клиентов для компании ЕВРАЗ](https://habrastorage.org/getpro/habr/upload_files/690/72c/125/69072c1258b876115c8967844e60aa6c.png)
Клиент
АО «ЕВРАЗ Металл Инпром» — один из ведущих российских металлотрейдеров, осуществляет поставки металлопроката производства крупных комбинатов СНГ. Основную долю продукции занимает металлопрокат производств, входящих в состав ЕВРАЗа. Является подконтрольной организацией EVRAZ plc.
С компанией ЕВРАЗ ИНТЕРВОЛГУ связывают долгие отношения: мы разработали личный кабинет клиентов компании ЕВРАЗ, сайт-визитку ЕВРАЗ Ванадий, и интернет-магазин Ассоциации Развития Стального Строительства.
Задача
В 2016 году к нам обратились за разработкой личного кабинета для сайта клиентов компании ЕВРАЗ Металл Инпром. Видение проекта было таким:
сайт не заполняется вручную, вся информация подтягивается из 1С ERP;
на сайте нельзя оформить заказ, только заявку;
на основании заявок с сайта в 1С формируется заказы;
коммерческую информацию о заказах и номенклатуре (остатки, счета, цены) на сайте хранить нельзя, нужно получать из 1С;
требуется совместная работа представителей одного и того же партнера с заказами;
текущий баланс клиента также получать из 1С, на сайте не сохранять.
Решение
Готового технического задания не было. После первых встреч по Skype стало понятно, что у проекта большое будущее — спроектировать, оценить и разработать его разом не получится. Решили делать итерациями, описав в ТЗ только первый этап работ. Получился документ на 32 страницы, оцененный программистом в 200 часов. В трёх приложениях к ТЗ детально описывался формат нестандартного обмена данными с веб-сервисами 1С, даже с примерами SOAP-запросов и ответов.
Дизайн и верстка
Хоть личный кабинет и не задумывался частью основного сайта http://www.emi.evraz.com, тем не менее он должен был повторять его дизайн. Задачи делать адаптивный дизайн не ставилось, но мы все равно использовали библиотеку bootstrap, чтобы повторить дизайн основного сайта.
![Проведение актов сверки в личном кабинете Проведение актов сверки в личном кабинете](https://habrastorage.org/getpro/habr/upload_files/f32/165/769/f3216576900b1ad197749b54f1f278c8.png)
Импорт всего из 1С
Как ни странно, единственным узким местом в концепции “все грузится из 1С” был список пользователей. Но и с ним удалось справиться, предложив клиенту выгружать учетные записи как справочник, в Highload-блок. Помимо информационных полей — логин и пароль. При создании записи на сайте пароль используется для создания учетной записи, а затем раз и навсегда затирается волшебным словом secret , так что никто уже не сможет узнать, какой пароль у этого пользователя.
![Импорт документов из 1С Импорт документов из 1С](https://habrastorage.org/getpro/habr/upload_files/a47/01c/9e9/a4701c9e9596e8e8b3a511948c07b139.png)
Оформление заявки, а не заказа
В ходе обсуждения сайта выяснилось, что разница между заявкой и заказом минимальна. А формат, который использует система для передачи заказов в 1С настолько подходит и для заявок, что приняли решение его и использовать. В итоге получилось так: заявка — это обычный заказ, но с флагом “я заявка” (с точки зрения сайта).
Вызовом стала функция “разные контакты одной фирмы должны видеть заказы друг друга”. Решение — создание специального “пользователя-компании”, на которого записывались все новые заказы.
![Этапы оформления заявки в личном кабинете сайта Этапы оформления заявки в личном кабинете сайта](https://habrastorage.org/getpro/habr/upload_files/49b/308/8c8/49b3088c808d512eb515f70c5a8a91e2.jpeg)
Во время разработки был примечательный случай: никак не получалось “скрыть” чужие заказы от пользователя. Выяснилось, что это был баг в CMS: по прямой ссылке можно было увидеть любой заказ любого пользователя (исправили в интернет-магазине v16.5.9). Плакали и смеялись всей командой, ошибку исправили обновлением.
Цены, счета, баланс в 1С
Чтобы оперативно получать коммерческие данные из 1С совместно со специалистом ЕВРАЗ Металл Инпром был разработан веб-сервис на технологии SOAP. При просмотре заказов пользователем сайт формирует запрос к 1С, подписывая запрос логином и хэшем от пароля пользователя. Далее 1С выполняет 2 проверки:
существует ли пользователь с таким логином и паролем вообще;
имеет ли пользователь доступ к запрашиваемой информации.
Сервисы работают быстро, а получение информации происходит уже после загрузки основной информации на странице, чтобы не мешать работе пользователя.
![Обмен коммерческих данных 1С с другими системами Обмен коммерческих данных 1С с другими системами](https://habrastorage.org/getpro/habr/upload_files/4b9/c25/ea9/4b9c25ea99b11a5f5497b7c21ea9d527.jpeg)
Такая нетиповая схема разработана под требование заказчика “ничего коммерческого на сайте”, всё в 1С. Таким образом, кража пусть даже всей базы данных сайта никак не поможет злоумышленнику получить финансовую информацию клиентов ЕМИ.
Безопасность
Красной нитью через весь проект прошли требования безопасности к нашей работе и к сайту. Например, в течение двух месяцев обновления на боевую версию сайта выгружались исключительно через панель управления сайтом, т.к. прямой ssh доступ к машине был закрыт. Эти поистине спартанские условия замедлили нашу работу, но не остановили.
![Выполнение требований безопасности при обновлении Выполнение требований безопасности при обновлении](https://habrastorage.org/getpro/habr/upload_files/bd5/e9e/9d0/bd5e9e9d01246e0df98582fa5e0fe94a.png)
Последующие этапы разработки
Спустя год утверждений и согласований доработок к проекту вернулись. С новыми требованиями со стороны заказчика, 10-страничным ТЗ и новым менеджером проекта. Интересный факт: за все время работы с личным кабинетом сменились менеджеры как в ИНТЕРВОЛГЕ, так и в ЕМИ. Эстафету передавали друг другу в том числе и верстальщики и программисты, хотя и не так массово. А вот бессменный разработчик 1С со стороны ЕМИ за эти два года стал нам уже как родной.
На втором этапе стало больше интеграции с 1С. Из учетной системы начали подтягивать различные документы: акты сверки, накладные, счет-фактуры и сертификаты. Доработки второго этапа уложились в 100 часов.
Сотрудничество продолжилось в феврале 2018 года ИНТЕРВОЛГА и АО «ЕВРАЗ Металл Инпром» заключили договор на третий этап разработки. Разработка таких личных кабинетов, со сложной логикой и требованиями к безопасности уже стала одним из наших профильных направлений.
Позже расскажем о продолжении и других совместных проектах.
Автор: Анатолий Ерофеев.
des1roer
а почему soap а не rest?
stepan_ovchinnikov Автор
Добрый вечер! За SOAP было 2 аргумента: 1) для той версии 1С на тот момент это было быстрее в разработке; 2) SOAP сам себе документация, отдав программисту 1С wsdl практически ничего не пришлось объяснять дополнительно.