Odoo
МодульOdoo Accounting — журнальні записи і подвійний запис
Як Odoo веде подвійний запис: account.move як універсальний документ-проводка, журнали як шафи, account.move.line як рядок.
Що це і навіщо
Accounting — це серце Odoo для бухгалтера. Усе, що відбувається в інших модулях, рано чи пізно перетворюється на account.move (журнальний запис) із набором account.move.line (рядків). Інвойс — це move. Платіж — теж move. Внутрішнє переміщення сировини у виробництво за anglo-saxon — знову move. Один уніфікований документ, на який «нанизано» подвійний запис.
Зручність у тому, що бухгалтер дивиться на все через ту саму призму. Хочеш побачити проводку — відкриваєш move, бачиш ліві (DR) і праві (CR) рядки. Потрібна ручна корекція — створюєш новий move у журналі «Miscellaneous». Треба закрити рахунок — закриваєш суму проводкою, як завжди.
Як це працює
Модель проста і потужна:
account.account— план рахунків. Це довідник: код (201,631,703), назва, тип (asset/liability/equity/income/expense), валюта-обмеження.account.journal— журнали як «шафи». Типи:sale,purchase,cash,bank,general. У кожній компанії є хоча б по одному.account.move— документ-проводка. Має дату (date), журнал (journal_id), стан (draft/posted/cancel), назву (name, наприклад «INV/2026/00123»).account.move.line— рядок проводки. Має рахунок (account_id), debit/credit, partner, аналітику, валюту.
Інваріант: сума debit рядків move дорівнює сумі credit рядків. Odoo не дозволить запостити незбалансований move.
# Ручний move — корекція
move = self.env['account.move'].create({
'journal_id': journal_misc.id,
'date': fields.Date.today(),
'line_ids': [
(0, 0, {'account_id': acc_91.id, 'debit': 1000, 'credit': 0,
'analytic_distribution': {str(contract.id): 100}}),
(0, 0, {'account_id': acc_23.id, 'debit': 0, 'credit': 1000}),
],
})
move.action_post()
Стан posted — це коли проводка увійшла в облік. Після цього рядки в стандарті не редагуються (lock date зазвичай вмикають). Треба виправити — або сторно через reverse move, або нова проводка-корекція.
Шлях у меню: Accounting → Customers / Vendors / Accounting → Journal Entries. Звіти: Accounting → Reporting.
У контексті українського обліку
З коробки в Odoo Enterprise з l10n_ua ти отримуєш:
- Український план рахунків (1, 2, 3, 4, 5, 6, 7, 8, 9 класи за наказом 291).
- Базові журнали (sale, purchase, cash, bank, misc).
- ПДВ-ставки 20%, 7%, 0%, без ПДВ.
Чого з коробки немає — і що додає Oblik-ERP або власні модулі:
- Друкована форма «Бухгалтерська довідка» (для ручних коригувань).
- Касова книга з підсумками за день (стандартний журнал каси є, форми — немає).
- Розрахунково-платіжна відомість.
- Декларація з ПДВ у форматі ДПС.
- Об’єднана звітність ЄСВ/ПДФО.
- Українські фінзвіти: Баланс (1М), Звіт про фінансові результати (2М).
Anglo-saxon чи continental: для UA вибираємо anglo-saxon. Він правильно рахує собівартість за FIFO/AVCO і дає stock.valuation.layer для аудиту. Continental спрощує життя на старті, але потім обертається важкими проблемами зі звітами собівартості.
Як ми робимо (defense-контекст)
На ТОВ «УкрПром-Тех» Accounting — це місце, де сходяться всі лінії аналітики. Без жорсткої дисципліни воно розсипається — ось на чому вона тримається:
- Кожен
account.move.lineдля витратного рахунку (23, 91, 92, 93) обов’язково маєanalytic_distribution. Якщо немає — server action блокуєaction_post. - На рядку собівартості реалізації (902, 903) аналітика тягнеться із SO/MO. Так і бачимо: «контракт А-1234 заробив 2,1 млн ₴ за собівартості 1,68 млн ₴».
- Окремий журнал «ПДВ — обов’язки» і «ПДВ — кредит». Це не стандартний підхід, але українському бухгалтеру так зрозуміліше. У ньому — лише рух за рахунками 641/643/644/6442.
Закриття місяця у нас — це послідовність: курсова переоцінка → закриття WIP за MO → розподіл ЗВВ → перевірка ПДВ-лімітів → формування декларації → постинг.
Типові граблі
- Lock date не встановлено. Бухгалтер може запостити проводку у «закритий» місяць — і звіти за минулі періоди пливуть. Встановлюй
tax_lock_date,period_lock_date,fiscalyear_lock_dateпісля кожного періоду. Розблокувати може тільки адмін. - Continental увімкнено, anglo-saxon не запрацював. Тоді stock.move не дає проводок, а склад накопичується в системі без бухгалтерського відображення. Аж раптом — «де у мене 2,5 млн на 201?». Дивись Settings → Inventory → Anglo-Saxon Accounting.
account.moveбез партнера. На покупцеві/постачальнику чи на рядку з 631/361 partner_id обов’язковий, інакше реконсиляція не працює і звіт «Заборгованість покупців» порожній. Виправляється тільки сторно і перепостингом.- Один рахунок на дві ставки ПДВ. Налаштував 6411 під 20% і 7% разом — декларація вийде неправильна. Розводь: 6411-20 і 6411-7. Не лінуйся.
- Reverse без правильної дати. Сторно вже закритого move лягає поточною датою, а це псує порівняльну аналітику. Завжди став
reverse_dateна дату оригіналу (для бухгалтерських цілей) або поточну (для виправлення поточного). Чітко розумій, чого саме хочеш. - Misc-журнал — звалище. Туди скидають усе, що нікуди не пасує. Через рік аудитор не розбере, де там сторно, де коригування, а де — пробний запис. Заведи окремі misc-журнали: «Коригування», «Закриття місяця», «ЗП ручна».
Дотичне
- Як думає Odoo — архітектурний контекст моделей
- Документ-модель — як інші модулі генерують move
- Валюта — курсові різниці і валютні проводки
- Касовий метод — касовий метод ПДВ
- Декларація ПДВ — декларація ПДВ на основі move
- Баланс — Баланс і звіти
Де цей модуль зустрічається17
- ГайдАвансовий звітПідзвітна особа отримала готівку на ПММ і запчастини. Як завести аванс на 372, прикріпити чеки в Expenses, офо…
- ГайдЗакриття місяця · чеклистПокрокова процедура місячного циклу від перевірки первинки до Lock Date. Для головбуха ТОВ «УкрПром-Тех» на Od…
- ГайдЗвірка через AgedВід звіту Aged Receivables до підписаного акта звірки: як швидко знайти прострочену дебіторку по партнерові, п…
- ГайдНЗВ → ГПЯк 23 рахунок «розряджається» на 26 в межах місячного циклу: cost method, розподіл ЗВВ за П(С)БО 16.16, провод…
- ГайдПерша зарплатаРозрахунковий лист на одного працівника від нуля: оклад, ЄСВ 22%, ПДФО 18%, військовий збір 5%, проводки на 66…
- ГайдПерший день в OdooОрієнтація бухгалтера, який щойно зайшов в Odoo з-під 1С чи BAS: де живуть проводки, журнали, план рахунків і …
- ГайдРучна проводкаЯк коректно завести в Odoo проводку, яку не згенерував жоден інший документ: нарахування, перерозподіл, бухгал…
- ГайдСторно vs ReverseДві стратегії виправлення помилки в обліку: класичне червоне сторно і Reverse Entry в стилі Odoo. Що означають…
- ГайдТабель П-5Як побудувати табель за формою П-5 на 31 робочий день: автоматично з hr.attendance, з ручним коригуванням ліка…
- ГайдЧитати account.moveaccount.move — це універсальний документ-проводка в Odoo. Розбираємо інтерфейс журнального запису поле за поле…
- OdooВалютаВалютні рахунки, currency revaluation, курс НБУ як джерело. Дати в експорті: МД, надходження валюти, баланс — …
- OdooДокумент-модельЯк один SO запускає ланцюг операцій: реальний приклад руху бізнес-документа крізь моделі Odoo.
- OdooЯк думає OdooАрхітектурна основа: ORM, models, fields, views, actions, security. Без цього кастомізація — шаманство.
- OdooAnalytic AccountЧому аналітика окрема від плану рахунків і як нею вести проєктний облік оборонних контрактів, рахувати маржу з…
- OdooAVCO (середня вартість)AVCO — це один «змішаний» цінник на товар, що перераховується з кожним приходом і не ворушиться на виході. Зру…
- OdooInventoryФізичні і логічні рухи запасів: stock.move як атом обліку, stock.quant як зріз наявності, anglo-saxon як основ…
- OdooQWebЯк Odoo рендерить PDF через QWeb: синтаксис шаблонів, директиви t-set/t-if/t-foreach, кастомізація ПН з типом …