Телефон:
+7 (499) 705-80-32Адрес:
390000, г. Рязань, ул. Ленина, 49
Почта:
info@stecpoint.ruМы спроектировали высоконагруженную систему обработки данных для департамента закупок крупной компании, объединили наши сервисы в масштабный проект с единым пользовательским интерфейсом, успешно запустили ЦОД и хотим поделиться экспертизой.
Наша практика будет интересна, если вы:
Когда руководство крупной российской компании поручило нам оптимизацию работы отдела закупок и отдела по управлению корпоративными затратами, было ясно, что такая задача не может быть простой.
Потребности многочисленных филиалов и подразделений компании непрерывно поступали в единственный департамент закупок в необработанном виде, в форме Excel таблиц с перечнями товаров. Их было необходимо рассортировать, сопоставить с прайсами поставщиков, расценить, согласовать с начальством и купить.
Работа департамента закупок порождала кипы отчетности, требовала колоссальных затрат времени и сил обширного штата сотрудников. Любая допущенная ошибка сказывалась на работе структурных подразделений компании и грозила денежными потерями.
В таких случаях отдельных функциональных сервисов, о которых мы рассказывали в прошлых статьях цикла, недостаточно. С их помощью автоматизируются лишь отдельные процедуры: расценки товаров и поиска лучших цен в товарных прайсах и каталогах интернет-магазинов. Заказчику могло помочь только комплексное решение.
Поэтому, мы разработали ЦОД. Под этим сокращением обычно подразумевают серверные решения, но мы говорим о едином программном центре обработки данных о закупках. Он объединяет наши сервисы, вписывает в бизнес-процессы компании и дает к ним доступ из единого пользовательского интерфейса.
Разработка ЦОД для департамента закупок любой крупной компании связана с многочисленными сложностями.
Типичный товарный лист, с которым работают сотрудники такой организации, содержит порядка пятидесяти тысяч строк с наименованиями и больше 100 столбцов с характеристиками товаров. Попав в ЦОД, товарные листы прирастают новыми данными: столбцами, связанными с расценкой, категоризацией и другими параметрами, характеризующими жизненный цикл позиции в системе.
Большой объем данных, проходящих через систему, отражается на всем, от выбранных нами технологий и до внешнего вида и возможностей интерфейса ЦОД. Для того чтобы система справлялась с высокой нагрузкой, мы уделяем много времени оптимизации отдельных ее элементов.
Мы выяснили на практике, какие данные загружать заранее и кешировать, а какие эффективнее запрашивать у сервера по мере надобности. Например, в одних меню оптимальное решение — динамическая подгрузка строк при прокрутке таблицы, а в других лучше использовать постраничное отображение данных.
Не во всех компаниях скорость внутренних сетей достаточно высока для передачи больших объемов данных, поэтому в дополнение к прочим оптимизациям мы используем собственный механизм компрессии передаваемой информации.
Большие объемы обрабатываемой информации сказываются и на пользовательском интерфейсе ЦОД. Чтобы пользователям было проще ориентироваться в таблицах, мы делаем интерфейс гибким, настраиваемым.
Отдельный раздел меню ЦОД позволяет скрыть ненужные для работы элементы таблиц и рассортировать оставшиеся поля в произвольном порядке. Эти настройки влияют на запрос к базе данных. На компьютер пользователя загружается не таблица целиком, а только выбранные поля, это помогает снизить нагрузку на канал связи.
Мы прислушиваемся к пожеланиям сотрудников заказчика. Зачастую они подсказывают удобные решения. Так, мы реализовали фильтрацию, подобную используемой в Excel, но более функциональную.
Для фильтров мы выделили отдельную настраиваемую панель, расположенную в левой части экрана. Большинство из них пришлось разрабатывать заново — в фреймворке AngularJS, что использовался для разработки, не нашлось инструментов, подходящих для многоуровневой контекстной фильтрации товарных позиций. То есть, в фреймворке не было гибкой системы фильтров, в которой можно задавать не только простые условия, но и в пару кликов формулировать сложные правила фильтрации для каждого из многочисленных столбцов таблицы.
Кроме того, для наглядности мы используем в интерфейсе цветовую индикацию полей. Она помогает выделить из общей массы те позиции, задание на расценку которых приближается к дате окончания.
Чтобы адаптировать систему обработки данных к бизнес-процессам конкретного департамента закупок, мы разделяем пользователей на группы, в соответствии с внутренней структурой подразделения. Все они действуют в одном и том же интерфейсе, но имеют различные возможности.
Товарные листы, которые поступают в департамент закупок, сначала попадают к диспетчеру. Сотрудник импортирует их в ЦОД. Система сама распознает валюту, в которой ведется расчет по позициям, сохраняет дату и время загрузки товарного листа, отчеты об ошибках, статистику по данным из ключевых полей таблиц.
Импортированные в систему позиции отправляются в сервис автоматической категоризации, разработанный на основе общедоступных библиотек. Там каждому товару присваивается одна из двух сотен различных категорий и подкатегорий: инструменты, строительные материалы, мебель, электрооборудование и так далее. Диспетчер может изменить категорию или подкатегорию отдельной позиции, если считает, что алгоритм машинного обучения допустил ошибку.
Остается выбрать расценщика, который специализируется на обработке тех или иных типов товаров, и назначить его ответственным за дальнейшую работу через отдельное меню.
Каждый расценщик видит только те позиции, для которых ему предстоит подобрать цену, удовлетворяющую
условиям закупки. Это
Расценщик выбирает одну из трех методик поиска товара в базе товарных прайсов: по наименьшей, средней или медианной цене, и активирует для выбранных позиций сервис авторасценки. Это отдельный модуль, использующий машинное обучение для поиска выгодных цен на товары. В результате формируется перечень лучших предложений из прайсов поставщиков для каждого из товаров в списке. Причем, цены, если это необходимо, отображаются в иностранной валюте с учетом курса на момент расценки.
Дальнейшую аналитическую работу облегчает наглядный интерфейс. Лучшая цена, полученная благодаря авторасценке, отображается бок о бок с ценовыми данными из других систем и прошлыми расценками на подобные позиции, а также экспертной стоимостью. Последнюю задают вручную при необходимости.
Расценщик сравнивает цены и выбирает одну или несколько оптимальных. После этого система рассчитывает среднюю цену и устанавливает ее как рекомендуемую, а позицию помечает, как готовую к отправке на согласование.
Списки товаров поступают к третьему специалисту в цепочке — согласующему. Он получает данные от прикрепленных к нему расценщиков и может не только ознакомиться с комментариями к позициям, но и увидеть хронологию обработки каждой товарной позиции.
Согласующий либо отклоняет предложенную цену (тогда позиция возвращается расценщику), либо утверждает ее.
Когда позиция согласована, в рабочий процесс вновь включается диспетчер. Он применяет к ценам один из поправочных коэффициентов. Это может быть показатель инфляции, который система загружает с сайта Центробанка РФ. А может быть одно из значений из справочника коэффициентов, который диспетчеры заполняют самостоятельно, исходя из внутренних нужд компании.
Затем обработанные позиции направляются на выгрузку в другие IT-системы заказчика и бизнес-процесс завершается.
С момента запуска наш ЦОД успешно обработал уже миллионы позиций, но мы продолжаем доработки: ускоряем экспорт и импорт файлов, совершенствуем интерфейс и регулярно выпускаем обновления. В ближайших планах добавить профили для быстрого переключения между несколькими вариантами настроек таблиц. В этом нуждаются расценщики, работающие с разнообразными потребностями. Им удобнее использовать индивидуальные предустановки для различных типов товарных позиций.
Наша команда готова применить свои опыт, навыки и наработки при создании аналогичных высоконагруженных IT-систем. Если у вас есть сложная задача и неважно, связана она с закупками или другим аспектом бизнеса — свяжитесь с нами. Мы расскажем, как ее решить.
Подпишитесь на рассылку
Без спама и не больше одного раза в месяц.