Сегодня делимся интересным кейсом 3-летней давности. Решили, что он будет интересен и вам.
Готового технического задания не было. После первых встреч по Skype стало понятно, что у проекта большое будущее — спроектировать, оценить и разработать его разом не получится. Решили делать итерациями, описав в ТЗ только первый этап работ. Получился документ на 32 страницы, оцененный программистом в 200 часов. В трёх приложениях к ТЗ детально описывался формат нестандартного обмена данными с веб-сервисами 1С, даже с примерами SOAP-запросов и ответов.
Клиент
АО «ЕВРАЗ Металл Инпром» — один из ведущих российских металлотрейдеров, осуществляет поставки металлопроката производства крупных комбинатов СНГ. Основную долю продукции занимает металлопрокат производств, входящих в состав ЕВРАЗа. Является подконтрольной организацией EVRAZ plc.
С компанией ЕВРАЗ ИНТЕРВОЛГУ связывают долгие отношения: мы разработали личный кабинет клиентов компании ЕВРАЗ, сайт-визитку ЕВРАЗ Ванадий, и интернет-магазин Ассоциации Развития Стального Строительства.
Задача
В 2016 году к нам обратились за разработкой личного кабинета для сайта клиентов компании ЕВРАЗ Металл Инпром. Видение проекта было таким:
сайт не заполняется вручную, вся информация подтягивается из 1С ERP;
на сайте нельзя оформить заказ, только заявку;
на основании заявок с сайта в 1С формируется заказы;
коммерческую информацию о заказах и номенклатуре (остатки, счета, цены) на сайте хранить нельзя, нужно получать из 1С;
требуется совместная работа представителей одного и того же партнера с заказами;
текущий баланс клиента также получать из 1С, на сайте не сохранять.
Решение
Готового технического задания не было. После первых встреч по Skype стало понятно, что у проекта большое будущее — спроектировать, оценить и разработать его разом не получится. Решили делать итерациями, описав в ТЗ только первый этап работ. Получился документ на 32 страницы, оцененный программистом в 200 часов. В трёх приложениях к ТЗ детально описывался формат нестандартного обмена данными с веб-сервисами 1С, даже с примерами SOAP-запросов и ответов.
Дизайн и верстка
Хоть личный кабинет и не задумывался частью основного сайта http://www.emi.evraz.com, тем не менее он должен был повторять его дизайн. Задачи делать адаптивный дизайн не ставилось, но мы все равно использовали библиотеку bootstrap, чтобы повторить дизайн основного сайта.
Импорт всего из 1С
Как ни странно, единственным узким местом в концепции “все грузится из 1С” был список пользователей. Но и с ним удалось справиться, предложив клиенту выгружать учетные записи как справочник, в Highload-блок. Помимо информационных полей — логин и пароль. При создании записи на сайте пароль используется для создания учетной записи, а затем раз и навсегда затирается волшебным словом secret , так что никто уже не сможет узнать, какой пароль у этого пользователя.
Оформление заявки, а не заказа
В ходе обсуждения сайта выяснилось, что разница между заявкой и заказом минимальна. А формат, который использует система для передачи заказов в 1С настолько подходит и для заявок, что приняли решение его и использовать. В итоге получилось так: заявка — это обычный заказ, но с флагом “я заявка” (с точки зрения сайта).
Вызовом стала функция “разные контакты одной фирмы должны видеть заказы друг друга”. Решение — создание специального “пользователя-компании”, на которого записывались все новые заказы.
Во время разработки был примечательный случай: никак не получалось “скрыть” чужие заказы от пользователя. Выяснилось, что это был баг в CMS: по прямой ссылке можно было увидеть любой заказ любого пользователя (исправили в интернет-магазине v16.5.9). Плакали и смеялись всей командой, ошибку исправили обновлением.
Цены, счета, баланс в 1С
Чтобы оперативно получать коммерческие данные из 1С совместно со специалистом ЕВРАЗ Металл Инпром был разработан веб-сервис на технологии SOAP. При просмотре заказов пользователем сайт формирует запрос к 1С, подписывая запрос логином и хэшем от пароля пользователя. Далее 1С выполняет 2 проверки:
существует ли пользователь с таким логином и паролем вообще;
имеет ли пользователь доступ к запрашиваемой информации.
Сервисы работают быстро, а получение информации происходит уже после загрузки основной информации на странице, чтобы не мешать работе пользователя.
Такая нетиповая схема разработана под требование заказчика “ничего коммерческого на сайте”, всё в 1С. Таким образом, кража пусть даже всей базы данных сайта никак не поможет злоумышленнику получить финансовую информацию клиентов ЕМИ.
Безопасность
Красной нитью через весь проект прошли требования безопасности к нашей работе и к сайту. Например, в течение двух месяцев обновления на боевую версию сайта выгружались исключительно через панель управления сайтом, т.к. прямой ssh доступ к машине был закрыт. Эти поистине спартанские условия замедлили нашу работу, но не остановили.
Последующие этапы разработки
Спустя год утверждений и согласований доработок к проекту вернулись. С новыми требованиями со стороны заказчика, 10-страничным ТЗ и новым менеджером проекта. Интересный факт: за все время работы с личным кабинетом сменились менеджеры как в ИНТЕРВОЛГЕ, так и в ЕМИ. Эстафету передавали друг другу в том числе и верстальщики и программисты, хотя и не так массово. А вот бессменный разработчик 1С со стороны ЕМИ за эти два года стал нам уже как родной.
На втором этапе стало больше интеграции с 1С. Из учетной системы начали подтягивать различные документы: акты сверки, накладные, счет-фактуры и сертификаты. Доработки второго этапа уложились в 100 часов.
Сотрудничество продолжилось в феврале 2018 года ИНТЕРВОЛГА и АО «ЕВРАЗ Металл Инпром» заключили договор на третий этап разработки. Разработка таких личных кабинетов, со сложной логикой и требованиями к безопасности уже стала одним из наших профильных направлений.
Позже расскажем о продолжении и других совместных проектах.
Автор: Анатолий Ерофеев.
des1roer
а почему soap а не rest?
stepan_ovchinnikov Автор
Добрый вечер! За SOAP было 2 аргумента: 1) для той версии 1С на тот момент это было быстрее в разработке; 2) SOAP сам себе документация, отдав программисту 1С wsdl практически ничего не пришлось объяснять дополнительно.