Кредиторська заборгованість (AP) — це гроші, які ваш бізнес винен своїм постачальникам за товари чи послуги, які ви вже отримали, але ще не оплатили. У світі бухгалтерії AP класифікується як поточне зобов’язання у вашому балансі — сума, яка зазвичай підлягає сплаті протягом наступного року, а часто протягом 30–60 днів.
Це поняття є центральним для методу нарахування в бухгалтерському обліку, де ви фіксуєте витрати та відповідне зобов’язання в момент отримання рахунку, а не коли фактично надсилаєте гроші. Цей посібник покаже вам, як керувати всім процесом кредиторської заборгованості чисто та ефективно за допомогою інструменту текстового обліку Beancount.
Короткий підсумок
Перш ніж заглибитися в деталі, розглянемо основне:
- Кредиторська заборгованість (AP) представляє ваші короткострокові борги перед постачальниками. Ви знайдете її в розділі
Зобов'язаннявашого балансу. - Метод нарахування vs. касовий метод: AP — це поняття, яке існує лише якщо ви ведете облік за методом нарахування. Beancount повністю підтримує робочі процеси за методом нарахування, а його веб-інтерфейс Fava коректно відображатиме ваші зобов'язання.
- AP vs. AR: Все просто: Кредиторська заборгованість — це те, що ви винні, тоді як дебіторська заборгованість (AR) — це те, що інші винні вам.
Де AP живе в Beancount (і Fava)
Щоб почати відстежувати кредиторську заборгованість (AP), спочатку потрібно оголосити для неї рахунок у вашій книзі. Стандартна конвенція:
Liabilities:AccountsPayable
За бажанням ви можете створити субрахунки для основних постачальників (наприклад, Liabilities:AccountsPayable:ForestPaintSupply).
У Fava цей рахунок з'явиться у вашому балансі під розділом Liabilities. Ви можете натиснути на нього, щоб заглибитися та побачити проводки, що складають баланс. Ви навіть можете побачити це в дії у публічному прикладовому журналі Fava, який містить рахунок Liabilities:AccountsPayable.
Конвенція знаків: Beancount зберігає залишки зобов'язань як кредити (від'ємні числа). Залишок -500.00 USD на Liabilities:AccountsPayable означає, що ви винні $500. Звіт про відкриті позиції нижче змінює знак за допомогою -SUM(number), щоб кожен несплачений рахунок показував позитивну суму до сплати. Повністю погашений рахунок дає суму нуль і виключається за допомогою HAVING.
Будівельні блоки Beancount, які ви використовуватимете
Надійний робочий процес кредиторської заборгованості (AP) у Beancount спирається на кілька основних функцій:
- Рахунки: Ви переважно використовуватимете свій рахунок
Liabilities:AccountsPayable, грошовий рахунок, наприкладAssets:Bank:Checking, та різні рахунки витрат (наприклад,Expenses:Supplies). - Метадані: Ви можете прикріпити дані у форматі ключ-значення до будь-якої транзакції. Для AP ви будете використовувати метадані, такі як
invoice:,due:,terms:таdocument:. Встановітьoption "documents"на папку, щоб Beancount міг виявляти файли там; у Fava, перетягування файлу на рядок журналу вставляє запис метаданихdocument:, а ввімкненняplugin "fava.plugins.link_documents"пов'язує ці записи з виявленими директивами Document. - Теги та посилання: Використовуйте
#теги(наприклад,#ap) для легкого фільтрування та^посилання(наприклад,^INV-10455), щоб програмно пов'язати рахунок та його подальшу оплату разом. Це створює чіткий, зручний для аудиту слід у журналі — але лише посилань недостатньо для запиту відкритих рахунків нижче. - Запити (BQL): Мова запитів Beancount у стилі SQL (BQL) дозволяє виконувати потужні звіти, наприклад, перелік усіх відкритих кредиторських заборгованостей, відсортованих за датою сплати, безпосередньо з командного рядка за допомогою
bean-queryабо на сторінці "Query" у Fava.
Ідентифікація рахунку (обов'язкова для запитів відкритих рахунків): Кожен рахунок та кожна оплата, що його погашає — повна, часткова або з достроковою знижкою — мають містити ті самі метадані транзакції invoice: та due:, а також те саме ^посилання. Запит групує за payee, any_meta('invoice') та any_meta('due'). Якщо оплата пропускає ці ключі, її запис AP потрапляє в окрему групу (payee, null, null), і погашений рахунок все одно виглядає відкритим. Зберігайте унікальність (payee, invoice) серед постачальників. Додаткові поля, які стосуються лише рахунків, такі як terms: та document:, не обов'язково повторювати на оплатах.
Core AP Workflow у Beancount
Управління кредиторською заборгованістю (AP) у вашій книзі обліку складається з двох або трьох ключових кроків: фіксація рахунку, його оплата, а іноді й обробка часткових платежів або знижок.
1) Фіксація рахунку постачальника (Це створює зобов'язання)
Спочатку ви відображаєте витрати та створюєте кредиторську заборгованість, коли надходить рахунок.
; Optionally set your documents folder in your main Beancount file:
option "documents" "documents"
2025-08-05 * "Forest Paint Supply" "Paint order INV-10455" ^INV-10455 #ap
invoice: "INV-10455"
due: "2025-09-04"
terms: "2/10, n/30"
document: "invoices/2025-08-05-forest-paint-INV-10455.pdf"
Expenses:Supplies:Paint 500.00 USD
Liabilities:AccountsPayable -500.00 USDЦей єдиний запис виконує дві критично важливі дії:
- Він одразу визнає витрати в розмірі $500 у правильному періоді (серпні) — один раз. Не повторюйте відображення витрат під час оплати.
- Він кредитує AP на $500 (
-500.00 USD), фіксуючи, що ви винні цю суму компанії Forest Paint Supply.
Посилання ^INV-10455 разом з метаданими invoice: / due: формують ідентичність рахунку. Кожна наступна оплата цього рахунку повинна використовувати всі три елементи.
2) Оплата рахунку (Це погашає зобов'язання)
Коли ви оплачуєте рахунок, ви створюєте транзакцію, яка переміщує гроші з вашого банківського рахунку для погашення зобов'язання. Скопіюйте invoice: та due: з рахунку на платіж, щоб обидві проводки належали до однієї групи запитів.
a) Стандартна оплата (без знижки):
2025-09-01 * "Forest Paint Supply" "Payment INV-10455" ^INV-10455
invoice: "INV-10455"
due: "2025-09-04"
Liabilities:AccountsPayable 500.00 USD
Assets:Bank:Checking -500.00 USDЦей запис зменшує ваш баланс AP на $500 і баланс вашого поточного рахунку на ту саму суму. Зобов'язання за цим рахунком тепер погашено (сума AP у групі дорівнює нулю). Витрати залишаються на рахунку за серпень — оплата не впливає на Expenses:.
b) Знижка за дострокову оплату (наприклад, "2/10, n/30") — оберіть лише один метод:
Якщо умови "2/10, n/30", ви можете отримати знижку 2% за оплату протягом 10 днів. Для нашого рахунку на $500 це знижка в розмірі $10. Рамка нижче показує два взаємовиключні варіанти: Варіант 1 є активним; Варіант 2 повністю закоментований, щоб вставка не заблокувала обидва. Щоб використати Варіант 2, закоментуйте Варіант 1 і розкоментуйте Варіант 2. Ніколи не залишайте обидва активними — це двічі погасить AP та створить другу вигоду в $10. Який рахунок доходів чи витрат використовувати — це вибір облікової політики для ваших книг; Beancount не вимагає одного над іншим.
; Pick EXACTLY ONE of the two transactions below for a given invoice.
; Do not paste both into the same ledger — that clears AP twice.
; Option 1: Record the discount as other income
2025-08-12 * "Forest Paint Supply" "Early payment discount INV-10455" ^INV-10455
invoice: "INV-10455"
due: "2025-09-04"
Liabilities:AccountsPayable 500.00 USD
Assets:Bank:Checking -490.00 USD
Income:Discounts:Payables -10.00 USD
; Option 2: Reduce the original expense directly
; 2025-08-12 * "Forest Paint Supply" "Early payment discount INV-10455" ^INV-10455
; invoice: "INV-10455"
; due: "2025-09-04"
; Liabilities:AccountsPayable 500.00 USD
; Assets:Bank:Checking -490.00 USD
; Expenses:Supplies:Paint -10.00 USDУ будь-якому окремому варіанті ви погашаєте повне зобов'язання на $500, зменшуєте баланс банку на фактично сплачені $490 та враховуєте вигоду в $10. Замініть стандартну транзакцію повної оплати обраним варіантом — не додавайте платіж зі знижкою поверх грошового платежу на $500 і не поєднуйте цю рамку з розділом 2a для того самого рахунку.
3) Обробка часткових платежів
Використовуйте ту саму ідентичність invoice: / due: / ^link для кожного платежу частинами, щоб кожен платіж зменшував ту саму групу відкритих рахунків.
; Invoice for $1,200
2025-08-10 * "Acme Parts" "INV-9001" ^INV-9001
invoice: "INV-9001"
due: "2025-09-09"
Expenses:Parts 1200.00 USD
Liabilities:AccountsPayable -1200.00 USD
; First payment of $400
2025-08-20 * "Acme Parts" "Payment INV-9001 (1/3)" ^INV-9001
invoice: "INV-9001"
due: "2025-09-09"
Liabilities:AccountsPayable 400.00 USD
Assets:Bank:Checking -400.00 USD
; Final payment of $800
2025-09-05 * "Acme Parts" "Payment INV-9001 (final)" ^INV-9001
invoice: "INV-9001"
due: "2025-09-09"
Liabilities:AccountsPayable 800.00 USD
Assets:Bank:Checking -800.00 USDПісля першого платежу сума AP у групі рахунку становить -800.00 USD (ви все ще винні $800). Після остаточного платежу вона дорівнює нулю. Фільтрація журналу за ^INV-9001 все ще показує повну історію.
Корисні запити (BQL)
Ці запити можна виконати у вкладці «Query» Fava або з командного рядка за допомогою bean-query (довідник BQL). Перевірено нижче з Beancount 3.2.3 та beanquery 0.2.0.
Порада: функція
any_meta()спочатку шукає ключ метаданих у проводці, а потім повертається до транзакції — тому значенняinvoice:/due:на рівні транзакції з'являються в наборі результатів.
Відкрита кредиторська заборгованість за постачальником (балансовий вигляд):
Цей запит підсумовує інвентаризацію зобов'язань за кожним постачальником. Кредит (від'ємний) підсумок — це те, що ви ще винні цьому постачальнику.
SELECT payee, COST(SUM(position)) AS amount
WHERE account ~ "^Liabilities:AccountsPayable"
GROUP BY payee
ORDER BY payee;Відкриті рахунки на фіксовану дату (звіт за відкритими позиціями):
Звіт за відкритими позиціями відповідає на питання «що залишилося неоплаченим?». Він повинен (1) обрізати на явній даті звітності, щоб пізніші платежі не могли мовчки закрити попередній знімок, (2) групувати за спільною ідентичністю рахунку (payee + invoice: + due:), (3) виключати закриті (нульові) групи та (4) показувати позитивну непогашену суму — а не сирий підписаний кредит кредиторської заборгованості.
Дата звітності, що використовується скрізь нижче: 2025-09-04.
Завантажуваний стартовий реєстр кредиторської заборгованості
Завантажте accounts-payable-starter.bean — один самодостатній реєстр, згенерований із повного огородження нижче (відкриття рахунків, вигадані початкові грошові кошти, закриті / часткові / неоплачені рахунки, станом на 2025-09-04). Кожне ім'я та сума — вигадані приклади даних. Не потрібен жоден PDF-рахунок, папка з документами чи інший файл для перевірки або запиту.
Перший запуск із чистого тимчасового каталогу (зафіксовані Beancount 3.2.3 / beanquery 0.2.0):
# Save the download as accounts-payable-starter.bean in this directory, then:
uvx --from beancount==3.2.3 bean-check accounts-payable-starter.bean
uvx --from beanquery==0.2.0 --with beancount==3.2.3 bean-query accounts-payable-starter.bean \
"SELECT payee, any_meta('invoice') AS invoice, any_meta('due') AS due, -SUM(number) AS outstanding WHERE account ~ '^Liabilities:AccountsPayable' AND date <= 2025-09-04 GROUP BY payee, invoice, due HAVING SUM(number) < 0 ORDER BY due, payee"bean-check завершується з кодом 0 без виводу. Запит повертає п'ять відкритих рядків в очікуваній таблиці нижче (Forest відсутній; Acme непогашена 800.00; сума позитивних непогашених = 1500.00). Перегенеруйте завантажений артефакт за допомогою yarn generate:ap-starter після редагування огородження; yarn generate:ap-starter --check завершується помилкою, якщо артефакт застарілий.
Вставте цей повний макет (відкриття + початкові грошові кошти + три форми рахунків, плюс рядки для оплати сьогодні / прострочених / крайових випадків для старіння). Альтернативи ранньої знижки для INV-10455 залишаються повністю закоментованими — активуйте рівно одну, лише якщо ви замінюєте стандартний платіж Forest; ніколи не залишайте обидва варіанти знижки активними разом із цим платежем.
; accounts-payable-starter — complete runnable AP workflow
option "operating_currency" "USD"
2025-01-01 open Assets:Bank:Checking USD
2025-01-01 open Equity:Opening-Balances USD
2025-01-01 open Liabilities:AccountsPayable USD
2025-01-01 open Expenses:Supplies:Paint USD
2025-01-01 open Expenses:Parts USD
2025-01-01 open Expenses:Office USD
2025-01-01 open Income:Discounts:Payables USD
; Fictional opening cash — enough to cover every payment in this ledger
2025-01-01 * "Opening balance"
Assets:Bank:Checking 5000.00 USD
Equity:Opening-Balances -5000.00 USD
; Settled before as-of — must disappear from the open report
2025-08-05 * "Forest Paint Supply" "Paint order INV-10455" ^INV-10455 #ap
invoice: "INV-10455"
due: "2025-09-04"
Expenses:Supplies:Paint 500.00 USD
Liabilities:AccountsPayable -500.00 USD
2025-09-01 * "Forest Paint Supply" "Payment INV-10455" ^INV-10455
invoice: "INV-10455"
due: "2025-09-04"
Liabilities:AccountsPayable 500.00 USD
Assets:Bank:Checking -500.00 USD
; Early-payment discount alternatives for INV-10455 — mutually exclusive with
; the standard payment above AND with each other. To take 2/10 instead: delete
; (or comment out) the 2025-09-01 payment, then uncomment EXACTLY ONE option.
; Never leave both options active — that clears AP twice.
;
; Option 1: Record the discount as other income
; 2025-08-12 * "Forest Paint Supply" "Early payment discount INV-10455" ^INV-10455
; invoice: "INV-10455"
; due: "2025-09-04"
; Liabilities:AccountsPayable 500.00 USD
; Assets:Bank:Checking -490.00 USD
; Income:Discounts:Payables -10.00 USD
;
; Option 2: Reduce the original expense directly
; 2025-08-12 * "Forest Paint Supply" "Early payment discount INV-10455" ^INV-10455
; invoice: "INV-10455"
; due: "2025-09-04"
; Liabilities:AccountsPayable 500.00 USD
; Assets:Bank:Checking -490.00 USD
; Expenses:Supplies:Paint -10.00 USD
; Partial before as-of; final $800 payment is AFTER 2025-09-04
2025-08-10 * "Acme Parts" "INV-9001" ^INV-9001
invoice: "INV-9001"
due: "2025-09-09"
Expenses:Parts 1200.00 USD
Liabilities:AccountsPayable -1200.00 USD
2025-08-20 * "Acme Parts" "Payment INV-9001 (1/3)" ^INV-9001
invoice: "INV-9001"
due: "2025-09-09"
Liabilities:AccountsPayable 400.00 USD
Assets:Bank:Checking -400.00 USD
2025-09-05 * "Acme Parts" "Payment INV-9001 (final)" ^INV-9001
invoice: "INV-9001"
due: "2025-09-09"
Liabilities:AccountsPayable 800.00 USD
Assets:Bank:Checking -800.00 USD
; Unpaid — not yet due as of 2025-09-04
2025-08-15 * "Bright Office Co" "INV-220" ^INV-220
invoice: "INV-220"
due: "2025-09-14"
Expenses:Office 300.00 USD
Liabilities:AccountsPayable -300.00 USD
; Unpaid — due today (as-of == due)
2025-08-20 * "Helix Industries" "INV-440" ^INV-440
invoice: "INV-440"
due: "2025-09-04"
Expenses:Parts 200.00 USD
Liabilities:AccountsPayable -200.00 USD
; Unpaid — 30 days overdue as of 2025-09-04
2025-07-06 * "Metro Hardware" "INV-77" ^INV-77
invoice: "INV-77"
due: "2025-08-05"
Expenses:Parts 150.00 USD
Liabilities:AccountsPayable -150.00 USD
; Overpayment — credit balance (not an amount due; see edge cases)
2025-08-01 * "Credit Vendor" "INV-C1" ^INV-C1
invoice: "INV-C1"
due: "2025-08-20"
Expenses:Parts 100.00 USD
Liabilities:AccountsPayable -100.00 USD
2025-08-18 * "Credit Vendor" "Overpay INV-C1" ^INV-C1
invoice: "INV-C1"
due: "2025-08-20"
Liabilities:AccountsPayable 150.00 USD
Assets:Bank:Checking -150.00 USD
; Missing due metadata — still open; age into a separate bucket, do not drop
2025-08-12 * "No Due Co" "INV-ND" ^INV-ND
invoice: "INV-ND"
Expenses:Office 50.00 USD
Liabilities:AccountsPayable -50.00 USDЗапит відкритих позицій (beanquery 0.2.0 підтримує HAVING SUM(number) < 0; він не підтримує порівняння inventory з 0 за допомогою COST(SUM(position)) != 0):
SELECT payee,
any_meta('invoice') AS invoice,
any_meta('due') AS due,
-SUM(number) AS outstanding
WHERE account ~ "^Liabilities:AccountsPayable"
AND date <= 2025-09-04
GROUP BY payee, invoice, due
HAVING SUM(number) < 0
ORDER BY due, payee;Очікувані рядки станом на 2025-09-04 (виведені незалежно з транзакцій: рахунок − платежі з датою ≤ даті звітності; Forest зводиться до 0 і відсутній):
| payee | invoice | due | outstanding |
|---|---|---|---|
| No Due Co | INV-ND | (порожньо) | 50.00 |
| Metro Hardware | INV-77 | 2025-08-05 | 150.00 |
| Helix Industries | INV-440 | 2025-09-04 | 200.00 |
| Acme Parts | INV-9001 | 2025-09-09 | 800.00 |
| Bright Office Co | INV-220 | 2025-09-14 | 300.00 |
Сума позитивних непогашених = 1,500.00. Рахунок Forest на $500 зник. Acme все ще показує $800 ($1,200 − $400); платіж на $800 від 2025-09-05 є після дати звітності, тому він не може закрити цей знімок.
Звірте з зобов'язанням кредиторської заборгованості на той самий момент:
SELECT COST(SUM(position)) AS ap_balance
WHERE account ~ "^Liabilities:AccountsPayable"
AND date <= 2025-09-04;Очікувано: ap_balance = (-1450.00 USD). Незалежно: відкрита непогашена сума $1,500 мінус кредит постачальника на $50 (нижче) = $1,450 заборгованості → інвентаризація зобов'язань -1450.00 USD.
Перенесіть дату на один день пізніше (date <= 2025-09-05) і повторно виконайте запит відкритих позицій: рядок Acme зникає (включено фінальний платіж), а ap_balance стає (-650.00 USD). Платіж після дати звітності ніколи не переписує раніший звіт.
Кредити постачальників / переплати: HAVING SUM(number) < 0 залишає лише суми, які ви ще винні. Переплата перевертає суму кредиторської заборгованості групи в позитивну. Перелічіть їх окремо — не розглядайте позитивний баланс кредиторської заборгованості як «суму до сплати»:
SELECT payee,
any_meta('invoice') AS invoice,
any_meta('due') AS due,
SUM(number) AS credit
WHERE account ~ "^Liabilities:AccountsPayable"
AND date <= 2025-09-04
GROUP BY payee, invoice, due
HAVING SUM(number) > 0
ORDER BY payee;Очікувано: один рядок — Credit Vendor / INV-C1 / 2025-08-20 / credit = 50.00 (ви переплатили $50).
Відсутній due:: INV-ND все ще з'являється у відкритому звіті з порожнім due. Класифікуйте його за віком у виділений сегмент missing-due (нижче); ніколи не пропускайте його мовчки.
Перелік рахунків із прикріпленими PDF:
SELECT date, payee, any_meta('invoice') AS invoice, any_meta('document') AS file
WHERE account ~ "^Liabilities:AccountsPayable"
ORDER BY date DESC;Де переглянути AP у Fava
- Балансовий звіт: Перейдіть до
Балансовий звіт→Зобов'язання→Рахунки до сплати, щоб побачити загальний баланс і перейти до деталей транзакцій.
:Журнал Відфільтруйте журнал за account:Liabilities:AccountsPayable або за конкретним посиланням, як-от ^INV-xxxx, щоб побачити повний життєвий цикл рахунку-фактури.
.
*
*Документи: З налаштованою опцією option "documents" Beancount виявляє файли під цим деревом каталогів. Перегляд документів у Fava та плагін link_documents (див. вище) пов'язують ці файли з транзакціями, які мають метадані document:.
.
Старіння кредиторської заборгованості, оборотність та усвідомлення грошових потоків
Графік старіння (відтворюваний експорт + сегменти): beanquery 0.2.0 може видавати рядки відкритих позицій, зазначені вище, але не надає вбудованого виразу для сегментів старіння на основі метаданих due. Експортуйте звіт про відкриті позиції, а потім визначте сегменти детерміновано відносно тієї ж дати звіту.
bean-query -f csv -o open-ap.csv accounts-payable-starter.bean \
"SELECT payee, any_meta('invoice') AS invoice, any_meta('due') AS due, -SUM(number) AS outstanding WHERE account ~ '^Liabilities:AccountsPayable' AND date <= 2025-09-04 GROUP BY payee, invoice, due HAVING SUM(number) < 0 ORDER BY due, payee"Колонки CSV: payee, invoice, due, outstanding.
Правило сегментації для дати звіту D = 2025-09-04 та due кожного рядка (ISO YYYY-MM-DD):
| Умова | Сегмент |
|---|---|
due порожнє | missing-due |
due > D | not-yet-due |
due == D | due-today |
1 ≤ (D − due) ≤ 30 | 1-30-overdue |
31 ≤ (D − due) ≤ 60 | 31-60-overdue |
(D − due) ≥ 61 | 61+-overdue |
Компактний Python (лише стандартна бібліотека), що реалізує цю таблицю:
from datetime import date
AS_OF = date(2025, 9, 4)
# Apply bucket() to each CSV row's due column (ISO YYYY-MM-DD or empty).
def bucket(due: str | None) -> str:
if not due:
return "missing-due"
days = (AS_OF - date.fromisoformat(due)).days
if days < 0:
return "not-yet-due"
if days == 0:
return "due-today"
if days <= 30:
return "1-30-overdue"
if days <= 60:
return "31-60-overdue"
return "61+-overdue"Очікуване старіння для відкритих рядків станом на 2025-09-04:
| invoice | due | днів прострочення | сегмент | outstanding |
|---|---|---|---|---|
| INV-ND | (порожньо) | — | missing-due | 50.00 |
| INV-77 | 2025-08-05 | 30 | 1-30-overdue | 150.00 |
| INV-440 | 2025-09-04 | 0 | due-today | 200.00 |
| INV-9001 | 2025-09-09 | −5 | not-yet-due | 800.00 |
| INV-220 | 2025-09-14 | −10 | not-yet-due | 300.00 |
Сегмент "due-today" не включається до "поточних": due == дата_звіту є окремим сегментом. Для "not-yet-due" потрібно, щоб due > дата_звіту.
- Коефіцієнт оборотності кредиторської заборгованості:
Загальні закупівлі у постачальників ÷ Середня кредиторська заборгованість. Пов'язаний показник, період погашення кредиторської заборгованості (DPO), приблизно дорівнює365 ÷ Коефіцієнт оборотності. - Якщо ви не можете оплатити вчасно: Кредиторська заборгованість призначена для короткострокового боргу. Якщо постачальник погоджується на формальне, довгострокове погашення, перекласифікуйте цю суму з кредиторської заборгованості у векселі до сплати — збережіть ту саму ідентичність рахунку-фактури під час конвертації, щоб група кредиторської заборгованості очистилася.
2025-10-01 * "Helix Industries" "Convert overdue AP to 12-month note" ^INV-1110
invoice: "INV-1110"
due: "2025-09-15"
Liabilities:AccountsPayable 2000.00 USD
Liabilities:NotesPayable -2000.00 USDНайкращі практики для кредиторської заборгованості у текстовій бухгалтерській книзі
- Переходьте на безпаперовий облік: Зберігайте PDF-файли рахунків у дереві ваших документів і прикріплюйте їх за допомогою ключа метаданих
document:(а також завантаження у Fava /link_documents, якщо ви користуєтеся Fava). - Використовуйте ідентичність рахунку для платежів: Вказуйте ті самі
invoice:,due:та^linkна рахунку та на кожному платежі, який його погашає. - Звітуйте на основі дати: Обмежуйте запити щодо відкритих позицій та старіння за допомогою
date <= YYYY-MM-DD, щоб пізніший платіж не міг переписати раніший знімок; використовуйте ту саму дату для розрахунку старіння. - Тримайте метадані в порядку: Послідовне використання
invoice:,due:таterms:покращує пошук, запити та фінансові перевірки. - Нарахування завжди: Якщо ви хочете отримувати корисні звіти про кредиторську заборгованість, зобов'яжіться вести облік за методом нарахування. Beancount і Fava обробляють нараховані залишки в балансовому звіті без спеціальних плагінів.
Копіювання-вставка для старту: рахунок постачальника + оплата
Для повного робочого процесу з відкритими позиціями (погашено + частково + неоплачено, станом на дату, старіння) віддайте перевагу завантажуваному стартовому файлу для кредиторської заборгованості вище. Мінімальна пара «рахунок + оплата» нижче також показує ідентичність обох сторін проводки — спочатку відкрийте рахунки (або включіть ці відкриття у свій головний реєстр). Необов’язкові метадані document: тут опущено, щоб нічого поза реєстром не вимагалося.
option "operating_currency" "USD"
2025-01-01 open Assets:Bank:Checking USD
2025-01-01 open Liabilities:AccountsPayable USD
2025-01-01 open Expenses:Supplies:Paint USD
; ---- Bill ----
2025-08-05 * "Forest Paint Supply" "Paint order INV-10455" ^INV-10455 #ap
invoice: "INV-10455"
due: "2025-09-04"
Expenses:Supplies:Paint 500.00 USD
Liabilities:AccountsPayable -500.00 USD
; ---- Payment (no discount) ----
2025-09-01 * "Forest Paint Supply" "Payment INV-10455" ^INV-10455
invoice: "INV-10455"
due: "2025-09-04"
Liabilities:AccountsPayable 500.00 USD
Assets:Bank:Checking -500.00 USDЗ Beancount 3.2.3 та beanquery 0.2.0 завантаження цього стартового файлу не викликає помилок, рахунок кредиторської заборгованості зводиться до нуля, а запит «рахунок + заборгованість» повертає одну групу (Forest Paint Supply, INV-10455, 2025-09-04), сума якої порожня (погашено) — а не рядок із виставленим рахунком плюс окремий рядок оплати (…, null, null).
Цей посібник призначений для освітніх цілей і не є податковою, юридичною чи фінансовою консультацією.
Посилання та додаткове читання:
- Синтаксис мови Beancount — рахунки, метадані, теги, посилання та документи (перевірено 2026-09-11)
- Довідник мови запитів Beancount (BQL) (перевірено 2026-09-11)
- Можливості Fava — завантаження документів і
link_documents(перевірено 2026-09-11) any_meta()для запитів до метаданих транзакцій/проводок (Martin Blais, список розсилки Beancount; перевірено 2026-09-11)





