Перейти к основному содержимому
Beancount.io Logo

Что такое кредиторская задолженность? Определение, примеры и AP против AR (2026)

Опубликовано Обновлено 17 мин чтенияMike ThriftMike Thrift
Что такое кредиторская задолженность? Определение, примеры и AP против AR (2026)

Кредиторская задолженность (AP) — это деньги, которые ваш бизнес должен своим поставщикам за товары или услуги, которые вы уже получили, но ещё не оплатили. В бухгалтерском учёте AP классифицируется как текущее обязательство в вашем балансе — сумма, обычно подлежащая оплате в течение следующего года, и часто в течение 30–60 дней.

Эта концепция является центральной для учёта по методу начисления, где вы фиксируете расход и соответствующее обязательство в момент поступления счёта, а не когда вы фактически отправляете деньги. Это руководство покажет вам, как управлять всем рабочим процессом AP чисто и эффективно с помощью инструмента текстового учёта Beancount.


Краткое резюме

Прежде чем мы углубимся в детали, давайте рассмотрим основы:

  • Кредиторская задолженность (AP) представляет собой ваши краткосрочные долги перед поставщиками. Вы найдёте её в разделе Обязательства вашего баланса.
  • Метод начисления против кассового: AP — это концепция, которая существует только если вы ведёте свой учёт по методу начисления. Beancount полностью поддерживает рабочие процессы по методу начисления, и его веб-интерфейс Fava будет правильно отображать ваши обязательства.
  • AP против AR: Всё просто: Кредиторская задолженность — это то, что вы должны, а Дебиторская задолженность (AR) — это то, что должны вам.

Где AP находится в Beancount (и Fava)

Чтобы начать отслеживать AP, вам сначала нужно объявить для неё счёт в вашей главной книге. Стандартное соглашение:

Liabilities:AccountsPayable

Вы можете дополнительно создавать субсчета для крупных поставщиков (например, Liabilities:AccountsPayable:ForestPaintSupply).

В Fava этот счёт появится в вашем Балансе в разделе Обязательства. Вы можете нажать на него, чтобы углубиться и увидеть проводки, составляющие баланс. Вы даже можете увидеть это в действии в публичном примере главной книги Fava, который включает счёт Liabilities:AccountsPayable.

Соглашение о знаках: Beancount хранит остатки по обязательствам как кредиты (отрицательные числа). Остаток -500.00 USD на Liabilities:AccountsPayable означает, что вы должны $500. Отчёт по открытым позициям ниже меняет знак с помощью -SUM(number), чтобы каждый неоплаченный счёт показывал положительную непогашенную сумму. Полностью оплаченный счёт даёт в сумме ноль и исключается с помощью HAVING.


Основные строительные блоки Beancount, которые вы будете использовать

Надёжный рабочий процесс AP в Beancount опирается на несколько ключевых функций:

  1. Счета: Вы будете в основном использовать свой счёт Liabilities:AccountsPayable, денежный счёт, такой как Assets:Bank:Checking, и свои различные счета расходов (например, Expenses:Supplies).
  2. Метаданные: Вы можете прикрепить данные в формате «ключ-значение» к любой транзакции. Для AP вы будете использовать такие метаданные, как invoice:, due:, terms: и document:. Установите option "documents" на папку, чтобы Beancount мог находить файлы там; в Fava перетаскивание файла на строку журнала вставляет запись метаданных document:, а включение plugin "fava.plugins.link_documents" связывает эти записи с обнаруженными директивами Document.
  3. Теги и ссылки: Используйте #теги (например, #ap) для удобной фильтрации и ^ссылки (например, ^INV-10455) для программной привязки счёта и его последующей оплаты. Это создаёт чёткий, проверяемый след в журнале — но одних ссылок недостаточно для запроса открытых счетов ниже.
  4. Запросы (BQL): Похожий на SQL язык запросов Beancount (BQL) позволяет выполнять мощные отчёты, например, список всех открытых счетов к оплате, отсортированных по дате платежа, непосредственно из командной строки с помощью bean-query или на странице «Запрос» в Fava.

Идентификация счёта (обязательна для запросов открытых счетов): Каждый счёт и каждая оплата — полная, частичная или со скидкой за ранний платёж — должны содержать одинаковые метаданные транзакции invoice: и due:, а также ту же самую ^ссылку. Запрос группирует по payee, any_meta('invoice') и any_meta('due'). Если в оплате отсутствуют эти ключи, её проводка по AP попадает в отдельную группу (payee, null, null), и оплаченный счёт всё равно будет выглядеть открытым. Держите (payee, invoice) уникальным для разных поставщиков. Дополнительные поля, относящиеся только к счету, такие как terms: и document:, не нужно повторять в платежах.


