mdebs

The Minimalistic Double-Entry Bookkeeping System


Copyright (C) 1997, by Nathan L. Cutler 

Všechna práva vyhrazena. Tento dokument může být volně šířen jako
celek. Provedením jakékoliv změny však tato možnost zanikne.

Datum poslední aktualizace 20. března 1997

Obsah


Úvod

Softwarový balík s názvem "mdebs" se má někdy v budoucnu stát řešením pro ty, kdo by rádi vedli své podvojné účetnictví pod Linuxem.

mdebs je soubor programů v céčku (ANSI C) a databáze implementované pomocí Postgres95 (nebo, chcete-li, PostgreSQL).

Autorem mdebs je Nathan L. Cutler <ncutler@terminal.cz>.

Spolupracují na projektu

[N.B. pokud jsem zkomolil některé vaše jméno či adresu, předem prosím o prominutí a oznamení správného znění!]


Filozofie

Rozhodl jsem se začít psát mdebs proto, že jsem nenašel žádný software volně šiřitelný pod licencí GPL a běžící pod Linuxem, který by uměl dělat podvojné účetnictví. Přitom jako majitel a zároveň hlavní účetní a vůbec jediný zaměstnanec malé firmy jsem něco takového velmi potřeboval.

Jednodušeně řečeno, vedení účetnictví je souborem úkonů. Tyto úkony mohou být od sebe odděleny a dobře definovány. V některém jiném účetním softwaru se tyto úkony provádí prostřednictvím jediného, většinou obrovského programu s bezpočtem různě vnořených oken a screenů. V mdebsu je každý úkon řešen jedním menším programem.

Celý systém je koncipován tak, aby byl "minimalistický". To znamená, že nemusí nutně umět to, co zrovna ten který uživatel momentálně potřebuje. Toto je však vedlejší. Podstatné je, aby to umělo účtovat. Vystavování faktur, sestavování účetních závěrek, vedení dodavatelských agend, výtisknutí výplatných pásek apod. nechť zajišťují jiné programy.


Současný stav

Současný stav projektu ke dni poslední aktualizace tohoto dokumentu je následující:


Předpoklady

Aby mdebs něco dělal na vašem systému musíte mít funkční instalaci gcc a Postgres95 (also known as PostgreSQL).

V Makefile je třeba se předem ujistit, že gcc bude vědět, kde najde include soubor libpq-fe.h a sdílenou knihovnu libpq.so. Můj Makefile by měl fungovat na systémech postavených za základě distribuce Debian 1.2 s použitím balíků postgres95 a postgres95-dev.

Informace o Postgres95 je k dispozici na URL http://www.postgresql.org/


FAQ

  1. Kde si můžu stáhnout nejnovější verze?

    Hlavní site: http://www.cise.ufl.edu/~nlc/pro.html

    Mirror site: ftp://WAS.PVTNET.CZ/pub/Linux/Software/Ucetnictvi/
    (courtesy of Petr Šnajdr -- Thank you!)

  2. Where's the documentation?

    You're looking at it.


Datové struktury

Struktura jednotlivých databázových tabulek.

fiscyear je tabulka, která definuje účetní období. startd je první den a endd poslední den tohoto období.

fiscyear
startd DATE
endd DATE

osnova definuje účetní osnovu. acct je třímístní označení účtu, anal je dvoumístní označení analytického podúčtu, a desig je popis účtu.

osnova
acct CHAR(3)
anal CHAR(2)
desig VARCHAR(60)

descs zachycuje jednotlivé operace účetního deníku, a obsahuje políčko ent_date a por_cislo, jež spolu slouží jako odkaz na tabulku denik, a políčko descr, což je popis operace.

descs
ent_date DATE
por_cislo INT
desig VARCHAR(80)

porad je zvláštní tabulčička, jejíž existence vynutil systém odkazu mezi tabulkami descs a denik. Při vkládání účetních operací je třeba rychle zjistit poslední použité pořadové číslo pro určité datum. Právě tato informace je zachycena zde.

porad
ent_date DATE
max_cislo INT

