[поновлюється] років п’ять тому, приїхавши до канади з невеликою кількістю грошей, я спробував вести «домашню бухгалтерію». до того, ще в україні, я вже пробував різні додатки для windows mobile на кпк, потім щось для android на мудрофоні, навіть gnucash на ноутбуці… ніщо не прижилося. тож я шукав щось простіше, і перечепився через ledger. мінімаліст у мені закохався з першого погляду! тож цього разу я протримався… чотири роки, занотовуючи витрати з більшою чи меншою деталізацією, — але в підсумку втратив інтерес та припинив. тепер прийшов час пригадати, а заразом розкажу, як воно робиться.
зміст
- чому звичайний текст
- «текстова» бухгалтерія — це як?
- встановлення й налаштування
- планування облікової книги
- нотація транзакцій
- основні звіти
- графіки!
- документація
чому звичайний текст?
простий текст — найкращий формат даних для багатьох застосувань, а особливо для невеликих проєктів і особистих записів, тому що доступний і портативний: (як правило) не потрібно спеціяльних програм для читання й редагування, однаково відображається на всіх системах, дозволяє за потреби відносно легко конвертувати в інші формати. окрім видатків, ось що особисто я зберігаю в текстовому форматі:
- цей щоденник (у форматі kramdown, який автомагічно конвертується в статичний сайт за допомогою jekyll)
- нотатки: власні й робочі, конспекти під час навчання тощо (asciidoc)
- скрипти й програми (переважно bash та python)
- задачі (у форматі todo.txt)
якщо ви ще не закохані в простий текст — цей допис не для вас… але почитайте наступний абзац — можливо, вам сподобається ідея?
«текстова» бухгалтерія — це як?
щодо особистих видатків, — зрозуміло, що можна було би просто занотовувати все до текстового файлу, періодично підсумовувати на калькуляторі й робити якісь висновки… але це надто примітивно: навіть середньовічні торговці в європі вже використовували складніші підходи, як от подвійний запис, а в епоху комп’ютерів то був би сором. отож, 20 років тому такий собі джон віґлі запропонував простий формат для ведення бухгалтерських записів і написав програму ledger
для автоматизованих підрахунків та аналізу даних з файлів у цьому форматі. ось як виглядатиме типовий запис про сплату, скажімо, за електроенергію в форматі ledger:
2022-11-17 Київенерго
; Оплата комунальних послуг (готівкою в касі)
Готівка -256,37 грн
Електрика
найпростіший запис ledger
містить:
- перший рядок: дата, назва контрагента;
- кожен наступний рядок з відступом: рахунок, сума списання/зарахування, валюта;
- (опційно) рахунок без суми (для списання/зарахування різниці по транзакції).
нічого страшного? очевидно, що програма, попри простоту формату, підтримує подвійний запис: з одного рахунку (Готівка
) списано якусь суму, на інший (Електрика
) цю ж суму записано. рядки, що починаються з ;
— це коментарі. а ось таке можна було би занотувати після закупів у супермаркеті:
2022-11-18 Сільпо
; Закупи в супермаркеті
Кредитка
Продукти 123,45 грн
Інше 234,56 грн
стривайте, де ж тут сума, що її списують з рахунку Кредитка
? а це діє «автомагія» ledger
: нема потреби вказувати, яку суму списано: програма сама її полічить, достатньо вказати рахунок, на який відносяться витрати. це не єдина зручність ledger
; ось так можна занотувати обмін валют:
2022-11-19 Приватбак
; Купівля валюти
Готівка 100 USD @ 40,25 грн
Готівка
тут на готівковий рахунок внесено 100 доларів сша за курсом 40,25 грн/долар, — ledger
сам порахує, скільки витрачено гривень на цю операцію, і віднесе відповідне списання на той самий рахунок Готівка
. стоп, як? тобто на одному рахунку можуть бути «одночасно» гривні й долари? — з ledger так, легко! але якщо хочеться мати окремий рахунок на кожну валюту, ніхто не обмежує:
2022-11-19 Приватбак
; Купівля валюти
Долари 100 USD @ 40,25 грн
Готівка
а де програма зберігає стан рахунків, і де зберігається довідник рахунків?
ніде! в цім краса ledger
: він нічого ніде не зберігає; за назви рахунків правлять довільні текстові мітки, з яких починаються відбитті (ті, що з відступом) рядки; кількість та назви валют довільні: можна грн
та долари
, можна UAH
та USD
, а можна вести облік у кришечках.
але яка тоді роль ledger
? це програма для аналізу записів у текстовому файлі й обчислення звітів «на льоту»! наприклад, якщо треба порахувати поточний баланс по всіх згаданих у файлі рахунках:
> ledger --file ledger_test.txt balance
234,56 грн Інше
100 USD
-4281,37 грн Готівка
256,37 грн Електрика
-358,01 грн Кредитка
123,45 грн Продукти
--------------------
100 USD
-4025,00 грн
або якщо треба переглянути журнал всіх операцій:
> ledger --file ledger_test.txt register
22-Nov-17 Київенерго Готівка -256,37 грн -256,37 грн
Електрика 256,37 грн 0
22-Nov-18 Сільпо Кредитка -358,01 грн -358,01 грн
Продукти 123,45 грн -234,56 грн
Інше 234,56 грн 0
22-Nov-19 Приватбак Готівка 100 USD 100 USD
Готівка -4025,00 грн 100 USD
звісно, це лише примітивний приклад для швидкої демонстрації облікової книги в текстовому файлі й ledger. для застосування в реальному житті треба додати трішечки планування й базових знань про облік, але основні засади будуть ті самі. якщо цікаво — читайте далі!
встановлення й налаштування
отже, для експериментів знадобиться сам ledger — консольний додаток для linux. можна завантажити, але правильніше встановити з репозиторіїв, — для прикладу, в arch-базованих дистрибутивах якось так:
[sudo] pacman -S ledger
ledger --version
для debian так само все просто, ledger є в репозиторії:
[sudo] apt-get update
[sudo] apt-get install ledger
ledger --version
є версії для windows, macos, *bsd, але розбирайтеся з ними самі, якщо вони вам треба.
ledger не потребує налаштувань; чи не єдине, що я зазвичай роблю — зберігаю розташування файлу до змінної для знучности (приміром, до ~/.bashrc
); розширення не обов’язково має бути .ledger
(це просто текстовий файл!), але це спрощує застосування підствітки синтаксису (див. далі) у vim, kate чи іншому притомному текстовому редакторі:
LEDGER=~/ledger_test.ledger
якщо користуватися vim, можна додатково покращити собі настрій, додавши підсвітку синтаксису ledger і декілька додаткових можливостей:
> pamac install vim-ledger-git
тепер можна братися до експериментів (сподіваюся, редактор за замовчуванням налаштовано?):
$EDITOR $LEDGER
планування облікової книги
якщо мені вдалося когось зацікавити, тут варто було би зупинитися й порадити чудовий довідник «ledger: command-line accounting» на офіційному сайті ledger’а: він надзвичайно детальний, містить велику кількість прикладів, в до того ж легко читається! щоправда, він написаний англійською мовою, і я не стрічав перекладів українською; тож коли вже я пообіцяв якийсь зрозумілий вступ до використання ledger
для особистої бухгалтерії, тож мушу продовжити.
тільки замість вибірково переказувати довідник, я розповім про власний досвід на конкретних прикладах з канадійських реалій; кому треба — легко зможе адаптувати до своїх задач.
отож, я починаю з порожнього файлу tivasyk_2023.ledger
на власному сервері owncloud (раніше зберігав на dropbox’і):
LEDGER="~/owncloud/ledger/tivasyk_2023.ledger"
vim $LEDGER
далі — просто робота з цим файлом. для початку — заголовок.
; ------------------------------
; Фінансовий журнал 2022-2023
; ------------------------------
далі я створюю для себе великий блоковий коментар, який міститиме «довідник рахунків» — перелік усіх рахунків, які я планую використовувати. навіщо?
- слугує мені нагадуванням про структуру рахунків;
- дозволяє скористатися автодоповненням в більшости текстових редакторів.
«пласка» (однорівнева) структура рахунків, як у попередніх прикладах — це надто просто і незручно в реальному житті; тому назви рахунків у мене мають певний формат: категорія:[банк:]рахунок:власник
; ledger
ніяк не обмежує, але зручно й правильно використовувати канонічні бухгалтерські категорії — активи, пасиви, доходи, витрати й капітал:
; ------------------------------
; Фінансовий журнал 2022-2023
; ------------------------------
; Довідник рахунків
; ------------------------------
; Активи ; Assets
; Активи:Готівка ; Готівка на руках (CAD, USD, UAH тощо)
; Активи:RBC ; Рахунки в RBC
; Активи:RBC:Поточний ; ..Чековий рахунок в RBC (CAD)
; Активи:RBC:Депозит ; ..Депозитний рахунок в RBC (USD)
; Активи:RBC:REEE ; ..Дитячий навчальний депозит в RBC (CAD)
; Активи:DJ ; Рахунки в Desjardins
; Активи:DJ:Поточний ; ..Чековий рахунок в Desjardins (CAD)
; Активи:IA ; Рахунки в Industrial Alliance
; Активи:IA:Депозит ; ..Депозитний рахунок в Ind All (CAD)
; ------------------------------
; Пасиви ; Liabilities
; Пасиви:RBC ; Кредити в RBC
; Пасиви:RBC:Кредитка ; ..MasterCard
; Пасиви:RBC:Навчання ; ..Студентська позика в RBC (коледж)
; Пасиви:RBC:Кредитна лінія ; ..Кредитна лінія в RBC
; Пасиви:RBC:Автопозика ; ..Кредит на автівку
; Пасиви:DJ ; Кредити в Desjardins
; Пасиви:DJ:Іпотека ; ..Іпотечний кредит (фікс. 1,79%/рік)
; Пасиви:CIBC ; Кредити в CIBC
; Пасиви:CIBC:Кредитка ; ..MasterCard
; ------------------------------
; Капітал ; Equity
; Капітал:Початковий баланс ; Стан балансу на день відкриття журналу
; ------------------------------
; Доходи ; Income
; Доходи:Соцвиплати ; Федеральні й провінційні виплати на дітей тощо
; Доходи:Зарплата ;
; Доходи:Інше ; Будь-які інші доходи
; ------------------------------
; Витрати ; Expenses
; Витрати:Житло
; Витрати:Житло:Електрика
; Витрати:Житло:Іпотека
; Витрати:Житло:Інше
; Витрати:Зв'язок
; Витрати:Зв'язок:Інтернет
; Витрати:Зв'язок:Телефон
; Витрати:Здоров'я
; Витрати:Автівка
; Витрати:Автівка:Пальне
; Витрати:Автівка:Інше
; Витрати:Освіта
; Витрати:Дозвілля
; Витрати:Подарунки
; Витрати:Податки
; Витрати:Покупки
; Витрати:Послуги
; Витрати:Продукти
; Витрати:Транспорт
; Витрати:Невраховані
; ------------------------------
це все один великий коментар (рядки починаються з ;
), тож ledger
його ігнорує — можна додавати будь-яку інфомацію «для себе» (наприклад, в реальному житті я зберігаю номери рахунків, відсотки по кредитах, приблизні щомісячні виплати тощо).
далі: оскільки ніхто ніколи не починає облік з нуля, — потрібно зафіксувати початковий стан рахунків; «дорором» для всіх транзакцій є рахунок Капітал:Початковий баланс
.
; ------------------------------
; Фінансовий журнал 2022-2023
; ------------------------------
; Довідник рахунків
; ------------------------------
...
; ------------------------------
; Початкові баланси 2022-11-15
; ------------------------------
2022-11-15 Початкові баланси
Активи:Готівка 20,00 CAD
Активи:RBC:Поточний 1234,56 CAD
Активи:RBC:Депозит 1234,56 USD @ 1,36820 CAD
Активи:RBC:REEE 1234,56 CAD
Активи:DJ:Поточний 123,45 CAD
Активи:IA:Депозит 1234,56 CAD
Пасиви:RBC:Кредитка -123,45 CAD
Пасиви:RBC:Кредитна лінія -1234,56 CAD
Пасиви:RBC:Автопозика -12345,67 CAD
Пасиви:RBC:Навчання -1234,56 CAD
Пасиви:DJ:Іпотека -123456,78 CAD
Пасиви:CIBC:Кредитка -123,45 CAD
Капітал:Початковий баланс
; ------------------------------
зрозуміло, що стан рахунків взято «зі стелі».
нотація транзакцій
(далі буде)
основні звіти
(далі буде)
графіки!
(далі буде)
документація
детальніше про leger-cli можна почитати:
- сторінка ledger у вікіпедії (укр.)
- офіційний веб-сайт ledger (англ.)
- підручник з використання ledger (англ.)