InvenTree 1.6: бесплатный складской учёт запчастей на своём сервере — обзор с практикой
InvenTree — бесплатная система складского учёта с открытым кодом (лицензия MIT), которая ставится на ваш сервер и закрывает количественный учёт запчастей: что лежит, на каком складе и в какой ячейке, сколько пришло от поставщика и куда ушло. Мы развернули версию 1.6.0 на демо-стенде, наполнили её автозапчастями и прошли весь путь детали от заказа до установки на машину. Ниже — что работает хорошо, где грабли и чего от InvenTree ждать не стоит.
Чем InvenTree отличается от учёта ценностей: запчасть расходуется
Почти все бесплатные системы учёта, которые нам приносят на обсуждение, построены вокруг штучной ценности. У перфоратора, ноутбука или нивелира есть инвентарный номер, серийник и владелец на сегодня, а главный вопрос звучит так: у кого он сейчас и когда вернут. Для этого хорошо подходит Snipe-IT, и как это выглядит на практике с приходящими работниками, мы разобрали в статье про выдачу инструмента работникам по QR-коду. С запчастями логика другая: колодки, фильтры, ремни и масло приходят партиями, лежат сразу в нескольких местах и уходят безвозвратно — в машину, в ремонт, в брак.
Для такой номенклатуры вопросы меняются. Сколько тормозных колодок осталось всего и сколько на каждом складе? Из какой поставки эти колодки и почём мы их брали? Кто перенёс две канистры масла в машину-мастерскую и когда? Пора ли заказывать фильтры и у какого поставщика они были дешевле в прошлый раз? Учёт ценностей на это отвечает плохо: в Snipe-IT расходный материал живёт в одном месте, а приход сводится к «увеличить количество» без партии и цены. InvenTree, наоборот, изначально задуман как количественный склад: деталь в каталоге одна, а складских позиций (stock items) с остатками может быть сколько угодно — каждая со своим местом, кодом партии и ценой закупки.
Важно сразу развести понятия, которые в интерфейсе InvenTree встречаются постоянно. Деталь (part) — это строка каталога: «Колодки тормозные передние ГАЗель NEXT» с артикулом, параметрами и поставщиками. Складская позиция — конкретное количество этой детали в конкретном месте: «6 шт., полка А-1, партия от 14.10». Место хранения — узел дерева: склад, стеллаж, полка, а также машина или изолятор брака. Всё движение — приход, перемещение, списание, разбиение партии — пишется в историю складской позиции, поэтому через месяц можно восстановить, куда делась любая деталь.
Разобрать InvenTree удобнее на живом примере. Возьмём условный автосервис «Гараж Профи»: основной склад с полками, второй склад в гараже, небольшой запас на объекте и машина-мастерская, в которой мастер возит ходовые расходники. Запчасти закупаются у нескольких поставщиков, а уходят на ремонт собственного автопарка. Именно такую структуру мы и завели на стенде, поэтому все скриншоты ниже — реальные экраны InvenTree 1.6.0 с демонстрационными данными.
Каталог запчастей: категории, IPN, параметры и поставщики
Каталог в InvenTree — дерево категорий: «Фильтры» → «Масляные», «Тормозная система», «Масла и жидкости», «Электрика», «Ходовая». У каждой детали есть внутренний артикул IPN — ваш собственный код, который не зависит от поставщика и не меняется, когда вы сменили магазин. Мы советуем придумать формат заранее: короткий префикс категории и номер, например ТОРМ-0012. Рядом с IPN хранятся описание, единица измерения, фото, ссылки на документы и признаки детали: можно ли её закупать, продавать, собирать из других деталей, отслеживать по серийным номерам. Для автозапчастей обычно хватает «закупаемая» и «продаваемая» — второй признак понадобится для расхода на машину, о нём ниже.
Самое полезное для автосервиса — параметры по шаблонам. Шаблон параметра создаётся один раз («Марка авто», «Модель», «OEM-номер», «Вязкость», «Объём, л», «Размер шины») и привязывается к категории, после чего у каждой детали этой категории появляются одинаковые поля. На стенде мы завели восемь шаблонов, и поиск сразу стал осмысленным: фильтр по модели «ГАЗель NEXT» показывает всё, что к ней подходит, а поиск по OEM-номеру находит деталь, даже если кладовщик не помнит, как она у нас называется. Пример параметров масла — на скриншоте ниже.
Поставщики и производители разведены по разным сущностям, и это правильно. Производитель (например, TRW) даёт деталь с номером MPN, поставщик продаёт её со своим артикулом SKU и ценой. Одна и та же деталь может иметь несколько поставщиков, и при оформлении заказа InvenTree подставляет нужный артикул и последнюю цену. Отсюда же берётся ценовой диапазон на карточке детали: видно, по какой цене брали в разных поставках. Для внутреннего клиента — автопарка, на который списываются детали, — заводится отдельная компания с признаком «клиент».
Карточка детали собирает всё вместе: сколько на складе, сколько уже распределено под заказы на ремонт, сколько едет от поставщика и какой минимальный запас установлен. На главном скриншоте статьи — карточка колодок: на складе 11, требуется 1, минимум 4, место по умолчанию и ценовой диапазон. Возможности системы, которые мы проверили на стенде, сведены в таблицу.
| Задача | Как решается в InvenTree 1.6 | Проверено на стенде |
|---|---|---|
| Каталог с категориями | Дерево категорий, IPN, фото, вложения | да |
| Характеристики детали | Параметры по шаблонам, привязка к категории | да, 8 шаблонов |
| Поставщики и производители | SKU поставщика, MPN производителя, цены | да |
| Остатки по местам | Складские позиции в дереве мест | да, 20 мест |
| Партии и цены закупки | Код партии и цена у каждой позиции | да |
| Перемещение и списание | Transfer, remove, разбиение партии, история | да |
| Закупка | Заказ поставщику, частичная приёмка | да |
| Расход на машину | Заказ на продажу внутреннему клиенту | да |
| Минимальный запас | Поле у детали, фильтр «мало на складе» | да |
| Штрихкоды | QR своих объектов, привязка EAN | да |
| Мобильная работа | Официальное приложение Android и iOS | приложение, веб — на планшете |
Каталог из 65 деталей с параметрами, поставщиками и производителями мы загрузили скриптом через API за один прогон. В реальном внедрении так же переносится Excel-таблица или выгрузка из 1С: главное — заранее договориться о категориях и наборе параметров, иначе через месяц в одной категории окажутся «Колодки пер.», «Колодки передние» и «Колодки торм. перед.» с разными полями.
Склад: дерево мест, партии, перемещение и движение остатков
Места хранения в InvenTree — дерево любой глубины. На стенде у нашего автосервиса оно такое: Склад №1 со стеллажами и полками А-1…C-3, Склад №2 (Гараж), Склад №3 на объекте, Машина-мастерская и изолятор брака. Машина как место хранения — приём, который мы рекомендуем всем, у кого мастера возят с собой запас: тогда «а сколько у Сергея в машине фильтров» перестаёт быть вопросом к Сергею. Изолятор брака нужен, чтобы бракованная деталь не числилась среди годных, но и не пропадала из учёта до возврата поставщику.
Каждое место показывает, что в нём лежит, с количеством и партиями, а у мест можно поставить свой тип (склад, стеллаж, ячейка, транспорт) с иконкой. На полках удобно держать этикетки с QR-кодом места: кладовщик сканирует полку и сразу видит её содержимое. Как подобрать размер и материал наклеек для полок и коробок, мы разобрали отдельно в статье об этикетках и принтерах для маркировки.
Партия — не отдельный справочник, а свойство складской позиции: код партии, количество, цена закупки, дата, поставщик. Если 12 колодок пришли одной поставкой, а потом 4 из них увезли в машину, InvenTree разбивает позицию на две: 8 на полке и 4 в машине, обе с тем же кодом партии и той же ценой. Поэтому на вкладке «Склад» карточки детали видно сразу несколько строк — как на скриншоте ниже, где одна деталь лежит тремя партиями в разных местах.
Перемещение делается из карточки позиции, из списка остатков или со сканера: выбираете позиции, количество и место назначения, при желании пишете примечание. Мы проверили перенос 2 шт. партии смазки в машину-мастерскую через диалог веб-интерфейса и тот же перенос через API от имени обычного пользователя — в обоих случаях остаток разделился, а в истории появилась запись с автором и временем. Кроме перемещения доступны «добавить» (найденное при пересчёте), «удалить» (списание с причиной) и «посчитать» (инвентаризация: вводите фактическое количество, система пишет разницу).
Движение остатков (stock tracking) — та часть InvenTree, ради которой стоит переходить с таблиц. У каждой позиции есть журнал: создана при приёмке заказа такого-то, перемещена из А-1 в Машину-мастерскую, разделена, распределена под заказ на ремонт, списана. В записи — пользователь, дата, количество и примечание. Когда в конце месяца не сходится количество масла, разбор занимает минуты: открываете деталь, смотрите движение по каждой партии и находите, где списали без заказа.
Закупки, минимальный запас и расход на машину
Заказ поставщику (Purchase Order) в InvenTree — полноценный документ со статусами: черновик, оформлен, частично получен, завершён. Строки заказа берут деталь, артикул поставщика и цену, можно указать место, куда принять товар по умолчанию. На стенде мы держим четыре заказа в разных состояниях, и самый показательный из них — PO-0002, получен частично: по одной строке пришло 2 из 2, по другой 1 из 2, по третьей ничего. Для автозапчастей это обычная история, когда поставщик привёз не всё, и InvenTree её честно отражает: недостающее остаётся «в заказе» и видно на карточке детали.
При приёмке вы отмечаете строки, вводите фактическое количество, код партии и место размещения. Каждая принятая строка создаёт складскую позицию с ценой из заказа — отсюда и ценовой диапазон на карточке. В официальном приложении приёмку можно делать прямо у машины поставщика, сканируя коробки. Обратите внимание: заказ в InvenTree — это складской документ, а не счёт и не платёжка. Оплату и первичку по-прежнему ведёт бухгалтерия в своей программе.
Минимальный запас задаётся у каждой детали. Если остаток по всем местам опустился ниже минимума, деталь попадает в список «мало на складе», её видно фильтром в таблице деталей и на главной странице, а подписанные на деталь или категорию пользователи получают уведомление. На стенде у нас 14 деталей ниже минимума — ровно столько, сколько бывает у живого автосервиса без системы. Учтите, что InvenTree сам заказ не создаёт: он подсказывает, что пора, а заказ оформляет ответственный.
Расход на машину — место, где InvenTree приходится немного «прочитать по-своему». Отдельного документа «ремонт» в системе нет, зато есть заказ на продажу (Sales Order). Мы завели внутреннего клиента «Автопарк» и оформляем ремонт как заказ на продажу: в названии и примечании — госномер машины и вид работ, в строках — детали. Детали распределяются на строки заказа с конкретных складских позиций, а при отгрузке списываются со склада. В итоге по каждой машине видно, какие колодки и фильтры на неё ушли, из какой партии и по какой цене. Цену продажи для внутреннего клиента можно не заполнять.
Ниже — путь одной запчасти, как мы его прошли на стенде, по шагам:
- Заказ: создаём PO поставщику на 12 колодок по последней цене, статус «оформлен».
- Приход: поставщик привёз 8, принимаем 8 с кодом партии и ценой, заказ становится частично полученным.
- Размещение: позиция ложится на полку А-1 Склада №1, печатаем этикетку партии.
- Перемещение: 4 шт. переносим в машину-мастерскую, партия разделяется, в истории — кто и когда.
- Расход: в заказе на ремонт для «Автопарка» распределяем 2 шт. из машины и отгружаем — они списаны на машину.
- Контроль: остаток опустился ниже минимума 4 — деталь в списке «мало на складе», ответственный дозаказывает недостающее.
Штрихкоды, официальное приложение и права пользователей
InvenTree генерирует собственные QR-коды для деталей, мест хранения и складских позиций. Этикетки печатаются из шаблонов: шаблон — это HTML (Django-шаблон), который InvenTree превращает в PDF нужного размера. Мы сделали два шаблона 58×40 мм — для детали (название, IPN, QR) и для места (путь «Склад 1 / А-1» и QR). Заводские штрихкоды тоже идут в дело: EAN-13 с коробки или код поставщика привязывается к складской позиции, и дальше коробку можно сканировать без своей наклейки. На стенде мы привязали шесть EAN и проверили, что поиск по скану открывает нужную позицию.
В веб-интерфейсе есть окно «Сканировать штрихкод»: работает с камерой ноутбука или со сканером, который вводит данные как клавиатура. Для склада этого хватает на рабочем месте кладовщика, но основная работа со сканером — в официальном бесплатном приложении InvenTree для Android (Google Play) и iOS (App Store). В нём есть поиск, сканирование камерой, перемещение («скан детали → скан ячейки → количество»), приёмка заказа поставщика, пересчёт и съёмка фото детали. Приложение подключается к вашему серверу по тому же HTTPS-адресу, логин и права — те же, что в вебе.
Почему не браузер на смартфоне? Мы проверили: на узком экране веб-интерфейс InvenTree 1.6 показывает предупреждение «Mobile viewport detected» и прямо предлагает официальное приложение — интерфейс рассчитан на планшеты и компьютеры. На планшете веб работает нормально, карточка детали и вкладка «Склад» читаются без проблем. Поэтому правило простое: кладовщику и мастерам — приложение на телефон, на складской стол — планшет или ПК со сканером. Для интенсивной приёмки можно взять Bluetooth-сканер или ТСД, но на старте хватает камеры телефона. Как терминалы сбора данных встраивают в связку с 1С, мы писали в статье о ТСД на складе и интеграции с 1С.
Права в InvenTree назначаются группам, а не пользователям поштучно. У группы есть набор ролей по разделам (детали, склад, места, заказы на закупку, заказы на продажу и т. д.) с уровнями «просмотр», «добавление», «изменение», «удаление». Пользователь получает права через членство в группе. Мы обычно делаем три группы — они в таблице ниже. Для демо-входа на стенде у нас как раз «кладовщик»: видит всё, добавляет и меняет детали, остатки, места, заказы и перемещения, но ничего не удаляет и в администрирование не попадает.
| Роль | Что может | Что запрещено |
|---|---|---|
| Кладовщик | Приёмка заказов, перемещения, пересчёт, списание брака, печать этикеток, ведение каталога | Удаление записей, администрирование, настройки системы |
| Работник (мастер) | Просмотр остатков и мест, поиск детали, в отдельных случаях перемещение из машины | Заказы поставщикам, правка каталога, списание без заказа |
| Администратор | Пользователи, группы и роли, шаблоны параметров и этикеток, валюта, интеграции и API | Работа под этой учёткой в повседневных операциях |
Мастерам часто достаточно права только на просмотр: они перестают звонить на склад с вопросом «есть ли фильтр на NEXT» и сами смотрят остаток в приложении. Администраторскую учётку держите отдельно от рабочей и включите для неё двухфакторную аутентификацию.
Установка: Docker production stack, PostgreSQL, Redis, Caddy и бэкап
Мы ставим InvenTree по официальной схеме для продакшена — Docker Compose из репозитория проекта. В стек входят контейнер сервера (Django + веб-интерфейс), фоновый воркер, PostgreSQL (на стенде — 17), Redis для кеша и Caddy как обратный прокси. Под одну систему достаточно небольшой виртуальной машины на Ubuntu 24.04; если рядом стоит Snipe-IT для инструмента, наш ориентир — 4 vCPU, 8 ГБ памяти и 60 ГБ диска на обе системы. Схему с двумя системами на одной ВМ подробно сравниваем в статье Snipe-IT или InvenTree и как их совместить.
Порядок установки по документации: скачать в один каталог три файла из репозитория (docker-compose.yml, .env, Caddyfile), заполнить .env — обязательно INVENTREE_EXT_VOLUME (каталог данных на хосте), пользователя и пароль базы, адрес сайта, язык и часовой пояс, — затем инициализировать базу, создать администратора и запустить контейнеры. Пароли в .env не храните в открытом виде в общих папках: права на файл — только владелец.
docker compose run --rm inventree-server invoke update
docker compose run --rm inventree-server invoke superuser
docker compose up -dОбновление выглядит так же коротко: остановить стек, подтянуть образы, снова выполнить invoke update (по умолчанию он делает резервную копию базы перед миграцией) и поднять контейнеры. Наружу публикуем только 443-й порт: если на сервере уже есть общий Caddy или другой прокси с сертификатами Let's Encrypt, встроенный Caddy InvenTree слушает локальный порт, а внешний прокси передаёт на него запросы своего поддомена.
Бэкап мы не доверяем одному механизму. Каждую ночь скрипт делает pg_dump -Fc базы InvenTree, архивирует каталог данных с медиафайлами (фото, вложения, PDF этикеток) и копирует .env; хранится семь дней, копия уходит за пределы сервера. При сдаче системы обязательно восстанавливаем копию на чистой машине — бэкап, который ни разу не восстанавливали, бэкапом считать нельзя. Если хост — ваш Windows Server с Hyper-V, помните, что поддержка Windows Server 2016 заканчивается 12 января 2027 года: виртуальную машину с учётом придётся переносить на новый хост, и с готовым бэкапом это делается спокойно.
Теперь грабли, на которые мы наступили сами. Первая — статика. После обновления контейнеров автообновление не собрало статические файлы, и веб-интерфейс вместо страницы показал ошибку INVE-E1. Лечится командой invoke static в контейнере сервера, а надёжнее — всегда обновлять через invoke update. Вторая — профиль пользователя: учётка, созданная в обход интерфейса (например, скриптом в Django shell), осталась без профиля, и система отвечала ошибкой 500. Пользователей заводите через интерфейс администратора или API — тогда профиль создаётся сам.
Третья — права. Роли нужно назначать группам через интерфейс; правка правил напрямую в базе не превращается в реальные разрешения, и пользователь получает 403 на всё. Четвёртая — API-токены. Токен, записанный в базу вручную, не принимается: хранится его хеш, а не значение. Создавайте токены в профиле пользователя или через API. И последнее: если медиафайлы закрыты дополнительной авторизацией на прокси, скачать PDF этикетки скриптом с basic auth не выйдет — только из браузерной сессии или через API.
Ограничения InvenTree и когда он действительно нужен
InvenTree — не бухгалтерия. В нём нет проводок, счетов-фактур, УПД и налогового учёта; заказ поставщику не превращается в поступление в 1С сам по себе. Валюту RUB настраиваем по умолчанию, цены закупки хранятся, но себестоимость по правилам бухучёта считать не нужно — это задача вашей учётной программы. Связать InvenTree с 1С можно через REST API: например, выгружать закупки или подтягивать номенклатуру. Это отдельная доработка под ваш обмен, а не встроенная кнопка, и закладывать её в план стоит сразу, если бухгалтерии нужна единая номенклатура.
Русский перевод интерфейса неполный. Основные экраны переведены, но часть терминов остаётся английской, а некоторые переводы звучат непривычно для склада. Мы обычно готовим для кладовщиков короткую памятку «как называется в системе → что это значит у нас» и показываем главные сценарии на живых данных: приёмка, перемещение, заказ на ремонт, пересчёт. После часа такого разбора вопросов «где тут приход» почти не остаётся.
Ещё одно ограничение — расход через заказ на продажу. Это рабочий приём, но он требует дисциплины: внутренний клиент, правило именования заказов по госномеру и отгрузка в конце ремонта. Если в компании нужно учитывать нормо-часы, работы и запись клиентов, InvenTree этого не даст — нужна отраслевая программа автосервиса, а InvenTree может остаться складом рядом с ней. Когда задача шире склада и нужны продажи, финансы и производство в одной системе, посмотрите на ERP: как партии и штрихкоды решены в ERPNext, мы разбирали в статье о складе ERPNext с партиями и штрихкодами.
Когда InvenTree оправдан? По нашему опыту — если позиций запчастей больше 100–150 и они регулярно приходят, одна и та же деталь лежит на нескольких складах или в машинах, запчасти возят между точками и нужно знать, что заказывать и у кого дешевле. Если же запчастей несколько десятков и все на одной полке, хватит раздела расходников в Snipe-IT. Общий обзор вариантов для Linux — в материале какую систему учёта на Linux выбрать.
Перед внедрением мы проходим с клиентом опросник: склады и ячейки, объём номенклатуры, как сейчас ведутся остатки, кто принимает и кто списывает, какие этикетки и в каких условиях. Полный список вопросов и этапы запуска — в статье чек-лист перед внедрением учёта. Если хотите, чтобы склад запчастей развернули и настроили под вас, загляните на страницу услуги внедрение open-source систем.
Частые вопросы
InvenTree бесплатный?
Да, InvenTree распространяется бесплатно с открытым кодом по лицензии MIT, без ограничений на число пользователей и деталей. Платить нужно только за сервер или виртуальную машину, на которой он работает, и за работу по настройке, если вы её заказываете. Мобильное приложение для Android и iOS тоже бесплатное.
Есть ли InvenTree на русском языке?
Да, русский язык интерфейса есть, но перевод неполный. Основные экраны — детали, склад, заказы — переведены, а часть терминов и подсказок остаётся английской. На практике это решается короткой памяткой для кладовщиков и разбором ключевых сценариев на ваших данных, после чего работа идёт без затруднений.
Можно ли работать в InvenTree с телефона?
Да, через официальное бесплатное приложение InvenTree для Android и iOS. В нём есть поиск, сканирование камерой, перемещение, приёмка заказов, пересчёт и фото. Веб-интерфейс на смартфоне показывает предупреждение и предлагает приложение, так как рассчитан на планшеты и компьютеры. На планшете браузер работает нормально.
Подходит ли InvenTree как программа учёта автозапчастей?
Подходит для складской части: каталог с параметрами по маркам и OEM-номерам, остатки по складам и машинам, партии, заказы поставщикам и расход на машину через заказ внутреннему клиенту. Запись клиентов, нормо-часы и расчёт работ InvenTree не ведёт — для этого нужна отраслевая программа автосервиса, а склад может остаться в InvenTree.
Можно ли связать InvenTree с 1С?
Да, но только через REST API отдельной доработкой: готового обмена с 1С нет. Обычно выгружают номенклатуру или закупки по заранее согласованным правилам. InvenTree не ведёт проводки и первичные документы, поэтому бухгалтерский учёт остаётся в 1С, а InvenTree отвечает за физические остатки и движение деталей.
Источники
- Документация InvenTree — установка в Docker — состав production-стека, файлы docker-compose.yml/.env/Caddyfile, команды invoke update и superuser, порядок обновления: https://docs.inventree.org/en/stable/start/docker_install/
- Документация InvenTree — склад — складские позиции, места хранения, перемещение и история движения: https://docs.inventree.org/en/stable/stock/
- Документация InvenTree — мобильное приложение — возможности официального приложения для Android и iOS: https://docs.inventree.org/en/stable/app/
- Репозиторий InvenTree на GitHub — лицензия MIT, файлы контейнерного развёртывания contrib/container: https://github.com/inventree/InvenTree
- Microsoft Lifecycle — Windows Server 2016 — окончание расширенной поддержки 12.01.2027: https://learn.microsoft.com/lifecycle/products/windows-server-2016