V neposlední řadě je tabulka denik, která obsahuje políčka pro zachycení jednotlivých řádků účetní operace. Políčka ent_date a por_cislo jsou odkazem na tabulku descs. Políčka [m]d_acct a [m]d_anal odkazují na tabulku osnova. Jedna z trojic políček [m]d_acct, [m]d_anal a [m]d_amt vždy obsahuje samé nuly. Částky v políčkách [m]d_amt jsou vyjádřeny v haléřích. Když jsou sečteny všechny zápisy, které mají stejné ent_date a por_cislo, strany Má dáti a Dal si musí být rovny.

denik
ent_date DATE
por_cislo INT
md_acct CHAR(3)
md_anal CHAR(2)
md_amt INT
d_acct CHAR(3)
d_anal CHAR(2)
d_amt INT

Jednotlivé dílčí programy

Popisy jednotlivých existujících programů, které jsou součástmi mdebsu.

recreate

shell script, který automatizuje následující postup, který je při ladění třeba provést často:

  1. Zlikvidovat databázi jako celek, i s daty a strukturou tabulek
  2. Znovuvytvořit databázi, zatím bez dat a tabulek
  3. Vytvořit strukturu tabulek v databázi
  4. Inicializovat účetní období (fiscal year)
  5. Natáhnout účetní osnovu z ASCII souboru do databáze

Zároveň slouží jako prostředek k prvotnímu vytvoření databázového prostředí.

create

Program, který v existující "holé" databázi vytvoří systém tabulek.

init_fiscyear

Program, který do tabulky fiscyear zapíše počáteční a konečná data účetního období.

load_osnova

Program, který natáhne z ASCII souboru účetní osnovu a cpe ji do tabulky osnova. Tento prográmek se vůbec neohlíží po tom, zda je, či není tato tabulka prázdná, a vůbec nekontroluje případnou duplicitu účtů. Proto je moudré ho spustit pouze jako součást scriptu recreate s tím, že účetní osnovu pro dané účetní období se vkládá do souboru OSNOVA_DAT (viz níže) celou.

Prozatím je jméno ASCII souboru doslova uvedené v zdrojáku load_osnova.h jako OSNOVA_DAT.

Formát souboru OSNOVA_DAT je následující:

Součástí distribuce je i vzorový soubor osnova.dat.

osninput

Program, jehož prostřednictvím lze vymazávat, přidávat a dotazovat jednotlivé účty účetní osnovy podle jejich čísla (včetně případného analytického podčísla)

osndump

Program, který vypíše celou účetní osnovu na stdout.

load_denik

Program, který natáhne účetní operace z libovolného ASCII souboru a cpe je jednu po druhé do tabulek tvořících účetní deník.

Program bere zatím jeden argument, který interpretuje jako jméno ASCII souboru, který má zpracovat. Formát tohoto souboru je možné dočíst ze vzorového souboru load_denik.dat, který je součástí distribuce.

Vzhledem k tomu, že tento prográmek byl nejnáročnější ze všech, došlo během debugování k tomu, že program vypisuje množství verbózních hlášek, které nemusí uživatele ve všech případech zajímat. Proto jsou tyto hlášky směrovány do souboru, jehož jméno je shodné se zadaným jménem datového souboru s přidáním přípony ".dat".

Program je napsán tak, že když dojde ke chybě při zpracování nějaké operace, ať už tuto chybu zavinil autor datového souboru nebo autor programu, místo vzniku chyby je víceméně patrné z logovacího souboru - poslední hláška v něm obsažená označuje poslední úspěšně provedený úkon před chybou.

Protože Postgres95 umí transakční zpracování dotazů, nemělo by dojít k částečnému uložení chybně zadané účetní operace.

dumpacct

Tento program bere jeden nebo dva argumenty, označující účet, který má být vypsán (když se uvádí pouze jeden argument, jako druhý se doplňuje '--').

Program pak vypisuje všechny pohyby na tomto účtě během celého účetního období. Na konci vypisuje celkové pohyby pro obě strany účtu. Tento program by měl být užitečný při sestavení účetní závěrky. Chtělo by to ale rozšířit ho o možnost vypsání pohybů z nějakého vymezeného podobdobí ("od - do").