Основной рабочий процесс 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

Эта единственная запись выполняет две важные задачи:

  1. Она немедленно признаёт расход в размере $500 в правильном периоде (август) — один раз. Не повторяйте проводку расхода при оплате.
  2. Она кредитует AP на $500 (-500.00 USD), фиксируя, что вы должны Forest Paint Supply эту сумму.

Ссылка ^INV-10455 вместе с метаданными invoice: / due: образуют идентичность счёта. Каждый последующий платёж по этому счету должен повторно использовать все три элемента.

2) Оплата счёта (это погашает обязательство)

Когда вы оплачиваете счёт, вы создаёте транзакцию, которая переводит деньги с вашего банковского счёта для погашения обязательства. Скопируйте invoice: и due: из счёта в платёж, чтобы обе проводки попадали в одну группу запроса.

а) Стандартный платёж (без скидки):

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:.

б) Скидка за ранний платёж (например, «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 и не комбинируйте этот блок с разделом 2а для одного и того же счёта.

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)

Вы можете выполнять эти запросы на вкладке «Запрос» в Fava или из командной строки с помощью bean-query (справочник по BQL). Проверено на Beancount 3.2.3 и beanquery 0.2.0.

Совет: Функция any_meta() сначала ищет ключ метаданных в проводке, а затем возвращается к транзакции — поэтому значения invoice: / due: на уровне транзакции появляются в результирующем наборе.

Открытая AP по поставщикам (просмотр баланса):

Этот запрос суммирует инвентаризацию обязательств по каждому поставщику. Кредит (отрицательная сумма) — это то, что вы всё ещё должны этому поставщику.

SELECT payee, COST(SUM(position)) AS amount
WHERE account ~ "^Liabilities:AccountsPayable"
GROUP BY payee
ORDER BY payee;

Открытые счета на фиксированную дату (отчёт по открытым позициям):

Отчёт по открытым позициям отвечает на вопрос «что осталось неоплаченным?». Он должен (1) ограничиваться явной датой отчёта, чтобы более поздние платежи не могли молча очистить более ранний снимок, (2) группироваться по общей идентичности счёта (payee + invoice: + due:), (3) исключать погашенные (нулевые) группы и (4) показывать положительную непогашенную сумму, а не исходный подписанный кредит AP.

Дата отчёта, используемая везде ниже: 2025-09-04.

Загружаемая стартовая главная книга AP

Скачайте 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 даёт ноль и отсутствует):

payeeinvoicedueoutstanding
No Due CoINV-ND(пусто)50.00
Metro HardwareINV-772025-08-05150.00
Helix IndustriesINV-4402025-09-04200.00
Acme PartsINV-90012025-09-09800.00
Bright Office CoINV-2202025-09-14300.00

Сумма положительной непогашенной задолженности = 1,500.00. Счёт Forest на $500 исчез. Acme всё ещё показывает $800 ($1,200 − $400); платёж в $800 от 2025-09-05 после даты отчёта, поэтому он не может закрыть этот снимок.

Сверьте с обязательством AP на ту же дату отсечения:

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 оставляет только суммы, которые вы всё ещё должны. Переплата меняет знак суммы AP группы на положительный. Перечислите их отдельно — не рассматривайте положительный остаток AP как «сумму к оплате»:

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 по-прежнему появляется в открытом отчёте с пустым сроком. Распределите его по возрасту в отдельную корзину 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

  • Баланс: Перейдите в БалансОбязательстваAccountsPayable, чтобы увидеть общий остаток и углубиться в детали транзакций.
  • Журнал: Отфильтруйте журнал по account:Liabilities:AccountsPayable или конкретной ссылке, такой как ^INV-xxxx, чтобы увидеть полный жизненный цикл счёта.
  • Документы: С установленным option "documents" Beancount обнаруживает файлы в этом дереве. Просмотры документов Fava и плагин link_documents (см. выше) связывают эти файлы с транзакциями, содержащими метаданные document:.

Старение AP, оборачиваемость и осведомлённость о денежных потоках

График старения (воспроизводимый экспорт + корзины): 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 > Dnot-yet-due
due == Ddue-today
1 ≤ (D − due) ≤ 301-30-overdue
31 ≤ (D − due) ≤ 6031-60-overdue
(D − due) ≥ 6161+-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:

