Odoo
МодульAnalytic Account — окремий вимір обліку
Чому аналітика окрема від плану рахунків і як нею вести проєктний облік оборонних контрактів, рахувати маржу за SKU та розподіляти ЗВВ.
Що це і навіщо
Стандартний план рахунків — це «вертикальний» вимір обліку. Він каже: ось 201 (сировина), ось 23 (виробництво), ось 26 (готова продукція), ось 703 (доходи). Звідси ти отримуєш баланс і звіт про фінрезультати. Але не отримуєш відповіді на питання: «скільки заробив контракт А-1234?», «яка маржа на SKU-XYZ?», «у який цех зайшло більше витрат за квартал?». Вертикаль на це мовчить, бо горизонталі в неї немає.
Analytic Account — це і є та горизонталь. Не рахунок плану, а окремий зріз для управлінського обліку. На кожну проводку, де це доречно, ти ставиш аналітику: «це лягло на контракт А-1234», «це на цех 1», «це на проєкт Розробка-2026». А далі збираєш агрегати за будь-яким розрізом — окремо від класу 1-9.
Як це працює
Модель в Odoo 17+:
account.analytic.plan— група аналітик. Наприклад, «Контракти», «Підрозділи», «SKU», «Проєкти». Кожен план може мати свій список аналітик.account.analytic.account— сама аналітична позиція. Належить плану. Маєcode,name.account.analytic.line— рядок аналітичного руху. Це факт «на аналітику Х витрачено суму Y у дату Z по такій-то проводці».
# Створюємо аналітичний план для контрактів
plan_contracts = self.env['account.analytic.plan'].create({
'name': 'Defense Contracts',
'default_applicability': 'optional',
})
# Створюємо аналітику для контракту А-1234
analytic = self.env['account.analytic.account'].create({
'name': 'А-1234.2026.Партія-1',
'plan_id': plan_contracts.id,
'code': 'A1234-2026-P1',
})
На рівні документа аналітика прикладається через analytic_distribution — це JSON-словник {analytic_account_id: percentage}. Можна розпорошувати між кількома аналітиками одночасно.
# SO зі 80% на контракт А-1234 і 20% на R&D
so_line.analytic_distribution = {
str(contract_a1234.id): 80,
str(rnd_2026.id): 20,
}
При постингу invoice/picking/MO Odoo створює відповідні account.analytic.line зі сумами, пропорційно distribution.
Шлях у меню: Accounting → Configuration → Analytic Plans (плани), → Analytic Accounts (самі аналітики), → Reporting → Analytic Report (звіти).
У контексті українського обліку
Українській бухгалтерії аналітика потрібна завжди:
- Витрати за статтями. ЗВВ — це не одна сума, а десятки статей. Аналітика дає розкладку.
- Витрати за підрозділами. Цех 1, цех 2, адміністрація. Без цього розподіл ЗВВ повисає в повітрі.
- Витрати за об’єктами калькуляції. Кожен виріб чи контракт — окремий об’єкт. Це базова українська калькуляція собівартості за УПСБО 16.
- Планова і фактична собівартість. Розрив між ними — це лінії аналітики, які лишається зіставити.
Цікавий момент: аналітика не йде ні в декларацію ПДВ, ні в Баланс, ні у Ф2. Вона тільки для управлінки. Тож аудитор у неї майже не зазирає (хіба спитає, «як ви розподіляли ЗВВ»), а керівник дивиться щодня.
Як ми робимо (defense-контекст)
ТОВ «УкрПром-Тех» тримає три аналітичні плани:
- Contracts (Контракти). Кожен оборонний контракт А-XXXX і кожен цивільний договір — окрема analytic. Це головний план. Усі дохідні та прямі витратні проводки мають analytic звідси.
- Divisions (Підрозділи). Цех 1 (механічна обробка), Цех 2 (складання), Цех 3 (тестування), Адміністрація, R&D. Сюди лягають ЗВВ і непрямі витрати.
- Products (SKU). Кожна готова продукція з окремим артикулом. Сюди лягають тільки витрати, прив’язані до конкретного виробу, — щоб рахувати рентабельність за SKU.
На SO бухгалтер обирає одну analytic з плану Contracts (наприклад, А-1234.2026.Партія-1). На MO та сама analytic підтягується автоматично. ЗВВ-проводки бухгалтерія розкидає за пропорцією виробничої потужності: MO Партії-1 з’їв 30% часу Цеху 2 → 30% ЗВВ Цеху 2 лягає на analytic Партії-1.
Звіт «Контракт А-1234 за 2026» — це всі analytic_line з analytic_account_id = А-1234. Доходи мінус усі прямі та розподілені непрямі витрати — ось маржа.
Типові граблі
- Аналітика порожня — звіт пустий. Найчастіший випадок. Менеджер не проставив на SO, MO успадкував порожнечу, інвойс теж без аналітики. Контракт «загубився». Лікувати — required-поле на критичних документах через server action.
- Аналітика на 100% або не на 100%.
analytic_distributionмає сумуватися в 100. Якщо 80 + 30 = 110 — Odoo не блокує, але звіти попливуть. Постав constraint на моделі. - Один контракт у двох планах. Завели «А-1234» у плані Contracts і ще раз «А-1234» у Divisions. Тепер, коли пишеш analytic_distribution, не зрозуміло, котрий із них. Тримай дисципліну: один контракт — один план.
- Закрита аналітика з відкритими лініями. Деактивував
account.analytic.account(поставивactive=False), а старі account.analytic.line лишилися. Звіт за 2025 цю аналітику вже не показує. Не деактивуй — архівуй через окреме поле або тримай як read-only. - Аналітика на reverse move. Сторно інвойсу зробили без analytic. Якщо оригінал мав analytic — реверс її підхопить. Якщо ж сторнуєш вручну через misc journal — забудеш проставити, і контракт лишиться «з горбом»: на оригіналі є, на сторно немає.
analytic_precisionпоплив. Distribution 33.33% × 3 = 99.99%. Копійка не сходиться. Налаштуйdecimal_precision = Analytic Discountу системних параметрах.- Розподіл ЗВВ зайшов на закриту аналітику. Cron розкидає ЗВВ за квартал. Один із контрактів уже закрито, але cron цього не знає — і кидає туди частку. Звіт за закритим контрактом «оживає» з минулого. Постав у cron фільтр
state != 'closed'.
Дотичне
- Accounting — як analytic_distribution живе на account.move
- MRP — analytic як основа собівартості
- Sales — analytic на SO
- Документ-модель — як аналітика тягнеться ланцюгом
- Як думає Odoo — модельна архітектура
Де цей модуль зустрічається5
- ГайдРучна проводкаЯк коректно завести в Odoo проводку, яку не згенерував жоден інший документ: нарахування, перерозподіл, бухгал…
- ГайдЧитати account.moveaccount.move — це універсальний документ-проводка в Odoo. Розбираємо інтерфейс журнального запису поле за поле…
- OdooInventoryФізичні і логічні рухи запасів: stock.move як атом обліку, stock.quant як зріз наявності, anglo-saxon як основ…
- OdooMRPВиробниче замовлення (MO) як центр виробничого обліку: списання матеріалів, операції, оприбуткування готової п…
- OdooSalesЗамовлення покупця як точка входу в Odoo — звідси розгортається ланцюг постачання, виробництва і платежу.