Odoo
МодульOdoo Inventory — склад, рухи, оцінка
Фізичні і логічні рухи запасів: stock.move як атом обліку, stock.quant як зріз наявності, anglo-saxon як основа собівартості.
Що це і навіщо
Inventory — це нервова система Odoo. Усе, що рухається фізично — сировина від постачальника, напівфабрикат у виробництві, готова продукція на відвантаження, повернення від клієнта — проходить через цей модуль. У центрі дві моделі: stock.move (атомарний рух «з точки А в точку Б, скільки чого») і stock.quant (зріз: «зараз у локації X лежить N штук партії Y»).
Для бухгалтерії Inventory — джерело більшості автоматичних проводок. При увімкненому anglo-saxon-обліку кожне валідоване переміщення на складі генерує stock.valuation.layer і відповідну account.move.line. Тобто бухгалтер не сидить і не пише проводки на 201/20 — це робить склад своїми діями. Звідси й вимога: всі рухи на складі мають бути коректними. Помилка комірника — це помилка бухобліку.
Як це працює
Концептуально Odoo моделює склад як граф локацій:
view— папка для угрупування (наприклад, «Склад сировини»).internal— наша фізична локація (полиця, секція).supplier— віртуальна локація постачальників.customer— віртуальна локація клієнтів.production— куди рухається матеріал у виробництво, звідки виходить ГП.inventory/loss— корекції, інвентаризація, списання.
Кожне stock.picking (накладна переміщення) має тип (incoming, outgoing, internal, manufacturing) і містить кілька stock.move. Кожен move — це «source location → destination location + product + qty». Стани: draft → confirmed → assigned (зарезервовано) → done.
# Зріз наявності у локації
quants = self.env['stock.quant'].search([
('location_id.usage', '=', 'internal'),
('product_id', '=', product.id),
])
total_qty = sum(quants.mapped('quantity'))
available = sum(quants.mapped('available_quantity')) # без резервів
Шлях у меню: Inventory → Operations → Transfers (всі переміщення), Reporting → Stock Valuation (вартісна оцінка).
При валідації picking з anglo-saxon Odoo пише:
- При надходженні від постачальника: DR 201 / CR
Stock Input(тимчасовий рахунок до приходу інвойсу). - При відвантаженні клієнту: DR
Stock Output/ CR 26 (списання ГП). - При виробництві: DR 23 / CR 201 (списання матеріалу у виробництво).
У контексті українського обліку
Стандартний Odoo Inventory — солідна база. Що з коробки добре:
- Multi-warehouse, multi-location.
- Rules (push/pull) — як товар рухається між зонами.
- Reordering rules — автоматичне поповнення.
- Партійний облік (
stock.lot). - Серійні номери.
Чого не вистачає для UA:
- Інвентаризаційні відомості за формою М-21 (інв-3, інв-19). У стандарті — лише англомовний
stock.inventory(а в новіших версіях Odoo цю модель прибрали взагалі, замінивши on-the-fly корекціямиstock.quant). Це означає, що для українського аудитора треба окрема друкована форма. - Картка складського обліку (форма М-12). Хронологія руху за конкретною позицією. У Odoo є представлення
stock.move.lineза продуктом — але форму М-12 треба роздруковувати окремо через QWeb. - Облік МШП (малоцінні швидкозношувані). Українська специфіка: при видачі зі складу — списання на витрати, але треба вести облік у експлуатації. У Oblik-ERP це окремий модуль; у стандарті — нема.
Як ми робимо (defense-контекст)
На ТОВ «УкрПром-Тех» склад — це місце, де серійні номери народжуються і живуть. Без них немає трасабіліті, без трасабіліті немає права експорту ВТП. Тому:
- Сировина зі специфічних компонентів іде з обов’язковими
stock.lot. При надходженні комірник сканує номер партії від постачальника. Цей номер потім тягнеться у MO → у готовий виріб. - Серійники готових виробів — обов’язкові. Для кожної партії генеруємо за схемою
[модель].[рік].[номер]. Серія прив’язана до контракту через аналітику. - Окремий warehouse «Defense — карантин». Туди потрапляє все, що очікує контролю (вхідний QC, передавання у виробництво). Перехід далі — лише за документом контролера. Так у нас фізично відокремлено сертифіковану продукцію.
Типові граблі
available_quantityвід’ємна. Хтось списав більше, ніж було. Зазвичай — продали наявне, але інвентаризація показала менше. Перевірstock.quantізquantity≠available_quantity— там є непідбиті move-резерви.- Списали не з тієї локації. Випливає вже у звіті: «чому собівартість партії з листопада потрапила в МО з січня?» Якщо локацій багато, а жодна не закріплена за конкретними операціями — FIFO «пливе». Використовуй put-away rules для жорсткого маршрутування.
- Anglo-saxon вимкнено посеред року. Тепер старі рухи з anglo-проводками, нові — без. Звіт собівартості став невпізнаваним. Не вимикай anglo-saxon після старту.
- Inventory adjustments як милиця. Помилка у системі — комірник «вирівнює» через корекцію. У звіті валютного контролю — таємнича втрата сировини. Корекції лише після службової записки, з причиною і підписом, не частіше ніж раз на квартал.
stock.lotне використовується там, де треба. Продали готовий виріб клієнту, з’явилася претензія — а ми не можемо відстежити, з якої сировини зроблено. Налаштуйtracking='lot'або'serial'на product.template для всіх defense-категорій.- Переміщення без
analytic_distribution. Більшість stock.move не потребують аналітики (внутрішній рух). Але якщо рух дає витрату (списання у виробництво або брак) — аналітика на picking чи на ту лініюaccount.moveкритична для звітності за контрактом.
Дотичне
- Документ-модель — picking як ланка ланцюга
- MRP — як MO споживає склад
- Accounting — куди йдуть anglo-saxon-проводки
- Analytic Account — коли потрібна аналітика на складі
- Інвентаризація · ТМЦ — інвентаризація українською
- Акт М-7 — акт інвентаризації
Де цей модуль зустрічається12
- ГайдВоєнні списанняНа склад прилетіло, частина сировини знищена, частина пошкоджена. Як скласти акт військадміністрації, провести…
- ГайдІмпорт: МД + ПДВЯк оформити надходження імпортних компонентів через МД, врахувати мито й акциз у собівартості і визнати ПДВ за…
- ГайдІнвентаризація: manual vs perpetualЯкий режим інвентаризації в Odoo обрати — разовий перерахунок на дату для річної фінзвітності чи постійну цикл…
- ГайдПравила перезамовленняНалаштовуємо reordering rules, щоб Odoo сам формував RFQ, коли залишки опускаються нижче мінімуму — без ручног…
- ГайдЧасткове прийманняПостачальник привіз менше або з браком — як коректно зафіксувати приймання, створити backorder і не порушити т…
- ГайдLot / Serial для defenseНалаштовуємо `tracking=lot` на компоненти і `tracking=serial` на готові вироби, щоб довести шлях кожної партії…
- ГайдQuality checkТочки контролю якості на MO і work orders: візуальна перевірка, замір, pass/fail, зв'язок із серійними номерам…
- ФазаDesignПеретворити BRD на конкретну конфігурацію Odoo: рахунки, податки, аналітика, склади, права, виробничі лінії.
- OdooДокумент-модельЯк один SO запускає ланцюг операцій: реальний приклад руху бізнес-документа крізь моделі Odoo.
- OdooAVCO (середня вартість)AVCO — це один «змішаний» цінник на товар, що перераховується з кожним приходом і не ворушиться на виході. Зру…
- OdooMRPВиробниче замовлення (MO) як центр виробничого обліку: списання матеріалів, операції, оприбуткування готової п…
- OdooPurchaseЗамовлення постачальнику — джерело надходжень, рахунків від постачальника і вхідного ПДВ.