invoicedueдней просрочкикорзинаoutstanding
INV-ND(пусто)missing-due50.00
INV-772025-08-05301-30-overdue150.00
INV-4402025-09-040due-today200.00
INV-90012025-09-09−5not-yet-due800.00
INV-2202025-09-14−10not-yet-due300.00

Due-today не включается в «текущие»: due == as-of — это отдельная корзина. Not-yet-due требует due > as-of.

  • Коэффициент оборачиваемости AP: Общие закупки у поставщиков ÷ Средняя AP. Связанный показатель, Срок оплаты кредиторской задолженности (DPO), примерно равен 365 ÷ Коэффициент оборачиваемости.
  • Если вы не можете платить вовремя: AP предназначена для краткосрочного долга. Если поставщик соглашается на официальное, более долгосрочное погашение, переклассифицируйте сумму из AP в вексель к оплате — сохраните ту же идентичность счёта при конвертации, чтобы группа AP очистилась.
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

Лучшие практики для AP в текстовой главной книге

  • Откажитесь от бумаги: Храните PDF-файлы счетов в дереве документов и прикрепляйте их с помощью ключа метаданных document: (и загрузки в Fava / link_documents, когда вы используете Fava).
  • Используйте идентичность счёта в платежах повторно: Указывайте одинаковые invoice:, due: и ^ссылку в счете и в каждом платеже, который его погашает.
  • Отчитывайтесь на дату: Ограничивайте запросы открытых позиций и старения с помощью date <= ГГГГ-ММ-ДД, чтобы более поздний платёж не мог переписать более ранний снимок; распределяйте по возрасту с той же D.
  • Содержите метаданные в порядке: Последовательное использование invoice:, due: и terms: улучшает поиск, запросы и финансовые проверки.
  • Метод начисления во всём: Если вы хотите полезную отчётность по AP, стремитесь вести свои книги по методу начисления. Beancount и Fava обрабатывают остатки по методу начисления в Балансе без специальных плагинов.

Стартовый набор для копирования: Счёт поставщика + Платёж

Для полного рабочего процесса открытых позиций (оплаченные + частичные + неоплаченные, дата отчёта, старение) предпочтите загружаемый стартовый AP-набор выше. Минимальная пара счёт+платёж ниже по-прежнему показывает идентичность в обеих частях — сначала откройте счета (или включите эти открытия в свою основную главную книгу). Необязательные метаданные 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 загрузка этого стартового набора не вызывает ошибок, счёт AP сводится к нулю, а запрос invoice+due возвращает одну группу (Forest Paint Supply, INV-10455, 2025-09-04), сумма которой пуста (оплачено) — а не строку счёта плюс отдельную строку платежа (…, null, null).


Это руководство предназначено для образовательных целей и не является налоговой, юридической или финансовой консультацией.

Ссылки и дополнительная информация:

Поделиться этой статьёй

Источник: https://beancount.io/ru/blog/2025/08/20/what-is-accounts-payable

Опубликовано: 20 августа 2025 г.

Обновлено: 12 сентября 2026 г.

13 мин чтения

Закрывающие проводки в конце года: как обнулить счета доходов и расходов и перенести прибыль в нераспределённую прибыль

Освойте закрывающие проводки в конце года: изучите четыре шага для обнуления…

accounting
accounting-basics
14 мин чтения

Финансовые результаты Meta за Q2 2026: Выручка выросла на 28%, но прибыль впервые снизилась в эпоху ИИ

Выручка Meta Platforms за Q2 2026 года выросла на 28% до $60,8 млрд, но чистая…

financial-reporting
financial-management
14 мин чтения

Прибыль Robinhood за второй квартал 2026 года: Рекордный квартал, первый в истории долг и скрытая разовая прибыль

Выручка Robinhood во втором квартале 2026 года выросла на 32% до рекордных…

financial-reporting
financial-management
13 мин чтения

Отчет Meta за Q1 2026: Превзошла все показатели, но акции всё равно упали на 7%

Выручка Meta Platforms за Q1 2026 выросла на 33% до $56,3 млрд, а чистая…

financial-reporting
financial-management
13 мин чтения

Прибыль Robinhood за Q1 2026: Рынки предсказаний только что обогнали криптовалюту — и акции всё равно были наказаны

Выручка Robinhood за Q1 2026 выросла на 15% до $1,07 млрд и не достигла…

financial-reporting
financial-management