본문으로 건너뛰기

Fava에서 사이드바 링크와 저장된 쿼리 추가하기

원클릭 시간 필터를 위한 fava-sidebar-link 단축키를 추가하고, 마이너스 기말 잔액을 찾는 BQL 쿼리를 저장하세요. Fava 1.30.16에서 테스트되었습니다.

재고 Fava에 날짜 기반 사이드바 지시문을 추가한 다음, 모든 게시물을 합산한 후 마이너스 잔액을 찾는 쿼리를 저장하세요. 예제는 Beancount 3.2.3, beanquery 0.2.0, Fava 1.30.16으로 실행되었습니다. 고정 로컬 설정을 사용하세요.

이 URL은 로컬 재고 Fava 서버를 대상으로 합니다. Beancount.io의 호스팅 대시보드는 다른 보고서 경로를 가지며 아래에서 별도로 범위가 지정됩니다.

Fava를 사용자 정의하는 이유​

사이드바 단축키는 유용한 필터 보기를 보존합니다. 저장된 쿼리는 반복적으로 BQL을 입력하지 않고도 특정 회계 질문에 답할 수 있습니다.

해결되는 문제점:​

  • 현재 또는 이전 월을 반복적으로 선택해야 하는 문제.
  • 저장된 보고서를 다시 열어야 하는 문제.
  • 실제로 0 미만으로 끝나는 계정에서 지출을 구분해야 하는 문제.

✨ 사용자 정의 사이드바 링크​

다음 섹션의 전체 sidebar-demo.beancount 원장에 다음 지시문을 추가하세요. fava sidebar-demo.beancount로 시작하고 단축키를 클릭하기 전에 Journal 보고서를 여세요.

2021-01-01 custom "fava-sidebar-link" "Current Month" "/jump?time=month"
2021-01-01 custom "fava-sidebar-link" "Last Month" "/jump?time=month-1"
2021-01-01 custom "fava-sidebar-link" "Clear All" "/jump?account=&time=&filter="

기능:​

/jump는 브라우저의 Referer 헤더에 있는 페이지로 돌아가며 제공된 쿼리 매개변수를 대체합니다. 항상 Journal 보고서를 열지는 않습니다. 대차대조표에서는 대차대조표에 머무릅니다. 이 동작은 재고 Fava 리디렉션 처리기에 의해 구현됩니다.

  • 현재 월: 현재 보고서에 time=month를 설정합니다.
  • 지난 달: 현재 보고서에 time=month-1을 설정합니다.
  • 모두 지우기: account, time, filter를 제거합니다. conversion과 같은 다른 매개변수는 유지됩니다.

2021년 픽스처는 오늘의 월에 거래가 없습니다. 모두 지우기를 사용한 후에 쿼리 결과를 재현하세요. /jump URL은 리퍼러가 필요합니다. 직접 연 북마크의 경우 대신 완전한 작업 보고서 URL을 복사하세요.

호스트 루트에서 /jump?time=month는 /sidebar-demo/journal/?time=2021&account=Assets에서 테스트되었습니다: account=Assets&time=month와 함께 동일한 journal로 HTTP 302를 반환했습니다. 대상 보고서는 HTTP 200을 반환했습니다.

관리자가 /books에 전체 Fava 애플리케이션을 마운트한 경우, 모든 루트 상대 단축키에는 해당 접두사가 포함되어야 합니다. 이는 대안적 구성으로, 위의 현재 월 옆에 추가할 또 다른 지시문이 아닙니다:

2021-01-01 custom "fava-sidebar-link" "Current Month" "/books/jump?time=month"

로컬 WSGI 마운트 테스트에서 /books/jump가 새 필터와 함께 /books/sidebar-demo/journal/로 리디렉션되는 것을 확인했습니다. 일반 /jump는 해당 마운트 외부에 있으며 404를 반환했습니다. Fava의 사용자 정의 링크는 제공된 URL을 보존합니다. /로 시작하는 것은 호스트 루트를 의미하며 원장 루트가 아닙니다.

호스팅 범위, 2026-09-07 확인: Beancount.io 대시보드 소스는 /ledger/OWNER/LEDGER/income-statement 및 /ledger/OWNER/LEDGER/query와 같은 경로를 사용합니다. 해당 사이드바는 자체 보고서 메뉴를 구축합니다. 검사된 소스에는 /jump 경로나 fava-sidebar-link 소비자가 없습니다. 따라서 이 기본 레시피는 해당 대시보드에는 적용되지 않습니다. 호스팅 제품에서는 원하는 보고서를 열고 작업 주소를 북마크하세요. 소스 스냅샷은 실행 중인 배포판의 개정판을 증명하지 않습니다.

🔍 사용자 정의 SQL 쿼리​

이 전체 픽스처를 sidebar-demo.beancount로 저장하세요. 각 자산 계정에 양수 및 음수 게시물을 모두 포함하도록 의도적으로 설계되었습니다:

option "title" "Sidebar Demo"
option "operating_currency" "USD"
2021-01-01 open Assets:BCM:Positive USD
2021-01-01 open Assets:BCM:Negative USD
2021-01-01 open Equity:Opening-Balances USD
 
