Что такое кредиторская задолженность? Руководство по Beancount для отслеживания счетов поставщиков в простом тексте
Кредиторская задолженность (AP) — это деньги, которые ваш бизнес должен своим поставщикам за товары или услуги, которые вы уже получили, но ещё не оплатили. В бухгалтерском учёте AP классифицируется как текущее обязательство в балансе — сумма, обычно подлежащая выплате в течение следующего года, часто в течение 30–60 дней.
Эта концепция является центральной в начисленном учёте, где расход и соответствующее обязательство фиксируются в момент получения счёта, а не в момент фактической выплаты. В этом руководстве показано, как управлять полным рабочим процессом AP чисто и эффективно, используя инструмент бухгалтерского учёта в виде простого текста — Beancount.
Краткое содержание
Прежде чем углубляться в детали, рассмотрим основные положения:
- Accounts Payable (AP) — это ваши краткосрочные долги перед поставщиками. Вы найдёте его в разделе
Liabilities
вашего баланса. - Accrual vs. Cash: AP существует только при ведении книг на начисленной основе. Beancount полностью поддерживает начисленные процессы, а его веб‑интерфейс Fava корректно отображает ваши обязательства.
- AP vs. AR: Просто: Payables — это то, что вы должны, а Receivables (AR) — это то, что другие должны вам.
Где находится AP в Beancount (и в Fava)
Чтобы начать отслеживание AP, сначала необходимо объявить счёт для него в вашем журнале. Стандартный вариант:
Liabilities:AccountsPayable
При желании можно создать субсчета для основных поставщиков (например, Liabilities:AccountsPayable:ForestPaintSupply
).
В Fava этот счёт появится в Балансе под Liabilities
. Кликнув по нему, вы сможете увидеть список всех открытых и оплаченных позиций, получив чёткое представление о своих обязательствах. Пример работы можно увидеть в публичном примере журнала Fava — public example ledger, где присутствует счёт Liabilities:AccountsPayable
.
Структурные элементы Beancount, которые вам понадобятся
Надёжный процесс AP в Beancount опирается на несколько ключевых возможностей:
- Accounts: Основные счёта —
Liabilities:AccountsPayable
, денежный счёт, напримерAssets:Bank:Checking
, и различные расходные счёта (например,Expenses:Supplies
). - Metadata: К любой транзакции можно добавить пары «ключ‑значение». Для AP обычно используют
invoice:
,due:
,terms:
иdocument:
. Fava распознаёт ключdocument:
и автоматически создаёт кликабельную ссылку на прикреплённый файл, если настроена папка документов. - Tags & Links: Используйте
#tags
(например,#ap
) для удобной фильтрации и^links
(например,^INV-10455
) для программного связывания счёта и последующей оплаты. Это создаёт ясный, проверяемый след. - Queries (BQL): Язык запросов Beancount, похожий на SQL (BQL), позволяет генерировать мощные отчёты, например список всех открытых обязательств, отсортированных по дате оплаты, прямо из командной строки с
bean-query
или на странице «Query» в Fava.
Основной рабочий процесс AP в 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 в правильный период (август).
- Создаёт соответствующее обязательство — $500, показывая, что вы должны деньги Forest Paint Supply.
Ссылка ^INV-10455
— уникальный идентификатор, который позже можно добавить к оплате, связывая счёт и платёж логически.
2) Оплата счёта (снимает обязательство)
Когда вы оплачиваете счёт, создаётся транзакция, переводящая деньги из банковского счёта и снимающая обязательство.
a) Обычная оплата (без скидки):
2025-09-01 * "Forest Paint Supply" "Payment INV-10455" ^INV-10455
Liabilities:AccountsPayable 500.00 USD
Assets:Bank:Checking -500.00 USD
Эта запись уменьшает ваш баланс AP на $500 и баланс текущего счёта на ту же сумму. Обязательство считается погашенным.
b) Скидка за досрочную оплату (например, «2/10, n/30»):
При условиях «2/10, n/30» вы можете получить 2 % скидку, если оплатите в течение 10 дней. Для нашего счёта 10 скидки. Есть два допустимых способа записи — выберите один и придерживайтесь его последовательно.
; Option 1: Record the discount as other income (a contra‑expense effect)
2025-08-12 * "Forest Paint Supply" "Early payment discount INV-10455" ^INV-10455
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
Liabilities:AccountsPayable 500.00 USD
Assets:Bank:Checking -490.00 USD
Expenses:Supplies:Paint -10.00 USD
В обоих случаях вы полностью погашаете обязательство 490 и учитываете выгоду $10.
3) Частичные выплаты
Функция ссылок в Beancount упрощает отслеживание частичных оплат.
; 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
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
Liabilities:AccountsPayable 800.00 USD
Assets:Bank:Checking -800.00 USD
Благодаря общей ссылке ^INV-9001
во всех трёх транзакциях вы легко можете отфильтровать журнал и увидеть полную историю конкретного счёта и его оплат.
Полезные запросы (BQL)
Запускайте их во вкладке «Query» в Fava или из командной строки с bean-query
.
Подсказка: Функция
any_meta()
отлично подходит для извлечения полей метаданных, таких какinvoice:
иdocument:
, в результаты запросов.
Открытая AP по поставщикам (вид баланса):
SELECT payee, COST(SUM(position)) AS amount
WHERE account "^Liabilities:AccountsPayable"
GROUP BY payee
ORDER BY payee;
Открытая AP по счёту + дате оплаты:
SELECT payee,
any_meta('invoice') AS invoice,
any_meta('due') AS due,
COST(SUM(position)) AS amount
WHERE account "^Liabilities:AccountsPayable"
GROUP BY payee, invoice, due
ORDER BY due, payee;
Счета с прикреплёнными PDF:
SELECT date, payee, any_meta('invoice') AS invoice, any_meta('document') AS file
WHERE account "^Liabilities:AccountsPayable"
ORDER BY date DESC;
Где увидеть AP в Fava
- Balance Sheet: Перейдите в
Balance Sheet
→Liabilities
→AccountsPayable
, чтобы увидеть общий баланс и детализировать транзакции. - Journal: Отфильтруйте журнал по
account:Liabilities:AccountsPayable
или по конкретной ссылке, например^INV-xxxx
, чтобы проследить весь жизненный цикл счёта. - Documents Sidebar: При использовании метаданных
document:
и директивыoption "documents"
в боковой панели появится список связанных документов.
Оценка просроченной задолженности, оборота и влияния на денежный поток
- График просрочки (Aging Schedule): Отчёт группирует открытые счета по времени их нахождения в открытом состоянии (1–30 дн., 31–60 дн., 60+ дн.). В Beancount проще всего выполнить запрос «Open AP by Invoice + Due Date», экспортировать результаты в CSV и распределить их по группам в таблице или небольшом скрипте Python.
- Коэффициент оборота AP: Быстрая проверка того, как быстро вы оплачиваете поставщиков. Формула —
Общие закупки у поставщиков ÷ Средняя AP
. Показатель Days Payable Outstanding (DPO) приближённо равен365 ÷ Коэффициент оборота
. - Если нельзя оплатить вовремя: AP — это краткосрочный долг. Если поставщик соглашается на более длительный график, долг следует переклассифицировать из AP в долг по нотам (
Notes Payable
).
2025-10-01 * "Helix Industries" "Convert overdue AP to 12-month note" ^INV-1110
Liabilities:AccountsPayable 2000.00 USD
Liabilities:NotesPayable -2000.00 USD
Лучшие практики работы с AP в Beancount
- Документы: Храните все счета в отдельной папке и указывайте её через
option "documents"
. - Метаданные: Заполняйте
invoice:
,due:
иterms:
для каждой записи — это упрощает последующий анализ. - Теги и ссылки: Обязательно используйте
#ap
и уникальные^
‑ссылки, чтобы быстро находить и связывать связанные транзакции. - Регулярные проверки: Периодически просматривайте открытые обязательства в Fava, чтобы избежать неожиданной просрочки.
Пример записи «Счёт поставщика»
2023-04-15 * "Acme Corp" "Invoice #12345" ^INV-12345 #ap
invoice: "12345"
due: "2023-05-15"
terms: "Net 30"
document: "invoices/2023-04-15-acme-12345.pdf"
Expenses:OfficeSupplies 250.00 USD
Liabilities:AccountsPayable -250.00 USD
Пример частичной оплаты
2023-04-20 * "Acme Corp" "Partial payment for INV-12345" ^INV-12345
Liabilities:AccountsPayable 150.00 USD
Assets:Bank:Checking -150.00 USD
Пример полной оплаты
2023-04-30 * "Acme Corp" "Full payment for INV-12345" ^INV-12345
Liabilities:AccountsPayable 250.00 USD
Assets:Bank:Checking -250.00 USD
Пример записи со скидкой за досрочную оплату
2023-04-25 * "Acme Corp" "Early payment discount for INV-12345" ^INV-12345
Liabilities:AccountsPayable 250.00 USD
Assets:Bank:Checking -245.00 USD
Income:Discounts:Payables -5.00 USD
Пример переклассификации просроченной AP в долг по нотам
2023-05-01 * "Acme Corp" "Convert overdue AP to note" ^INV-12345
Liabilities:AccountsPayable 250.00 USD
Liabilities:NotesPayable -250.00 USD
Пример использования боковой панели документов в Fava
option "documents" "documents"
2023-04-15 * "Acme Corp" "Invoice #12345" ^INV-12345 #ap
invoice: "12345"
due: "2023-05-15"
document: "invoices/2023-04-15-acme-12345.pdf"
Expenses:OfficeSupplies 250.00 USD
Liabilities:AccountsPayable -250.00 USD
Пример запроса открытой AP по поставщикам
SELECT payee, COST(SUM(position)) AS amount
WHERE account "^Liabilities:AccountsPayable"
GROUP BY payee
ORDER BY payee;
Пример запроса открытой AP по счёту и дате оплаты
SELECT payee,
any_meta('invoice') AS invoice,
any_meta('due') AS due,
COST(SUM(position)) AS amount
WHERE account "^Liabilities:AccountsPayable"
GROUP BY payee, invoice, due
ORDER BY due, payee;
Пример запроса всех PDF‑документов, связанных с AP
SELECT date, payee, any_meta('invoice') AS invoice, any_meta('document') AS file
WHERE account "^Liabilities:AccountsPayable"
ORDER BY date DESC;
Это руководство предназначено для того, чтобы вы могли быстро приступить к работе с кредиторской задолженностью в Beancount и поддерживать чистый, проверяемый финансовый учёт.
Этот материал предоставлен в ознакомительных целях и не является финансовой рекомендацией.
© 2024 Beancount Community