Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

จัดการการเงินด้วย Ledger Mode ใน Emacs

Ledger Mode เป็นแพ็กเกจใน Emacs สำหรับโปรแกรมบัญชี Command Line ชื่อ Ledger ให้ผู้ใช้ Emacs ใช้ฟีเจอร์ของ Ledger ได้จาก Text Editor ที่ชอบ

ทำไมต้องใช้ Ledger Mode ใน Emacs

Ledger Mode เรียบง่าย เข้าใจง่าย คิดยอดอัตโนมัติ แจ้งเตือนผิดพลาด จัดหมวดหมู่รายจ่าย/รายได้ เรียงและวิเคราะห์ได้จากในแพ็กเกจเลย

Emacs ทำงานแบบ Interoperability: ข้อมูลใน Emacs นำไปใช้แพ็กเกจอื่นได้ Ledger Mode ให้สร้างและรวมข้อมูล Ledger กับเครื่องมืออื่นใน Emacs เช่น สร้าง Org Mode Documents ลิงก์ Email ที่เก็บไว้และไฟล์ Ledger คัดลอก Entry ระหว่าง Email และ Ledger ได้ง่าย เพราะ Ledger Mode ใช้ Plain Text

โปรแกรม Ledger (Backend)

Ledger Mode แค่ Front-end ต้องรู้จัก Ledger CLI ก่อน

Ledger ทำงานอย่างไร

Ledger อ่าน Plain Text Ledger สร้างรายงานบัญชี ไม่สร้าง/แก้ไข Database ไฟล์ → Lean และ Flexible

รูปแบบ Entry ที่ Ledger คาดหวัง:

2022/02/16 Expenses
  Expenses:Food:Lunch      140 PHP
  Expenses:Food:Snack       50 PHP
  Assets:Fiat:Cash        -190 PHP

Ledger ต้องการ 3 สิ่ง:

  1. Title Line: วันที่และชื่อ Entry (เช่น Expenses วันที่ 16 Feb)
  2. กลุ่ม Accounts: แสดงเงินมาจากไหน ไปไหน (Cash → Expenses)
  3. จำนวนเงิน: ย้าย Cash 2 ครั้ง (Lunch, Snack) แต่หักจาก Assets ทีเดียวท้ายวัน

สมมติฐาน 3 ข้อนี้ ทำให้ Ledger ปรับตัวได้ทุกสถานการณ์ รองรับทั้งสกุลเงินและ Commodities (หุ้น สินค้า) ใช้ได้ทั้งติดตามค่าใช้จ่ายและลงทุน

Account Categories ใน Ledger

หมวดหมู่ Arbitrary (กำหนดเองได้) แต่มาตรฐานแบ่ง 5 หมวด:

  • Assets — สินทรัพย์/เงิน/หุ้น/สินค้าที่ครอง
  • Expenses — ค่าใช้จ่ายที่จ่ายจาก Assets
  • Income — แหล่งรายได้ (เงินเดือน ฯล฿)
  • Liabilities — หนี้/ภาระผูกพัน
  • Equity — บัญชีพิเศษคำนวณ Net Worth (ใช้ทำ Opening Balance)

เพิ่มรายละเอียดด้วย Colon (:) เช่น Expenses:Food:Lunch เป็น 3 ระดับ

ติดตั้ง Ledger

  • Debian/Ubuntu: sudo apt install ledger
  • Fedora: sudo dnf install ledger
  • Arch: sudo pacman -S ledger

ใช้ Ledger Mode ใน Emacs

ติดตั้งแพ็กเกจ ledger-mode จาก ELPA Repository (Built-in)

  1. Alt+X → package-install → พิมพ์ ledger-mode
  2. Emacs ดาวน์โหลด คอมไพล์ เสร็จ ใช้ได้แล้ว

สร้าง Ledger ไฟล์แรก

Ledger Mode เปิดอัตโนมัติเมื่อเปิดไฟล์副檔名 .ledger

  1. Ctrl+X, Ctrl+F → พิมพ์ example.ledger
  2. Emacs สร้างและเปิดไฟล์ เริ่มเพิ่ม Transaction ได้เลย

สร้าง Opening Balance

ต้องให้ Ledger รู้ยอดคงเหลือปัจจุบัน โดยหัก Assets/Liabilities ไปยัง Equity

2022/02/10 * Opening Balance
  Assets:Bitcoin:Savings      0.045 BTC
  Assets:Bitcoin:Checking     0.00050712 BTC
  Assets:Fiat:Checking     15,000.00 PHP
  Assets:Fiat:Savings     255,944.00 PHP
  Liabilities:Fiat:Car Loan      -450,000.00 PHP
  Liabilities:Fiat:Credit Payable  -5,000.00 PHP
  Liabilities:Fiat:Home Loan    -755,831.34 PHP
  Equity:Opening Balance

โครงสร้างเหมือนเดิม แต่มี * หน้าชื่อ Entry บอก Ledger ว่า Transaction "Clear" แล้ว (พร้อมคิดยอด)

ตรวจสอบยอดคงเหลือ (Balance)

  1. Ctrl+C, Ctrl+O, Ctrl+R → Prompt ให้พิมพ์คำสั่ง Ledger
  2. พิมพ์ bal แสดง Running Balance
  3. จะได้ Hierarchy ทุก Account รวมกันต้องได้ 0 ที่บรรทัดสุดท้าย

เพิ่ม Transaction ใหม่

  1. Ctrl+C, Ctrl+A → สร้าง Transaction ใหม่
  2. ถาม Date (กด Enter ใช้วันนี้)
  3. ถามชื่อ Transaction เก่าที่จะ Copy (Enter สร้างใหม่)
  4. เพิ่มรายการ เช่น:
    2022/02/11 My First Transaction
    Expenses:Food:Snack 250.00 PHP
    Assets:PHP:Checking -250.00 PHP

สร้างรายงานพื้นฐาน

  1. Ctrl+C, Ctrl+O, Ctrl+R → พิมพ์คำสั่งต่างๆ:
    • bal — Balance
    • account Assets — Statement ของ Assets
    • payee snack — แสดง Transaction ที่มีคำว่า snack
    • reg — Register Report (รายละเอียดทุก Transaction)

คำถามที่พบบ่อย (FAQ)

1. Ledger แจ้ง Error "Not Balanced" ทำไม?

สาเหตุหลัก: ลืมปิด Transaction (ไม่มีค่าลบ) ทุก Transaction ต้องมีค่าบวก (เพิ่ม) และค่าลบ (หัก) คู่กัน

2. Ledger ใช้ได้แค่สินทรัพย์จริงไหม?

ไม่! Account ทั้งหมด Arbitrary ใช้ติดตาม Virtual Assets ได้ เช่น เกม EVE Online:

2022/01/04 Venture Profits
  Main:Assets:Liquid:ISK     150,000,000.00 ISK
  Alt 1:Income:Ore Mining     -10,000,000.00 ISK
  Alt 1:Income:Station Trading -40,000,000.00 ISK
  Alt 2:Income:Data Running    -100,000,000.00 ISK

3. กลับลำดับ Transaction ให้เหมือน Bank Statement ได้ไหม?

ใน Report ได้: ใน Buffer Report กด Shift+R จะกลับลำดับ แต่ในไฟล์ Ledger เองไม่ได้