2021-12-01 * "Opening balances"
  Assets:BCM:Positive        100.00 USD
  Assets:BCM:Negative         20.00 USD
  Equity:Opening-Balances   -120.00 USD
 
2021-12-10 * "Outflows"
  Assets:BCM:Positive        -30.00 USD
  Assets:BCM:Negative        -50.00 USD
  Equity:Opening-Balances     80.00 USD
 
2022-01-05 * "Refund"
  Assets:BCM:Negative         10.00 USD
  Equity:Opening-Balances    -10.00 USD
 
2022-01-09 balance Assets:BCM:Positive 70.00 USD
2022-01-09 balance Assets:BCM:Negative -20.00 USD

bea --file sidebar-demo.beancount check가 통과합니다. 1월 9일 시작 시점에 Positive는 100 - 30 = 70 USD를, Negative는 20 - 50 + 10 = -20 USD를 보유합니다.

재고 Fava의 Query 페이지에서 전역 필터를 지운 상태로 다음 쿼리를 실행하세요:

SELECT account, currency, SUM(number) AS ending_balance
FROM postings
WHERE account ~ ':BCM:'
  AND date < 2022-01-09
GROUP BY account, currency
HAVING SUM(number) < 0
ORDER BY account, currency;
계정통화기말 잔액
Assets:BCM:NegativeUSD-20.00

분석:​

WHERE는 집계할 게시물을 선택합니다. 하한 날짜는 없습니다: 기말 잔액에는 12월 1일의 기초 잔액을 포함한 모든 이전 내역이 필요합니다. 상한 날짜는 1월 8일을 포함하고 1월 9일 거래를 제외합니다.

GROUP BY account, currency는 서로 다른 통화를 분리합니다. HAVING SUM(number) < 0은 각 그룹의 양수 및 음수 수량을 합산한 후에 필터링합니다. 이는 통화당 기말 단위 잔액이며, 단일 통화로 환산된 시장 가치가 아닙니다. 각 정확한 계정을 보고하며 상위 계정으로 롤업하지 않습니다.

비교를 위해, 이 실행 가능한 쿼리는 다른 질문에 답합니다: 검토 기간 동안 마이너스로 게시된 금액은 얼마인가요?

SELECT account, currency, SUM(number) AS negative_postings
FROM postings
WHERE account ~ ':BCM:'
  AND number < 0
  AND date >= 2021-12-09 AND date < 2022-01-09
GROUP BY account, currency
ORDER BY account, currency;
계정통화마이너스 게시물
Assets:BCM:NegativeUSD-50.00
Assets:BCM:PositiveUSD-30.00

두 번째 쿼리는 환불 및 기초 잔액을 생략합니다. -30.00 USD 행은 Positive가 마이너스임을 의미하지 않습니다. 첫 번째 쿼리에 하한 날짜를 추가하면 기간 순 이동이 생성되며 기말 잔액이 아닙니다. 추가 쿼리 구문은 BQL 참조를 참조하세요.

사용 사례:​

  • 예상치 못한 마이너스 수량에 대해 자산 계정을 확인합니다.
  • 지출 또는 환불을 조사할 때 마이너스 게시물을 별도로 검토합니다.
  • 이상 징후로 처리하기 전에 보고된 잔액을 기초 잔액 및 후속 활동과 대조합니다.

🛠 프로 팁: 링크 + 쿼리 결합​

Fava는 쿼리에 대한 링크를 지원합니다. 이 저장된 쿼리와 단축키를 sidebar-demo.beancount에 추가하세요:

2021-01-01 query "negative-balances" "SELECT account, currency, SUM(number) AS ending_balance FROM postings WHERE account ~ ':BCM:' AND date < 2022-01-09 GROUP BY account, currency HAVING SUM(number) < 0 ORDER BY account, currency"
2021-01-01 custom "fava-sidebar-link" "Negative Balances" "/sidebar-demo/query/?query_string=.run+%22negative-balances%22"

쿼리 지시문은 Fava의 저장된 쿼리 사이드바에도 나타나며, sidebar-show-queries (기본값 5)의 적용을 받습니다. 명시적 단축키는 픽스처의 sidebar-demo 슬러그를 대상으로 하고 명명된 쿼리를 실행합니다. 재고 쿼리 페이지는 URL에서 query_string을 읽습니다. 해당 쿼리 API는 로컬 테스트에서 동일한 단일 -20.00 USD 행을 반환했습니다. 버전별 Query 컴포넌트를 참조하세요.

다른 장부에서 원장의 실제 슬러그를 사용하세요. /books 마운트에서는 단축키가 /books/sidebar-demo/query/?query_string=.run+%22negative-balances%22가 됩니다. 전체 내역 기말 잔액을 위해 전역 필터를 유지하세요. 저장된 쿼리 실행 전에 날짜 필터가 시작 잔액 내역을 제거할 수 있습니다.

최종 고려 사항​

월 단축키를 사용하여 보고서를 탐색하고, 저장된 쿼리를 사용하여 재현 가능한 기말 잔액을 확인하세요. 예산 검토 시 마이너스 숫자를 해석하기 전에 지출, 기간 이동 및 기말 잔액을 구분하세요. 추가 보고서는 Fava의 확장 문서 및 UI 가이드를 참조하세요.

출처: https://beancount.io/ko/docs/Tips/side-bar-link