Кінець місяця — це момент, коли розрізнені проводки за тридцять днів треба звести в одну картину, якій можна довіряти: подати декларацію з ПДВ і ЄСВ, а тоді закрити період, щоб ніхто вже не переписав минуле заднім числом. Цей чеклист веде вас через увесь цикл по порядку — від перевірки первинки до Lock Date — так, щоб на кожному кроці ви бачили, що саме перевіряєте і чому це не можна пропустити. Зробите за ним — матимете сальдо, яке поясните рядок за рядком, і звітність із тих самих даних, що залишаться в системі назавжди.
Результат
Після цього чеклисту у вас:
- Усі первинні документи за місяць проведені, звірені й залоковані.
- Сальдо рахунків 23, 91, 362, 632 — у стані, який ви можете пояснити рядок за рядком.
- Декларація з ПДВ і звіт ЄСВ сформовані з тих самих даних, що залишаться в системі назавжди.
- На період виставлено Lock Date — заднім числом без сліду вже ніхто нічого не виправить.
За зрілою процедурою це 5–7 робочих днів. За кривою — 20–25 і нерви до Нового року.
Передумови
- Працюєте на Odoo 17/18 з модулями Accounting, Manufacturing, Inventory, кастомізацією l10n_ua_oblik.
- Маєте права групи Accounting / Advisor або вище (для Lock Date).
- Завантажений курс НБУ за всі дні місяця (cron
Update Currency Rate, frequency = daily). - ЄРПН-конектор працює, вхідні ПН підтягуються в
account.move. - Налаштовані аналітичні рахунки за цехами/SKU (інакше розподіл ЗВВ не порахується).
Як це зробити
1. Закрийте первинку (1–3 числа)
Найперше — переконатися, що всі акти, накладні, рахунки за місяць у системі. Не «закрив місяць», коли акт від 28-го прийшов 5-го наступного. Тоді документ проводиться датою 28-го, лок ще не стояв — операція коректна.
Запустіть звіт Reporting → Accounting → Audit Reports → General Ledger з фільтром «Draft only» — побачите всі непроведені account.move. Кожен або проведіть, або сторнуйте з обґрунтуванням.
Окремо пройдіться по банківських виписках. Якщо account.bank.statement лежить у статусі «New» без reconciled = true — банк не зведений. У Bank Reconciliation має бути «0 transactions to reconcile» по всіх рахунках компанії.
2. Звірте з контрагентами (3–5 числа)
Через Partner Ledger (Reporting → Partner Ledger) — звірка по кожному ключовому контрагенту. Дебіторка > 100 000 ₴ і кредиторка > 100 000 ₴ підписуються актами звірки. Це не формальність — у ТОВ «УкрПром-Тех» три кейси, коли наша 631 показувала на 80 000 ₴ менше, ніж у контрагента, і виявили це саме на звірці.
3. Інвентаризація запасів і НЗВ (5–7 числа)
Через Inventory → Operations → Physical Inventory на 31-ше число. Окремо — Акт інвентаризації НЗВ за наказом керівника (комісія: голова, начальник цеху, бухгалтер). Розбіжності оформте як stock.move з типом «Inventory Adjustment».
Деталі — у статті Закриття НЗВ.
4. Нарахуйте амортизацію (7–8 числа)
Через Accounting → Operations → Assets: усі необоротні активи зі статусом running мають нараховану амортизацію за місяць. Cron Generate Assets Entries має пройти без помилок. Перевірте, що сальдо 131 збільшилось на очікувану суму.
5. Перевіряйте першу подію по ПДВ (8–10 числа)
Через звіт Кастомний модуль → ПДВ → Перша подія: вибірка account.move, де vat_event_date > invoice_date або відсутня вхідна ПН за зареєстрованою постачальником закупівлею.
Червоні прапорці:
- Аванс отриманий, ПН не виписана. Дивіться
account.paymentзі сторони in, деmove_type = 'in_invoice'ще не існує. ПН треба виписати датою авансу. ⚖Сила законуПКУ 187.1 - Товар отриманий, ПН від постачальника не зареєстрована. Якщо більше 15 днів — ПК під ризиком. ПКУ 201.10
Деталі — у гайді Перша подія в закупівлі.
6. Розподіліть ЗВВ і закрийте 91 (10–15 числа)
Запустіть wizard wizard.zvv.distribution (кастомізація). Він читає планову потужність зі mrp.workcenter.capacity, фактичну — з виконаних mrp.production, рахує коефіцієнт завантаження і робить:
Контроль: сальдо 91 на 31-ше = 0. Якщо ні — wizard не пройшов до кінця або є непроведені проводки на 91. Не закривайте місяць з ненульовим 91 — це ознака недопрацьованого циклу.
7. Закрийте НЗВ і випуск ГП (15–17 числа)
Собівартість випуску = НЗВ початковий + Витрати місяця – НЗВ кінцевий (за актом інвентаризації).
Деталі — у статті Закриття НЗВ. Якщо у вас одне з трьох SKU випадає в збиток — це або помилка в базі розподілу, або реальна проблема ціноутворення. Не «розмазуйте» так, щоб виглядало рівно.
8. Currency revaluation (17–18 числа)
Через Accounting → Operations → Unrealized Currency Gains/Losses на 31-ше число. Перерахунок усіх валютних залишків (362, 316, 314, 632 у валюті) за курсом НБУ на дату балансу.
Дт 362 / Кт 714 — курсова + · ревальвація монетарних статей Дт 945 / Кт 362 — курсова – · девальвація монетарних статей⚖Сила законуП(С)БО 21 Деталі — в окремому гайді Курсові різниці на дату балансу.
9. Сформуйте і подайте звітність (19–20 числа)
- Декларація з ПДВ через
vat.declaration.wizardабоl10n_ua.declaration. Звірте підсумкові суми ПЗ і ПК з оборотами 641. - Звіт ЄСВ через
l10n_ua.esv.report. Звірте з оборотами 651. - Управлінський P&L через Reporting → Profit and Loss. Покажіть керівнику, щоб впіймати «не може бути».
Подача — до 20-го числа. ПКУ 49.18
10. Виставте Lock Date (21–25 числа)
Після подачі і прийняття квитанції №2 — закрийте період.
Accounting → Settings → Fiscal Periods → Lock Date:
period_lock_date(для всіх крім головбуха) — 31 травня.fiscalyear_lock_date(для всіх взагалі) — лишається кварталом раніше.tax_lock_date— окремо для ПДВ-операцій, теж 31 травня.
Після цього account.move.create з date <= lock_date піднімає UserError. Будь-яке коригування — або через відкат локу головбухом (з аудиторським логом), або через out_refund / in_refund поточною датою.
Перевірка
Перед тим як ставити Lock Date — пройдіться по списку. Кожне має бути «так».
- У General Ledger немає
account.moveзі станомDraftза період. - Усі банківські виписки звірені (Bank Reconciliation = 0 transactions).
- Підписані акти звірки за контрагентами з оборотом > 100 000 ₴ за місяць.
- Акт інвентаризації НЗВ підписаний комісією, відображений у бухгалтерії.
- Сальдо 91 на 31-ше число = 0.
- На 902 списані нерозподілені постійні ЗВВ — сума обґрунтована коефіцієнтом завантаження.
- Усі вхідні ПН за зареєстрованими постачальником закупівлями знайдені в ЄРПН і підвантажені.
- Усі вихідні ПН на «першу подію» (відвантаження або аванс) виписані.
- Currency revaluation запущено, сальдо валютних рахунків — за курсом 31-го числа.
- Декларація з ПДВ сформована, її підсумок збігається з оборотами 641 за місяць.
- Декларація з ПДВ подана, квитанція №2 отримана.
- Звіт ЄСВ поданий, квитанція №2 отримана.
- Lock Date виставлено на 31-ше число місяця.
Якщо щось пішло не так
Сальдо 91 не нуль після wizard’а. Подивіться через Reporting → General Ledger → Filter: Account = 91. Якщо є рядки після дати запуску wizard’а — або хтось додав ЗВВ заднім числом, або cron MRP: Cost Distribution доспрацьовував. Перезапустіть wizard.
Декларація не сходиться з обліком. Найчастіша причина — реєстрація ПН в ЄРПН датою, відмінною від account.move.invoice_date. Звіряйте поле vat_event_date (кастомне) з фактичною датою з ЄРПН.
Currency revaluation створив проводки за курсом, не за НБУ. Перевірте, чи в res.currency.rate на 31-ше число є запис від nbu. Якщо cron впав — підвантажте курс вручну через Settings → Currencies → USD → Rates.
Lock Date ставиться, але хтось встиг провести account.move після цього. Це нормально, якщо дата документа > lock_date. Лок захищає минуле, не поточне. Поточні операції йдуть як завжди.
Треба правити закритий період. Робіть це тільки через формалізовану процедуру: довідка про коригування → відкат локу головбухом → правка → новий лок. У mail.message account.move залишається лог. Аудитор побачить.
Дотичне
- Звітний період — концептуально, навіщо взагалі закривати.
- Закриття НЗВ — детально про крок 7.
- Курсові різниці на дату балансу — детально про крок 8.
- Списання НЗВ на ГП — про крок 7 з боку матеріальних залишків.
- Multi-currency в Odoo — налаштування для кроку 8.