IT в помощь готовой еде.

Любому руководителю важна информация, отражающая скорость и качество работы области, за которую он отвечает. В 2020 году мы в Х5 Tech начали поддерживать производство готовой еды Smart Kitchen («Фабрика кухни») и изучать его внутренние процессы. Оказалось, что руководители поздно получают важную для бизнес-процессов информацию. К примеру, отчёты о сроках отгрузки или списанных позициях IT-платформа считает лишь к середине или даже концу следующего дня.

Smart kitchen производство площадью 26 000 м2, на котором работают 700 сотрудников. Они производят более 200 различных видов кулинарии, а контролировать процессы помогают две основные системы:

  • SAP EWM, в который входят приёмка сырья, логистика, комплектование и отгрузка.

  • SAP FK, отвечающее за производство: выпуск продукции, контроль их качества и прочее.

В этих системах пользователь получает всю необходимую информацию. Раньше для этого он запускал сбор «тяжёлых» отчётов и список транзакций, потом выгружал их в файл-xls и строил в нём необходимые формулы для расчёта целевых показателей. По такому принципу работала, например, часть платформы по lvl-отгрузке: сколько продукции заказано, сколько отгружено, сколько недопоставили. Естественно, делать такие выгрузки на постоянной основе было трудоёмко.

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

Содержать в себе важную бизнес и IT-информацию: доступность тех или иных серверов приложение, SAPов и баз данных.

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

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

На чём строится решение

За основу реализации идеи выбрали open source систему мониторинга Zabbix. До этого мы уже работали с ней в качестве системы отображения ключевых бизнес-показателей в распределительном центре.

Так мы пришли к следующему архитектурному решению:

 

Первый вариант, в виду малого количества метрик, использовал связку Grafana+Zabbix. Такое решение было обосновано тем, что это open source, а соответственно не требовало дополнительных затрат и с их помощью довольно просто собирать и визуализировать данные.

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

В итоге мы решили использовать собственное решение, основанное на Python (Django), плюс bootstrap и пара самописных js-скриптов для фронтенда.

Принцип работы получался такой:

Zabbix с определенным интервалом обращается к методу, предварительно разработанному в SAP Odata, тем самым запуская алгоритм сбора и предоставления данных. После этого Zabbix получает данные в формате xml, где они парсятся на отдельные значения.

Сотрудник запускает браузер и переходит по ссылке нашего сервиса.

После авторизации пользователя (запрос проходит через AD), сервер отображает страницу шаблон, а js-скрипты забирают данные по внутреннему api, при этом стороне бэкенда делается запрос в Zabbix api, где мы получаем последние собранные данные и в итоге всё выводится в структурированном виде в браузере.

Реализовав первую метрику (время отгрузки), мы обсудили результат с руководителями производства. Каждый предложил своё видение метрик, которые должны быть на платформе. При этом для разных отделов важны свои показатели.

Так мы собрали пул задач и начали работа над наполнением сервиса информацией. В настоящий момент мы запустили блок «Финансовые показатели» и дэшборд со скоростью работы сотрудников.  

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

На следующем этапе развития появилась необходимость отображать табличные данные. С этого момента стало понятно, что собирать данные через Zabbix уже больше не вариант, и необходимо искать альтернативу, т.к. это всё-таки система мониторинга, а не база данных, плюс позволяет хранить только отдельные значения (метрики) и их историю, а не целые таблицы. Был вариант сохранять xml полностью, но это вызывало неоправданный рост объема БД и снижение производительности, особенно, если нужны были исторические данные и несколько пользователей обращались к одной и той же странице.

Поэтому в проект добавили celery в качестве сборщика данных.

Он позволил сделать задачи для каждого метода в SAP, указать различные интервалы сбора данных, а также сразу парсить, делать необходимые расчеты и складывать информацию в локальную БД, через модели Django.

Пример такого таска:

@app.task
def sl_task():
    result = {}
    try:
        result = parser_fiwr.parser_page_sl('SLNew')
    except Exception as err_res:
        logger.error(f'Данные для блоков не найдены: {err_res}')
    if result:
        try:
            record_fc = AccumSlFoodcost(
                per_min_fc = result['sl_result']['min_fc_percent'],
                per_avg_fc = result['sl_result']['avg_fc_percent'],
                per_max_fc = result['sl_result']['max_fc_percent'],
                per_w_avg_fc = result['sl_result']['w_avg_fc_percent'])
            record_fc.save()
            logger.info('Данные для блока `SLNew` сохранены')
        except Exception as err:
            logger.error(f'Не удалось сохранить данные для блока `SLNew`: {str(err)}')
    else:
        logger.error(f'Не удалось сохранить данные для блока `SLNew` нет данных в источнике')

Спустя какое-то время стало понятно, что база разрастается. Проконсультировавшись с коллегами, пришли к выводу, что хранить значения по всем метрикам за весь период – нет необходимости и добавили еще один таск по очистке:

