Odoo
МодульOdoo Purchase
Замовлення постачальнику — джерело надходжень, рахунків від постачальника і вхідного ПДВ.
Що це і навіщо
Purchase — дзеркало Sales, тільки в інший бік. Тут живе purchase.order: те, що замовляємо в постачальника. Підтвердив PO — отримав stock.picking на прихід. Постачальник привіз — оприбутковуєш. Прийшов рахунок — створюєш account.move типу in_invoice і прив’язуєш до PO. Ланцюг замкнувся: очікуємо товар, отримуємо його, платимо.
Для виробничого підприємства Purchase — це не тільки матеріали, а й послуги: оренда, транспортування, аутсорс. Кожен PO визначає, на який рахунок ляже витрата (через product.category → property_account_expense_categ_id) і яку аналітику отримає. Без аналітики на PO собівартість оборонного замовлення А-1234 ніколи не зійдеться з планом.
Як це працює
Стани: RFQ (Request for Quotation) → Purchase Order → Done. RFQ — це коли ще не обрав постачальника або чекаєш комерційної пропозиції. PO — підтверджене замовлення, з якого утворюється stock.picking типу incoming.
Що відбувається при «Confirm Order»:
- Створюється
stock.picking(тип «Receipts»), очікує надходження. - Заводиться
stock.moveна кожен рядок із кількостями. - Сам PO переходить у стан
purchase, аdate_plannedстає очікуваною датою отримання.
Коли товар реально прийшов — натискаєш «Receive Products» на picking, валідуєш. Тоді створюються stock.valuation.layer (для anglo-saxon) або проводки відразу на 20-30/631 (для continental). Для UA-практики ми завжди вмикаємо anglo-saxon, бо це коректна реалізація FIFO/AVCO.
Інвойс постачальника — окремий документ. На PO є кнопка «Create Bill». Краще створювати через неї: тоді Odoo сам підтягне рядки й кількості і налаштує трирівневе звіряння PO ↔ Picking ↔ Bill. Якщо щось не збігається — побачиш червоне.
# Створення PO
po = self.env['purchase.order'].create({
'partner_id': supplier.id,
'order_line': [(0, 0, {
'product_id': raw_material.id,
'product_qty': 1000,
'price_unit': 25.50,
'analytic_distribution': {str(contract.id): 100},
})],
})
po.button_confirm()
У контексті українського обліку
Стандартний Odoo Purchase не знає про:
- Вхідну податкову накладну. ПН надходить окремо в ЄРПН від постачальника. Її треба підв’язати до Bill через кастомну модель (у Oblik-ERP це є, у стандарті — ні).
- Довіреність на отримання ТМЦ. Окрема форма, прив’язана до конкретного PO і відповідального.
- М-4 (прибутковий ордер). Це наш первинний документ при надходженні на склад. У стандартному Odoo — лише англійський «Receipt». Видаткова накладна постачальника також є, але форматується інакше.
Що з коробки добре працює: трирівневе звіряння (PO/Picking/Bill), reordering rules, supplier lead times. На це не треба нічого допилювати.
Як ми робимо (defense-контекст)
ТОВ «УкрПром-Тех» закуповує через Прозоро для державних замовників. Pipeline такий:
- Виграли тендер на Прозоро → у нас з’являється договір з військовою частиною А-XXXX.
- Для виконання нам потрібні комплектуючі — формуємо PO постачальникам.
- Кожен PO має
analytic_distributionна той самий контракт А-XXXX, що й SO. Так собівартість і дохід зустрічаються в одній аналітиці.
При надходженні від постачальника обов’язково скануємо серійні номери компонентів (через stock.lot). Це частина трасабіліті — потім зможемо довести, який саме компонент пішов у який виріб для замовника. Без цього не працюють ні ВТП-сертифікація, ні гарантійний облік.
Типові граблі
- Bill створили вручну, без PO. Тоді немає трирівневого звіряння. Бухгалтер може провести оплату до того, як товар прийде. Правило: всі Bills йдуть через кнопку на PO. Виняток — комуналка і дрібнота.
- Кількість в Bill більша, ніж у Picking. Odoo дозволить, але це тривожний сигнал: або постачальник «домалював», або ми недосканували. Перевіряти через звіт «Bill Matching».
- Забули
account_idна product.category. PO підтверджується, picking валідовано — але проводка не пройшла, бо рахунок не визначений. Перевірятимеш у Settings → Inventory → Operations → Stock valuation account. - Lead time неправильний. PO заплановано на завтра, а реально товар їде 3 тижні. Тож MRP бачить, що матеріал «буде завтра», і запускає виробництво. Налаштовуй supplier lead time як параметр на
product.supplierinfo. - Аналітики дві — продаж в А-1234, закупівля в А-9999. Маржа порахується неправильно. Правило: PO успадковує аналітику від відповідного SO або від проєкту, якщо це make-to-order.
Дотичне
- Документ-модель — повний ланцюг PO → receipt → bill → payment
- Inventory — як приходи лягають на склад
- ПН/РК — вхідні ПН та їхня прив’язка
- Прихідний М-4 — український прибутковий ордер
- Прихідна М-4 — оформлення М-4
- Перша подія · закупівля — перша подія в закупівлях
Де цей модуль зустрічається4
- ГайдПравила перезамовленняНалаштовуємо reordering rules, щоб Odoo сам формував RFQ, коли залишки опускаються нижче мінімуму — без ручног…
- ГайдRFQ → PO → отриманняПроводимо повний цикл: запит комерційної пропозиції, підтвердження замовлення, прихід на склад і автоматичне с…
- ФазаDiscoveryЗрозуміти as-is: процеси, документи, болі, обсяги, ІТ-ландшафт. Без цієї фази проєкт стартує сліпим — і провал…
- ФазаTrainingПідготувати усі ролі — бухгалтерів, виробничників, продавців, керівників — до роботи в новому Odoo. Окремі про…