Наприкінці кожного місяця цех передає на склад готову продукцію, і ви маєте «розрядити» рахунок 23 на 26: показати, скільки сировини, зарплати й ЗВВ реально лягло в собівартість випуску, а скільки лишилося в незавершеному виробництві. Частину цього Odoo MRP робить автоматом на кожному закритому замовленні, але розподіл ЗВВ за нормальною потужністю й звірку з актом інвентаризації доводиться доводити руками. Зробите акуратно — сальдо 23 зійдеться з цехом до копійки, а постійні ЗВВ понад норму чесно сядуть на 901, як вимагає П(С)БО 16.16. Зробите наосліп — завищена собівартість і залишок 23, який податкова ловить швидко.
Результат
Після цієї процедури:
- Сальдо рахунку 23 на 31-ше = вартість фактичного НЗВ за актом інвентаризації, ані копійки більше.
- Усі виконані
mrp.productionзгенерувалиaccount.moveД 26 / К 23 за коректною собівартістю. - Постійні ЗВВ у межах нормальної потужності — на 23 (відтак на 26), понад норму — на 901.
- Аналітика 26 веде окрему лінію за кожним SKU, відмінні партії — окремо.
Передумови
- Odoo 17/18, Manufacturing, Inventory, Accounting.
- На
product.templateготової продукції налаштовано:property_cost_method— Standard, AVCO або FIFO (про вибір нижче).property_valuation—real_time(Automated).property_stock_account_input_categ_id— рахунок 23 (для приходу з виробництва).property_stock_account_output_categ_id— рахунок 26 для ГП-категорії.
- Для сировини:
property_stock_account_output_categ_id— рахунок 201, для ГП на складі — 26. mrp.bom(специфікація) актуальна, з реальними нормами витрат.mrp.workcenterзcosts_hourіcapacity, що віддзеркалює реальну планову потужність.
Як це зробити
1. Виберіть і зафіксуйте Cost Method
Це питання облікової політики, а не одноразового налаштування. ⚖Сила законуП(С)БО 9.16 дозволяє чотири методи оцінки запасів при вибутті — FIFO, середньозваженої, нормативних витрат, ідентифікованої собівартості. Odoo підтримує три перші, плюс identified як спеціальний випадок tracking by serial.
Standard (нормативна собівартість). На product.template.standard_price стоїть планова собівартість. Кожен прихід ГП оприбутковується за нею. Різниця між фактом і нормативом — на окремому рахунку відхилень (у нашому плані 26 із субконто «Відхилення»). Підходить для серійного виробництва зі стабільною технологією.
AVCO (середньозважена). standard_price перераховується після кожного приходу:
new_avg = (qty_on_hand * old_avg + qty_in * cost_in) / (qty_on_hand + qty_in)
Кожен наступний випуск ГП оприбутковується вже за новою середньою. Підходить для виробництва зі змінною ціною сировини (експорт, валютна сировина).
FIFO. Кожна партія приходу зберігає свою вартість окремо (через stock.valuation.layer). Вибуття — від найстаршої. Підходить, коли партії суттєво відрізняються (різні постачальники сировини, різні курси).
На практиці тримайте AVCO для більшості SKU, а FIFO — для тих, де висока частка імпортної сировини: там FIFO дає реальніший cost-of-goods для P&L. Standard спокусливий, але норматив доводиться переписувати щоразу, коли ціна сировини скаче разом з курсом.
Метод закріплюється в обліковій політиці. Зміна методу — лише з 1 січня наступного року, з повідомленням податкової.
2. Перевірте, що всі mrp.production за місяць — у статусі done
Через Manufacturing → Operations → Manufacturing Orders з фільтром Date Planned ≤ 31.05 і State != Done. Усі такі MO — або довести до done (якщо ГП фактично випустили), або скасувати, або зберегти в progress (якщо це і є реальне НЗВ на кінець місяця).
При переході MO в done Odoo автоматично:
- Створює
stock.moveз сировини у виробничий location → проводка Д 23 / К 201 за собівартістю сировини на момент списання. - Створює зустрічний
stock.moveз виробничого location на склад ГП → проводка Д 26 / К 23 на собівартість, розраховану заcost methodГП. - Якщо
cost method = Standard, різницю між фактом і нормативом — на рахунок Price Difference (у нашому плані субконто 26.Відхилення або 949).
3. Розподіліть ЗВВ за П(С)БО 16.16
Це найскладніше і саме тут Odoo «з коробки» не справляється. Стандартно ЗВВ Odoo прив’язує до workcenter через costs_hour, але не ділить на постійні/змінні і не нормує за потужністю.
Тож логіка така:
-
Протягом місяця всі ЗВВ-витрати (зарплата майстрів, амортизація цеху, енергоносії) йдуть на 91. Це окремі ручні
account.moveабо згенеровані зhr.payslip,account.asset.line,account.moveза рахунками постачальників комуналки. -
На кінець місяця через wizard (у нас —
wizard.zvv.distribution):- Читає
mrp.workcenter.capacityяк нормальну потужність (наприклад, 8 годин × 22 робочих дні = 176 машино-годин). - Читає фактично відпрацьовані години з
mrp.workorderза місяць (наприклад, 140 годин). - Коефіцієнт завантаження = 140/176 = 79,5%.
- Ділить ЗВВ на 91 за вашою класифікацією на постійні (амортизація, оренда) і змінні (енергоносії, MRO).
- Робить проводки:
- Читає
Розподіл постійних ЗВВ на 901, а не на 23, — не «вибір», а норма П(С)БО 16.16. Якщо wizard списує всі постійні ЗВВ на 23, ви завищуєте собівартість одиниці й занижуєте собівартість реалізації. На балансі це видно як завищений залишок 26 — і податкова ловить це швидко.
4. Закрийте 91
Після кроку 3 сальдо 91 = 0. Не «майже нуль», а нуль до копійки. Якщо ні — або ЗВВ-витрати додалися після запуску wizard’а, або є проводки, які він не побачив.
5. Випустіть Акт випуску ГП
В Odoo автоматичні проводки Д 26 / К 23 створюються на кожний MO done. Сумарно це і є випуск за місяць. Для бухгалтерських цілей — друкуйте з модуля Manufacturing → Reporting → Production Analysis загальну суму за місяць як основу для Акту випуску ГП.
6. Звірте акт інвентаризації НЗВ з сальдо 23
Формула:
Сальдо 23 на 31.05 = НЗВ початковий + Витрати місяця – Випуск (на 26 + на 901 ЗВВ понад норму)
Якщо сальдо 23 ≠ актові інвентаризації — є розбіжність, яку треба пояснити. Можливі причини:
- Сальдо > акт. В обліку «висить» те, чого в цеху немає — недостача НЗВ. Оформіть
stock.moveInventory Adjustment Д 947 / К 23. - Сальдо < акт. В цеху є те, чого в обліку немає — надлишок (рідко, але буває при перерахунку нормативу). Оформіть Д 23 / К 719.
Перевірка
-
property_cost_methodдля всіх готових виробів узгоджений з обліковою політикою. - Усі
mrp.productionзdate_finishedу межах місяця — у статусіdone. - Сальдо 91 на 31-ше = 0.
- Усі ЗВВ-витрати класифіковані на постійні/змінні (через subconto на 91 або аналітичні теги).
- Коефіцієнт завантаження цеху обчислений і збережений (для пояснення суми на 901).
- Сальдо 23 на 31-ше = акт інвентаризації НЗВ.
- За кожним SKU розрахована собівартість одиниці, збережена в
mrp.production(полеcost_per_unit). - Відхилення фактичної собівартості від планової > 10% — пояснені.
Якщо щось пішло не так
Cost method = Standard, а на 26 «зависає» різниця між фактом і нормативом. Це нормально — різниця має лягати на рахунок Price Difference (у налаштуваннях категорії продукту, поле property_stock_account_production_cost_id). Якщо такий рахунок не виставлений — Odoo лишає на 26 з тегом cost_adjustment. Перенесіть вручну на 949.
Wizard розподілу ЗВВ кинув виняток «no production for the period». Перевірте, що у mrp.production за травень date_finished справді в межах місяця, а не в червні. Якщо MO закрилось 2-го червня — його витрати йдуть на червень, навіть якщо сировину списали в травні.
На 23 після випуску ГП «зависла» дробова сума на копійки. Це округлення FIFO/AVCO. Налаштуйте decimal_precision для Product Unit of Measure на 4 знаки після коми. Якщо лишається — створіть account.move Д 23 / К 23 з аналітикою «округлення» на залишок (бухгалтер це робить раз на квартал).
ЗВВ на 91 списалися двічі (раз з cost_hour mrp.workcenter, раз ручною проводкою). Часта помилка налаштування. Workcenter cost_hour створює account.move Д 23 / К 91 на кожен mrp.workorder. Якщо ви додатково ведете ЗВВ вручну на 91, отримуєте подвійний рахунок. Виберіть одне з двох: або costs_hour = 0 і всі ЗВВ ручкою через wizard, або працюйте через workcenter. Ми обрали ручкою — точніше контроль.
Постійні ЗВВ повністю сіли на 23, на 901 нуль попри недозавантаження. Wizard працює без вашої класифікації постійні/змінні — або вона не налаштована. Перевірте subconto на 91, всі account.move.line мають бути промарковані. Без цього П(С)БО 16.16 не виконується.
Дотичне
- Закриття НЗВ — концептуально — теорія, чому саме так.
- Закриття місяця — чеклист — у який крок це вписується.
- Собівартість — що таке
direct costіoverhead allocation. - Як думає Odoo MRP — модель
mrp.production,stock.valuation.layer,account.moveланцюг.