@app.task
def clear_old():
    old_date = datetime.today() - timedelta(days=10)
    try:
        AccumSlFoodcost.objects.filter(created_at__lte=old_date).delete()
        logger.info('Очистка старых данных завершена')
    except Exception as err_res:
        logger.error(f'Не получилось очистить старые данные: {err_res}')

Что в итоге

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

Отдельно мы добавили вкладку с операционными показателями. В ней отображается заполняемость мест на сырьевом складе и складе отгрузки, а также SL (показатель выполнения плана) каждого участка производства.

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

 

 

Что хотим добавить

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

  • Уведомления руководителей в случае отклонения производства от целевых показателей.

  • Дэшборд производства:

 

  • Дэшборд по сырьевому складу:

  • Дэшборд логистического центра:

 

  • IT показатели:

Комментарии (12)


  1. InChaos
    01.06.2022 13:20
    +4

    отчёты о сроках отгрузки или списанных позициях IT-платформа считает лишь к середине или даже концу следующего дня.

    сбор «тяжёлых» отчётов и список транзакций, потом выгружал их в файл-xls

    экономит несколько часов работы трёх бизнес-аналитиков

    Т.е. опять история о том, что сначала было сделано абсолютно неправильно, в 202х годах люди вручную в екселе считают циферьки, и как мы потом героически с этим боролись.

    Любая система учета использует БД. Из БД всегда можно вытащить данные буквально за несколько секунд, причем уже с аналитикой, отфильтрованные, в разрезе времени/продукта/процесса/работника и т.д. средствами самой БД, а не через "дополнительные скрипты" и визуализировать используя сотни способов, включая бесплатные, даже через тот же Graphana, Excel (Power Query), Power BI, и т.д. и т.п.

    Помню при внедрение WMS (Warehouse Management System, не скажу какой, еще в далеком 2009), за полгода до ее запуска в прод делали все нужные отчеты, которые заранее запросили заинтересованные лица (в итоге более 500 вышло). Потом уже дорабатывали их конечно, но уже до состояния конкретных хотелок конкретных лиц. Кому надо, то быстро генерится новый на текущий момент при нажатии кнопки, кому рассылка по расписанию. кому при каких то условиях изменения данных.

    А так чтоб затрачивать даже по 30 мин на отчет, просто немыслимо было.

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


    1. Veller_Iz
      01.06.2022 16:25
      +1

      Приветствую!

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

      На этапе планирования проектного решения не было потребности в оперативной отчетности, после реализации проекта такая потребность появилась.

      Что касается вытащить данные за несколько секунд из любой БД. С SAP дела обстоят немного сложнее, поскольку из за внутренних ограничений прямых запросов к БД SAP выполнять не допускается и приходится писать внутренние процедуры, которые при обращении к ним инициируют выполнение запросов и формирование JSON, которые в свою очередь передаются в мониторинговую систему.


      1. InChaos
        02.06.2022 07:55
        +1

        На этапе планирования проектного решения не было потребности в оперативной отчетности

        Вот-вот. Те кто планировал, у них не было. А если бы привлекли к планированию тех, кто будет этим потом пользоваться, много интересного бы заранее узнали. Выходит планирование было "от балды", для галки. Вечно актуальная тема )))


  1. sunnybear
    01.06.2022 13:24

    Tableau, Qlik, Power BI?


    1. Veller_Iz
      01.06.2022 18:25
      +1

      Приветствую!

      В компании множество систем отчетности и мониторинга, в том числе и те, что Вы перечислили.

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


  1. evros
    01.06.2022 14:55
    +1

    Zabbix? Хм, экономия на первом месте видать.


    1. Veller_Iz
      01.06.2022 18:28
      +1

      Добрый день!

      Дело скорее не в экономии, а в опыте реализации предыдущих проектов и согласованной архитектурной схеме. В компании множество различных систем отчетности и мониторинга, Zabbix одна из них.


  1. victor_kk
    01.06.2022 17:03
    +1

    Какое-то странное решение с Zabbix-ом. У вас же SAP EWM на S4/HANA. В S4/HANA есть и встроенный BW и Embedded Analytics. Если не подходит ни встроенный BW, ни Embedded Analytics можно данные напрямую из SAP HANA брать.


    1. Veller_Iz
      02.06.2022 09:17
      +1

      Доброе утро!

      SAP S/4HANA не используется ни в EWM ни в FK на "Фабрике Кухни", у нас используется Database Oracle и на основе ее таблиц реализована выборка для Zabbix.


      1. victor_kk
        02.06.2022 10:10

        Доброе утро!

        Спасибо за комментарий. Тогда понятно, почему такая архитекура.


  1. zhabr
    01.06.2022 21:14

    Что за линии? Хотелось бы увидеть объёмно-планировочные решения и решения возникших проблем. Что делают с первыми партиями продукции? Сразу в торговую сеть?


    1. Veller_Iz
      02.06.2022 09:19

      Приветствую!

      Что за линии?

      Не совсем понял вопрос про линии.

      Что делают с первыми партиями продукции? Сразу в торговую сеть?

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