Перейти до основного контенту
База знань · виробничий облік USD41,42 ПДВ20% МЗП8 000

Виробництво · Просунутий

Списання НЗВ на готову продукцію — як це робить Odoo MRP

Як 23 рахунок «розряджається» на 26 в межах місячного циклу: cost method, розподіл ЗВВ за П(С)БО 16.16, проводки оприбуткування. Що Odoo робить автоматом, де потрібен wizard, що звіряти руками.

Час
45 хв читання, регулярна процедура — 1 робочий день на місяць
Модуль Odoo
Manufacturing → Operations + Accounting → Inventory Valuation
Читання
~8 хв
  • НЗВ
  • готова продукція
  • 23
  • 26
  • ЗВВ
  • cost method
  • MRP

Наприкінці кожного місяця цех передає на склад готову продукцію, і ви маєте «розрядити» рахунок 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_valuationreal_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 автоматично:

  1. Створює stock.move з сировини у виробничий location → проводка Д 23 / К 201 за собівартістю сировини на момент списання.
  2. Створює зустрічний stock.move з виробничого location на склад ГП → проводка Д 26 / К 23 на собівартість, розраховану за cost method ГП.
  3. Якщо cost method = Standard, різницю між фактом і нормативом — на рахунок Price Difference (у нашому плані субконто 26.Відхилення або 949).
Дт 23 / Кт 201 — за списанням · сировина у виробництво Дт 23 / Кт 661 — за нарядом · зарплата робітників Дт 23 / Кт 651 — 22% ЄСВ · нарахування на зарплату Дт 26 / Кт 23 — за cost method · оприбуткування ГП

3. Розподіліть ЗВВ за П(С)БО 16.16

Це найскладніше і саме тут Odoo «з коробки» не справляється. Стандартно ЗВВ Odoo прив’язує до workcenter через costs_hour, але не ділить на постійні/змінні і не нормує за потужністю.

Тож логіка така:

  1. Протягом місяця всі ЗВВ-витрати (зарплата майстрів, амортизація цеху, енергоносії) йдуть на 91. Це окремі ручні account.move або згенеровані з hr.payslip, account.asset.line, account.move за рахунками постачальників комуналки.

  2. На кінець місяця через wizard (у нас — wizard.zvv.distribution):

    • Читає mrp.workcenter.capacity як нормальну потужність (наприклад, 8 годин × 22 робочих дні = 176 машино-годин).
    • Читає фактично відпрацьовані години з mrp.workorder за місяць (наприклад, 140 годин).
    • Коефіцієнт завантаження = 140/176 = 79,5%.
    • Ділить ЗВВ на 91 за вашою класифікацією на постійні (амортизація, оренда) і змінні (енергоносії, MRO).
    • Робить проводки:
Дт 23 / Кт 91 — змінні + постійні × 79.5% · у межах норми, в собівартість продукції Дт 901 / Кт 91 — постійні × 20.5% · понад норму, на собівартість реалізації Сила законуП(С)БО 16.16

Розподіл постійних ЗВВ на 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.move Inventory 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 не виконується.

Дотичне