Склад запчастей для тракторов и комбайнов в районном центре жил без нормального интернета. Связь была, но такая, что облачный учёт зависал в разгар сезона, когда очередь из механиков стоит у окна выдачи. Программу, которой интернет не нужен, написал Евгений Росляков. Пишу программы с 2016 года; самозанятый; договор и закрывающие документы — обязательная часть работы. Живу в Москве. На складе был один раз, в начале, остальное время работал удалённо.
Компания продаёт запчасти фермерам и агрохолдингам района. Главный офис в областном центре, склад в двухстах километрах от него. Ассортимент — тысячи позиций: фильтры, ремни, подшипники, ножи жаток, гидравлика. У одной детали бывает пять каталожных номеров от разных производителей техники.
Учёт вели в веб-сервисе, который выбрал главный офис. В городе он работал нормально, а на складе каждое открытие карточки занимало вечность. Летом, в уборочную, связь пропадала на часы. Кладовщики переходили на тетрадь, а вечером переносили записи в сервис. Ошибались, путали номера, остатки расходились с полками.
Задача: программа для склада, которая работает полностью без сети, а с офисом обменивается данными, когда связь появляется.
Сделал настольное приложение под Windows. Компьютеры на складе старые, но с Windows, а кладовщикам привычнее окно с кнопками, чем браузер. Платформу выбрал WPF: Windows Presentation Foundation хорошо подходит для плотных учётных экранов с таблицами, поиском и быстрыми клавишами, и её спокойно тянут слабые машины.
Интерфейс описан на XAML. Главный экран — поиск детали по любому номеру: каталожному, номеру производителя, внутреннему артикулу или по куску названия. Механик называет номер с бумажки, кладовщик вбивает его, и сразу видит деталь, полку и остаток, а также аналоги, если нужной нет. Таблицы рассчитаны на десятки тысяч строк и прокручиваются без задержек: строки создаются только для видимой части списка.
Всё работает на клавиатуре. Сканер штрихкодов вводит код в поле поиска, F2 — выдача, F3 — приёмка, F4 — перемещение между полками. Мышь почти не нужна, и это кладовщики оценили в первую же неделю.
Программирование на C# заняло основную часть проекта. Данные хранятся в локальной базе на складском компьютере. Каждая операция записывается как событие: «выдано», «принято», «перемещено», с временем и автором. Когда появляется связь, программа отправляет в главный офис накопленные события и забирает оттуда новые цены и карточки. Если связь рвётся посередине, обмен продолжится с того же места. Конфликты, например одна и та же деталь продана и на складе, и в офисе, программа не решает сама, а показывает кладовщику списком.
Печать этикеток на полки и накладных идёт с того же компьютера, без интернета.
Разработку вёл в Visual Studio, бесплатной редакции хватает для небольшой команды. Установщик ставит программу одной кнопкой, а обновления лежат в общей папке главного офиса и подтягиваются при следующем обмене.
Склад перестал зависеть от связи. Выдача идёт с той же скоростью и в уборочную, и в сильный снег, когда интернет пропадает на полдня. Тетради вернули в канцелярский шкаф.
Остатки сходятся лучше. Раньше главные ошибки появлялись при переносе записей из тетради. Теперь каждую выдачу пробивают сразу, и вечерних «переносов» нет.
Главный офис видит склад с небольшой задержкой, а не в реальном времени. Это осознанный компромисс: на складе работа важнее мгновенной картинки в отчёте. Для срочных вопросов есть кнопка «синхронизировать сейчас».
Ограничение: программа работает только под Windows. Если склад когда-нибудь перейдёт на другую систему, интерфейс придётся переписывать. Логику обмена и базу при этом можно сохранить, они от интерфейса отделены.
Сейчас обсуждаем второй склад в соседнем районе, ему нужна та же программа с общим обменом.
Если ваши сотрудники работают там, где интернет то есть, то нет, напишите мне через freelance.ru. Опишите, как сейчас ведётся учёт, и я предложу, как сделать его автономным.