asd asdsa f
Статьи

Кейс — разработка ПО для автоматизации работы торговой компании

0 39

Заказчик

Торговая фирма, занимающаяся продажей продуктов питания.

Задача

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

Первоначальные варианты решения

Выясняем, что у заказчика уже имеется система складского учета, работающая на 1С. Предлагаю самый простой вариант — из 1C-ки на торговой точке периодически выгружать товарный запас. С помощью небольшой программы формировать заявку и отправлять ее на email. Программа, конечно, должна содержать интерфейс для конфигурации заявки — когда, какие и сколько  позиций добавлять в заявку.

При последующем обсуждении выясняется, что не предполагается использование 1C на на торговых точках, поэтому нужно свое решение. Более того, общая функциональность системы предполагается несколько шире. Во первых, автоматическое формирование заявок должно работать не только для торговых точек и складов в одной торговой компании, но и между несколькими компаниями, связанными отношением клиент-поставщик. То есть, скорее всего, одна и та же система должна работать как у клиента, так и у поставщика.

Рисуем примерную структуру:

awtcase-ctruct_diag

Торговая Компания сбывает товар как на собственные Торговые Точки, так и Клиентам. Периодически Компания делает заявки поставщикам и получает от них товар. Для каждого Клиента, соответственно, данная Компания является Поставщиком.

Таким образом, цель системы состоит в следующем:

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

Список задач :

1) Разработать приложение для отслеживание товарного запаса на торговой точке. Приложение должно поддерживать все основные торговые операции: прием товара, списание, корректировки, и, конечно, продажу. Пока интеграция с кассовым аппаратом не нужна, но, возможно, в дальнейшем потребуется. Главное, обеспечить максимально быстрый способ сформировать новую продажу, используя как ввод штрих-кода товара вручную, так и с помощью сканера.

Поскольку интернет на торговых точках может быть нестабильным, то необходима возможность работы оффлайн. При наличии интернета все данные синхронизируются с серверным ПО

2) Разработать серверное ПО, которое отвечает за:

  • Отслеживание товарного запаса, поддерживающее основные складские и торговые операции
  • Формирование заявок поставщикам в автоматическом режиме
  • Обработка заявок от клиентов и торговых точек
  • Возможность сформировать заявку вручную
  • Получение отчетов по динамике продаж

Проектирование логики работы  серверной части

Имея общее представление о требованиях к системе, через несколько итераций пришли к модели предметной области, кратко описанной ниже.

Структура торговой компании представлена такой диаграммой:

awpcase-company_diag

Company содержит как сведение о своих поставщиках (Supplier), так и клиентах, которым отгружается товар. Последние делятся на контрагентов (Customer) и на торговые точки данной компании (Outlet). Также, в компании может быть несколько складов (Store), расположенных по разным адресам (Address).

Товарный запас компании представляется как сумма запасов на всех ее складах:

awtcase-stock_diag

Конфигурация автоматической заявки задается для каждой позиции в каждом складе. Склад в модели является агрегатом, содержащим сведения о своем товарном запасе, истории операций и обрабатываемых заявках.

В системе может существовать несколько конфигураций, так что можно быстро переключаться между ними.

awpcase-autoconfigorder_diag

Существуют несколько возможных настроек формирования заявки для каждой позиции товарной номенклатуры. Конкретные настройки (или «политики»)  скрыты за абстрактной конфигурацией (AutoOrderConfigItem). На данный момент существуют две возможные политики, отвечающие за включение позиции в заявку: «периодическая» и минимальная. Конфигурация Minimum проверяет достижение некоторого заданного минимума, а конфигурация Periodic просто периодически делает заявку на количество baseQuantity товара StoreStockItem.

Поскольку в системе не предусмотрено отслеживание партий товаров, то какому именно поставщику заказывать решается тут-же, в конфигурации AutoOrderConfigItem.

Сам процесс формирования заявки достаточно прост. Раз в сутки (период по умолчанию) проверяются все AutoOrderConfigItem на необходимость добавления в заявку от данного склада. Если общее количество (или цена заявки) в заявке превысило некоторое наперед заданное значение, то заявка оправляется поставщику.

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

  1. Направить позицию на первый склад, на котором найдено необходимое количество данного товара
  2. Выбрать склад, на котором есть достаточное количество товара и ближайший к  адресу, указанному в заявке
  3. Выбрать склад согласно вручную заданному соответствию клиент-склад.

Поскольку для начала предположили, что ассортимент на складах не пересекается, то решили пока остановиться на первом варианте.

awpcase-store_orders_diag

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

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

Жизненный цикл заявки на складе может быть представлен следующей диаграммой:

awpcase-order_lifecycle_diag

Прежде чем принять (Accept), откорректировать или отклонить (Reject) заявку, ее нужно взять в обработку (InProgress). После принятии или отклонении заявки она попадает в историю заявок.

Проектирование ПО для торговой точки

Основными задачами программы на торговой точке являются

  • учет товарного запаса
  • проведение операций приема, корректировки и продажи
  • отправка данных на сервер

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

Реализация

ПО для торговой точки было решено реализовать в виде десктопного приложения на Java с использованием библиотеки Swing и фреймфорка Spring. Выбор технологии был обусловлен, в основном, моими личными предпочтениями и хорошими навыками работы именно с этими инструментами.

Серверная часть также основана на Java-технологиях: GWT, Spring, Hibernate.

Завершение

В данный момент закончена и внедрена часть для торговых точек. Собраны первые отклики от конечных пользователей (продавцов и товароведов). Несмотря на необходимость некоторых доработок и исправлений, отмечено увеличение продуктивности и удобство работы магазинов по сравнению с «бумажным» ведением учета.

Полная функциональность (серверная часть) находится в стадии доработки.  Сразу после окончания разработки планируется начать внедрение ее в действующую торговую компанию.

Реализация данной системы потребовала трех месяцев работы, что можно считать довольно коротким сроком, учитывая, что над проектом работал всего одни разработчик.

About the author / 

admin