doc: remove wrong "(dev)" suffix in 1.9 html manuals

This commit is contained in:
Simon Michael 2018-07-04 13:26:29 +01:00
parent 7f1b34ea1d
commit 1e27675c7d
9 changed files with 772 additions and 684 deletions

View File

@ -1,6 +1,6 @@
# csv format
This doc is for version **1.9 (dev)**. []{.docversions}
This doc is for version **1.9.1**. []{.docversions}
\$toc\$

View File

@ -1,6 +1,6 @@
# hledger-api
This doc is for version **1.9 (dev)**. []{.docversions}
This doc is for version **1.9.1**. []{.docversions}
\$toc\$

View File

@ -1,6 +1,6 @@
# hledger-ui
This doc is for version **1.9 (dev)**. []{.docversions}
This doc is for version **1.9.1**. []{.docversions}
\$toc\$

View File

@ -1,6 +1,6 @@
# hledger-web
This doc is for version **1.9 (dev)**. []{.docversions}
This doc is for version **1.9.1**. []{.docversions}
\$toc\$

View File

@ -1,6 +1,6 @@
# hledger
This doc is for version **1.9 (dev)**. []{.docversions}
This doc is for version **1.9.1**. []{.docversions}
\$toc\$
@ -705,7 +705,7 @@ in a number of places:
- [query terms](#queries), on the command line and in the hledger-web
search form: `REGEX`, `desc:REGEX`, `cur:REGEX`, `tag:...=REGEX`
- [CSV rules](#csv-rules) conditional blocks: `if REGEX ...`
- [account alias](#account-aliases) directives and options:
- [account alias](#rewriting-accounts) directives and options:
`alias /REGEX/ = REPLACEMENT`, `--alias /REGEX/=REPLACEMENT`
hledger's regular expressions come from the
@ -770,11 +770,9 @@ which:
The following kinds of search terms can be used. Remember these can also
be prefixed with **`not:`**, eg to exclude a particular subaccount.
**`REGEX`**
: match account names by this regular expression. (No prefix is
equivalent to `acct:`).
**`acct:REGEX`**
**`REGEX`, `acct:REGEX`**
: match account names by this regular expression. (With no prefix,
`acct:` is assumed.)
: same as above
**`amt:N, amt:<N, amt:<=N, amt:>N, amt:>=N`**
@ -1117,8 +1115,33 @@ Show accounts and their balances. Aliases: b, bal.
`--show-unbudgeted`
: with --budget, show unbudgeted accounts also
The balance command displays accounts and balances. It is hledger's most
featureful and versatile command.
The balance command is hledger's most versatile command. Note, despite
the name, it is not always used for showing real-world account balances;
the more accounting-aware [balancesheet](#balancesheet) and
[incomestatement](#incomestatement) may be more convenient for that.
By default, it displays all accounts, and each account's change in
balance during the entire period of the journal. Balance changes are
calculated by adding up the postings in each account. You can limit the
postings matched, by a [query](#queries), to see fewer accounts, changes
over a different time period, changes from only cleared transactions,
etc.
If you include an account's complete history of postings in the report,
the balance change is equivalent to the account's current ending
balance. For a real-world account, typically you won't have all
transactions in the journal; instead you'll have all transactions after
a certain date, and an "opening balances" transaction setting the
correct starting balance on that date. Then the balance command will
show real-world account balances. In some cases the -H/--historical flag
is used to ensure this (more below).
The balance command can produce several styles of report:
#### Classic balance report
This is the original balance report, as found in Ledger. It usually
looks like this:
``` {.shell}
$ hledger balance
@ -1136,19 +1159,14 @@ $ hledger balance
0
```
More precisely, the balance command shows the *change* to each account's
balance caused by all (matched) postings. In the common case where you
do not filter by date and your journal sets the correct opening
balances, this is the same as the account's ending balance.
By default, accounts are displayed hierarchically, with subaccounts
indented below their parent. At each level of the tree, accounts are
sorted by [account code](/manual.html#account-directive) if any, then by
account name. Or with `-S/--sort-amount`, by their balance amount.
sorted by [account code](/manual.html#declaring-accounts) if any, then
by account name. Or with `-S/--sort-amount`, by their balance amount.
"Boring" accounts, which contain a single interesting subaccount and no
balance of their own, are elided into the following line for more
compact output. (Not yet supported in tabular reports.) Use `--no-elide`
compact output. (Eg above, the "liabilities" account.) Use `--no-elide`
to prevent this.
Account balances are "inclusive" - they include the balances of any
@ -1158,7 +1176,7 @@ Accounts which have zero balance (and no non-zero subaccounts) are
omitted. Use `-E/--empty` to show them.
A final total is displayed by default; use `-N/--no-total` to suppress
it:
it, eg:
``` {.shell}
$ hledger balance -p 2008/6 expenses --no-total
@ -1167,13 +1185,80 @@ $ hledger balance -p 2008/6 expenses --no-total
$1 supplies
```
#### Customising the classic balance report
You can customise the layout of classic balance reports with
`--format FMT`:
``` {.shell}
$ hledger balance --format "%20(account) %12(total)"
assets $-1
bank:saving $1
cash $-2
expenses $2
food $1
supplies $1
income $-2
gifts $-1
salary $-1
liabilities:debts $1
---------------------------------
0
```
The FMT format string (plus a newline) specifies the formatting applied
to each account/balance pair. It may contain any suitable text, with
data fields interpolated like so:
`%[MIN][.MAX](FIELDNAME)`
- MIN pads with spaces to at least this width (optional)
- MAX truncates at this width (optional)
- FIELDNAME must be enclosed in parentheses, and can be one of:
- `depth_spacer` - a number of spaces equal to the account's
depth, or if MIN is specified, MIN \* depth spaces.
- `account` - the account's name
- `total` - the account's balance/posted total, right justified
Also, FMT can begin with an optional prefix to control how
multi-commodity amounts are rendered:
- `%_` - render on multiple lines, bottom-aligned (the default)
- `%^` - render on multiple lines, top-aligned
- `%,` - render on one line, comma-separated
There are some quirks. Eg in one-line mode, `%(depth_spacer)` has no
effect, instead `%(account)` has indentation built in. <!-- XXX retest:
Consistent column widths are not well enforced, causing ragged edges unless you set suitable widths.
Beware of specifying a maximum width; it will clip account names and amounts that are too wide, with no visible indication.
--> Experimentation may be needed to get pleasing results.
Some example formats:
- `%(total)` - the account's total
- `%-20.20(account)` - the account's name, left justified, padded to
20 characters and clipped at 20 characters
- `%,%-50(account) %25(total)` - account name padded to 50
characters, total padded to 20 characters, with multiple commodities
rendered on one line
- `%20(total) %2(depth_spacer)%-(account)` - the default format for
the single-column balance report
#### Colour support
The balance command shows negative amounts in red, if:
- the `TERM` environment variable is not set to `dumb`
- the output is not being redirected or piped anywhere
#### Flat mode
To see a flat list of full account names instead of the default
hierarchical display, use `--flat`. In this mode, accounts (unless
depth-clipped) show their "exclusive" balance, excluding any subaccount
balances. In this mode, you can also use `--drop N` to omit the first
few account name components.
To see a flat list instead of the default hierarchical display, use
`--flat`. In this mode, accounts (unless depth-clipped) show their full
names and "exclusive" balance, excluding any subaccount balances. In
this mode, you can also use `--drop N` to omit the first few account
name components.
``` {.shell}
$ hledger balance -p 2008/6 expenses -N --flat --drop 1
@ -1183,30 +1268,37 @@ $ hledger balance -p 2008/6 expenses -N --flat --drop 1
#### Depth limited balance reports
With `--depth N`, balance shows accounts only to the specified depth.
This is very useful to show a complex charts of accounts in less detail.
In flat mode, balances from accounts below the depth limit will be shown
as part of a parent account at the depth limit.
With `--depth N` or `depth:N` or just `-N`, balance reports show
accounts only to the specified numeric depth. This is very useful to
summarise a complex set of accounts and get an overview.
``` {.shell}
$ hledger balance -N --depth 1
$ hledger balance -N -1
$-1 assets
$2 expenses
$-2 income
$1 liabilities
```
<!-- $ for y in 2006 2007 2008 2009 2010; do echo; echo $y; hledger -f $y.journal balance ^expenses --depth 2; done -->
#### Multicolumn balance reports
Flat-mode balance reports, which normally show exclusive balances, show
inclusive balances at the depth limit.
With a [reporting interval](#reporting-interval), multiple balance
columns will be shown, one for each report period. There are three types
of multi-column balance report, showing different information:
<!-- $ for y in 2006 2007 2008 2009 2010; do echo; echo $y; hledger -f $y.journal balance ^expenses --depth 2; done -->
#### Multicolumn balance report
Multicolumn or tabular balance reports are a very useful hledger
feature, and usually the preferred style. They share many of the above
features, but they show the report as a table, with columns representing
time periods. This mode is activated by providing a [reporting
interval](#reporting-interval).
There are three types of multicolumn balance report, showing different
information:
1. By default: each column shows the sum of postings in that period, ie
the account's change of balance in that period. This is useful eg
for a monthly income statement: <!--
multi-column income statement:
multicolumn income statement:
$ hledger balance ^income ^expense -p 'monthly this year' --depth 3
@ -1267,8 +1359,8 @@ of multi-column balance report, showing different information:
|| 0 0 0
```
Multi-column balance reports display accounts in flat mode by default;
to see the hierarchy, use `--tree`.
Multicolumn balance reports display accounts in flat mode by default; to
see the hierarchy, use `--tree`.
With a reporting interval (like `--quarterly` above), the report
start/end dates will be adjusted if necessary so that they encompass the
@ -1309,14 +1401,23 @@ Balance changes in 2008:
# Average is rounded to the dollar here since all journal amounts are
```
#### Budgets
Limitations:
With `--budget` and a [report interval](manual.html#report-intervals),
all [periodic transactions](journal.html#periodic-transactions) in your
journal with that interval, active during the requested report period,
are interpreted as recurring budget goals for the specified accounts
(and subaccounts), and the report will show the difference between
actual and budgeted balances.
In multicolumn reports the [`-V/--value` flag](#market-value) uses the
market price on the report end date, for all columns (not the price on
each column's end date).
Eliding of boring parent accounts in tree mode, as in the classic
balance report, is not yet supported in multicolumn reports.
#### Budget report
With `--budget`, extra columns are displayed showing budget goals for
each account and period, if any. Budget goals are defined by [periodic
transactions](journal.html#periodic-transactions). This is very useful
for comparing planned and actual income, expenses, time usage, etc.
--budget is most often combined with a [report
interval](manual.html#report-intervals).
For example, you can take average monthly expenses in the common expense
categories to construct a minimal monthly budget:
@ -1347,141 +1448,59 @@ categories to construct a minimal monthly budget:
assets:bank:checking
```
You can now see a monthly budget performance report:
You can now see a monthly budget report:
``` {.shell}
$ hledger balance -M --budget
Balance changes in 2017/11/01-2017/12/31:
|| 2017/11 2017/12
=======================++=================================================
<unbudgeted>:expenses || $20 $100
assets:bank:checking || $-2445 [99% of $-2480] $-2665 [107% of $-2480]
expenses:bus || $49 [98% of $50] $53 [106% of $50]
expenses:food || $396 [99% of $400] $412 [103% of $400]
expenses:movies || $30 [100% of $30] 0 [0% of $30]
income || $1950 [98% of $2000] $2100 [105% of $2000]
-----------------------++-------------------------------------------------
|| 0 0
```
You can roll over unspent budgets to next period with `--cumulative`:
``` {.shell}
$ hledger balance -M --budget --cumulative
Ending balances (cumulative) in 2017/11/01-2017/12/31:
|| 2017/11/30 2017/12/31
=======================++=================================================
<unbudgeted>:expenses || $20 $120
assets:bank:checking || $-2445 [99% of $-2480] $-5110 [103% of $-4960]
expenses:bus || $49 [98% of $50] $102 [102% of $100]
expenses:food || $396 [99% of $400] $808 [101% of $800]
expenses:movies || $30 [100% of $30] $30 [50% of $60]
income || $1950 [98% of $2000] $4050 [101% of $4000]
-----------------------++-------------------------------------------------
|| 0 0
```
Accounts with no budget goals (not mentioned in the periodic
transactions) will be aggregated under `<unbudgeted>`, unless you add
the `--show-unbudgeted` flag to display them normally:
``` {.shell}
$ hledger balance --budget --show-unbudgeted
Balance changes in 2017/11/01-2017/12/31:
Budget performance in 2017/11/01-2017/12/31:
|| 2017/11 2017/12
======================++=================================================
<unbudgeted> || $20 $100
assets:bank:checking || $-2445 [99% of $-2480] $-2665 [107% of $-2480]
expenses:bus || $49 [98% of $50] $53 [106% of $50]
expenses:food || $396 [99% of $400] $412 [103% of $400]
expenses:gifts || 0 $100
expenses:movies || $30 [100% of $30] 0 [0% of $30]
expenses:supplies || $20 0
income || $1950 [98% of $2000] $2100 [105% of $2000]
----------------------++-------------------------------------------------
|| 0 0
```
Note --budget first arrived in hledger in 1.5 and is still pretty young;
join the discussions on mail list and issue tracker to help us refine
it.
By default, only accounts with budget goals during the report period are
shown. `--show-unbudgeted` shows unbudgeted accounts as well. Top-level
accounts with no budget goals anywhere below them are grouped under
`<unbudgeted>`.
You can roll over unspent budgets to next period with `--cumulative`:
``` {.shell}
$ hledger balance -M --budget --cumulative
Budget performance in 2017/11/01-2017/12/31:
|| 2017/11/30 2017/12/31
======================++=================================================
<unbudgeted> || $20 $120
assets:bank:checking || $-2445 [99% of $-2480] $-5110 [103% of $-4960]
expenses:bus || $49 [98% of $50] $102 [102% of $100]
expenses:food || $396 [99% of $400] $808 [101% of $800]
expenses:movies || $30 [100% of $30] $30 [50% of $60]
income || $1950 [98% of $2000] $4050 [101% of $4000]
----------------------++-------------------------------------------------
|| 0 0
```
Note, the `-S/--sort-amount` flag is not yet fully supported with
`--budget`.
For more examples, see [Budgeting and
Forecasting](https://github.com/simonmichael/hledger/wiki/Budgeting%20and%20forecasting).
#### Custom balance output
#### Output format
You can customise the layout of simple (non-tabular) balance reports
with `--format FMT`:
``` {.shell}
$ hledger balance --format "%20(account) %12(total)"
assets $-1
bank:saving $1
cash $-2
expenses $2
food $1
supplies $1
income $-2
gifts $-1
salary $-1
liabilities:debts $1
---------------------------------
0
```
The FMT format string (plus a newline) specifies the formatting applied
to each account/balance pair. It may contain any suitable text, with
data fields interpolated like so:
`%[MIN][.MAX](FIELDNAME)`
- MIN pads with spaces to at least this width (optional)
- MAX truncates at this width (optional)
- FIELDNAME must be enclosed in parentheses, and can be one of:
- `depth_spacer` - a number of spaces equal to the account's
depth, or if MIN is specified, MIN \* depth spaces.
- `account` - the account's name
- `total` - the account's balance/posted total, right justified
Also, FMT can begin with an optional prefix to control how
multi-commodity amounts are rendered:
- `%_` - render on multiple lines, bottom-aligned (the default)
- `%^` - render on multiple lines, top-aligned
- `%,` - render on one line, comma-separated
There are some quirks. Eg in one-line mode, `%(depth_spacer)` has no
effect, instead `%(account)` has indentation built in. <!-- XXX retest:
Consistent column widths are not well enforced, causing ragged edges unless you set suitable widths.
Beware of specifying a maximum width; it will clip account names and amounts that are too wide, with no visible indication.
--> Experimentation may be needed to get pleasing results.
Some example formats:
- `%(total)` - the account's total
- `%-20.20(account)` - the account's name, left justified, padded to
20 characters and clipped at 20 characters
- `%,%-50(account) %25(total)` - account name padded to 50
characters, total padded to 20 characters, with multiple commodities
rendered on one line
- `%20(total) %2(depth_spacer)%-(account)` - the default format for
the single-column balance report
This command also supports [output
The balance command supports [output
destination](/manual.html#output-destination) and [output
format](/manual.html#output-format) selection.
#### Colour support
The balance command shows negative amounts in red, if:
- the `TERM` environment variable is not set to `dumb`
- the output is not being redirected or piped anywhere
### balancesheet
This command displays a simple balance sheet, showing historical ending
@ -2301,7 +2320,7 @@ In a Cygwin/MSYS/Mintty window, the tab key is not supported in hledger
add.
Not all of Ledger's journal file syntax is supported. See [file format
differences](faq#file-format-differences).
differences](https://github.com/simonmichael/hledger/wiki/FAQ#file-formats).
On large data files, hledger is slower and uses more memory than Ledger.

View File

@ -1,6 +1,6 @@
# journal format
This doc is for version **1.9 (dev)**. []{.docversions}
This doc is for version **1.9.1**. []{.docversions}
\$toc\$
@ -19,10 +19,11 @@ a number of transaction entries, each describing a transfer of money (or
any commodity) between two or more named accounts, in a simple format
readable by both hledger and humans.
hledger's journal format is a compatible subset,
[mostly](faq.html#file-format-differences), of [ledger's journal
hledger's journal format is a compatible subset, mostly, of [ledger's
journal
format](http://ledger-cli.org/3.0/doc/ledger3.html#Journal-Format), so
hledger can work with [compatible](faq.html#file-format-differences)
hledger can work with
[compatible](https://github.com/simonmichael/hledger/wiki/FAQ#file-formats)
ledger journal files as well. It's safe, and encouraged, to run both
hledger and ledger on the same journal file, eg to validate the results
you're getting.
@ -277,7 +278,7 @@ Account names may contain single spaces, eg:
`assets:accounts receivable`. Because of this, they must always be
followed by **two or more spaces** (or newline).
Account names can be [aliased](#account-aliases).
Account names can be [aliased](#rewriting-accounts).
### Amounts
@ -339,8 +340,8 @@ hledger displays amounts, it will choose a consistent format for each
commodity. (Except for [price amounts](#prices), which are always
formatted as written). The display format is chosen as follows:
- if there is a [commodity directive](#commodity-directive) specifying
the format, that is used
- if there is a [commodity directive](#declaring-commodities)
specifying the format, that is used
- otherwise the format is inferred from the first posting amount in
that commodity in the journal, and the precision (number of decimal
places) will be the maximum from all posting amounts in that
@ -636,10 +637,6 @@ star (`*`) are comments, and will be ignored. (Star comments cause
org-mode nodes to be ignored, allowing emacs users to fold and navigate
their journals with org-mode or orgstruct-mode.)
Also, anything between [`comment` and `end comment`
directives](#multi-line-comments) is a (multi-line) comment. If there is
no `end comment`, the comment extends to the end of the file.
You can attach comments to a transaction by writing them after the
description and/or indented on the following lines (before the
postings). Similarly, you can attach comments to an individual posting
@ -669,6 +666,9 @@ end comment
; a file comment (because not indented)
```
You can also comment larger regions of a file using [`comment` and
`end comment` directives](#comment-blocks).
### Tags
Tags are a way to add extra labels or labelled data to postings and
@ -721,7 +721,156 @@ except hledger's tag values are simple strings.
### Directives
#### Account aliases
#### Comment blocks
A line containing just `comment` starts a commented region of the file,
and a line containing just `end comment` (or the end of the current
file) ends it. See also [comments](#comments).
#### Including other files
You can pull in the content of additional files by writing an include
directive, like this:
``` {.journal}
include path/to/file.journal
```
If the path does not begin with a slash, it is relative to the current
file. Glob patterns (`*`) are not currently supported.
The `include` directive can only be used in journal files. It can
include journal, timeclock or timedot files, but not CSV files.
#### Default year
You can set a default year to be used for subsequent dates which don't
specify a year. This is a line beginning with `Y` followed by the year.
Eg:
``` {.journal}
Y2009 ; set default year to 2009
12/15 ; equivalent to 2009/12/15
expenses 1
assets
Y2010 ; change default year to 2010
2009/1/30 ; specifies the year, not affected
expenses 1
assets
1/31 ; equivalent to 2010/1/31
expenses 1
assets
```
#### Declaring commodities
The `commodity` directive declares commodities which may be used in the
journal (though currently we do not enforce this). It may be written on
a single line, like this:
``` {.journal}
; commodity EXAMPLEAMOUNT
; display AAAA amounts with the symbol on the right, space-separated,
; using period as decimal point, with four decimal places, and
; separating thousands with comma.
commodity 1,000.0000 AAAA
```
or on multiple lines, using the "format" subdirective. In this case the
commodity symbol appears twice and should be the same in both places:
``` {.journal}
; commodity SYMBOL
; format EXAMPLEAMOUNT
; display indian rupees with currency name on the left,
; thousands, lakhs and crores comma-separated,
; period as decimal point, and two decimal places.
commodity INR
format INR 9,99,99,999.00
```
Commodity directives have a second purpose: they define the standard
display format for amounts in the commodity. Normally the display format
is inferred from journal entries, but this can be unpredictable;
declaring it with a commodity directive overrides this and removes
ambiguity. Towards this end, amounts in commodity directives must always
be written with a decimal point (a period or comma, followed by 0 or
more decimal digits).
#### Default commodity
The D directive sets a default commodity (and display format), to be
used for amounts without a commodity symbol (ie, plain numbers). (Note
this differs from Ledger's default commodity directive.) The commodity
and display format will be applied to all subsequent commodity-less
amounts, or until the next D directive.
``` {.journal}
# commodity-less amounts should be treated as dollars
# (and displayed with symbol on the left, thousands separators and two decimal places)
D $1,000.00
1/1
a 5 ; <- commodity-less amount, becomes $1
b
```
As with the `commodity` directive, the amount must always be written
with a decimal point.
#### Declaring accounts
The `account` directive predeclares account names. The simplest form is
`account ACCTNAME`, eg:
``` {.journal}
account assets:bank:checking
```
Currently this mainly helps with account name autocompletion in eg
hledger add, hledger-iadd, hledger-web, and ledger-mode.\
In future it will also help detect misspelled accounts.
Account names can be followed by a numeric account code:
``` {.journal}
account assets 1000
account assets:bank:checking 1110
account liabilities 2000
account revenues 4000
account expenses 6000
```
This affects account display order in reports: accounts with codes are
listed before accounts without codes, in increasing code order.
(Otherwise, accounts are listed alphabetically.) Account codes should be
all numeric digits, unique, and separated from the account name by at
least two spaces (since account names may contain single spaces). By
convention, often the first digit indicates the type of account, as in
[this numbering
scheme](http://www.dwmbeancounter.com/BCTutorSite/Courses/ChartAccounts/lesson02-6.html)
and the example above. In future, we might use this to recognize account
types.
An account directive can also have indented subdirectives following it,
which are currently ignored. Here is the full syntax:
``` {.journal}
; account ACCTNAME [OPTIONALCODE]
; [OPTIONALSUBDIRECTIVES]
account assets:bank:checking 1110
a comment
some-tag:12345
```
#### Rewriting accounts
You can define aliases which rewrite your account names (after reading
the journal, before generating reports). hledger's account aliases can
@ -734,7 +883,8 @@ be useful for:
or combining two accounts into one
- customising reports
See also [Cookbook: rewrite account names](account-aliases.html).
See also [Cookbook: Rewrite account
names](https://github.com/simonmichael/hledger/wiki/Rewrite-account-names).
##### Basic aliases
@ -796,7 +946,7 @@ order:
precedence over earlier ones; directives not yet seen are ignored)
2. alias options, in the order they appear on the command line
##### end aliases
##### `end aliases`
You can clear (forget) all currently defined aliases with the
`end aliases` directive:
@ -805,53 +955,7 @@ You can clear (forget) all currently defined aliases with the
end aliases
```
#### account directive
The `account` directive predeclares account names. The simplest form is
`account ACCTNAME`, eg:
``` {.journal}
account assets:bank:checking
```
Currently this mainly helps with account name autocompletion in eg
hledger add, hledger-iadd, hledger-web, and ledger-mode.\
In future it will also help detect misspelled accounts.
Account names can be followed by a numeric account code:
``` {.journal}
account assets 1000
account assets:bank:checking 1110
account liabilities 2000
account revenues 4000
account expenses 6000
```
This affects account display order in reports: accounts with codes are
listed before accounts without codes, in increasing code order.
(Otherwise, accounts are listed alphabetically.) Account codes should be
all numeric digits, unique, and separated from the account name by at
least two spaces (since account names may contain single spaces). By
convention, often the first digit indicates the type of account, as in
[this numbering
scheme](http://www.dwmbeancounter.com/BCTutorSite/Courses/ChartAccounts/lesson02-6.html)
and the example above. In future, we might use this to recognize account
types.
An account directive can also have indented subdirectives following it,
which are currently ignored. Here is the full syntax:
``` {.journal}
; account ACCTNAME [OPTIONALCODE]
; [OPTIONALSUBDIRECTIVES]
account assets:bank:checking 1110
a comment
some-tag:12345
```
#### apply account directive
#### Default parent account
You can specify a parent account which will be prepended to all accounts
within a section of the journal. Use the `apply account` and
@ -889,106 +993,13 @@ include personal.journal
Prior to hledger 1.0, legacy `account` and `end` spellings were also
supported.
#### Multi-line comments
### Periodic transactions
A line containing just `comment` starts a multi-line comment, and a line
containing just `end comment` ends it. See [comments](#comments).
#### commodity directive
The `commodity` directive predefines commodities (currently this is just
informational), and also it may define the display format for amounts in
this commodity (overriding the automatically inferred format).
It may be written on a single line, like this:
``` {.journal}
; commodity EXAMPLEAMOUNT
; display AAAA amounts with the symbol on the right, space-separated,
; using period as decimal point, with four decimal places, and
; separating thousands with comma.
commodity 1,000.0000 AAAA
```
or on multiple lines, using the "format" subdirective. In this case the
commodity symbol appears twice and should be the same in both places:
``` {.journal}
; commodity SYMBOL
; format EXAMPLEAMOUNT
; display indian rupees with currency name on the left,
; thousands, lakhs and crores comma-separated,
; period as decimal point, and two decimal places.
commodity INR
format INR 9,99,99,999.00
```
#### Default commodity
The D directive sets a default commodity (and display format), to be
used for amounts without a commodity symbol (ie, plain numbers). (Note
this differs from Ledger's default commodity directive.) The commodity
and display format will be applied to all subsequent commodity-less
amounts, or until the next D directive.
``` {.journal}
# commodity-less amounts should be treated as dollars
# (and displayed with symbol on the left, thousands separators and two decimal places)
D $1,000.00
1/1
a 5 ; <- commodity-less amount, becomes $1
b
```
#### Default year
You can set a default year to be used for subsequent dates which don't
specify a year. This is a line beginning with `Y` followed by the year.
Eg:
``` {.journal}
Y2009 ; set default year to 2009
12/15 ; equivalent to 2009/12/15
expenses 1
assets
Y2010 ; change default year to 2010
2009/1/30 ; specifies the year, not affected
expenses 1
assets
1/31 ; equivalent to 2010/1/31
expenses 1
assets
```
#### Including other files
You can pull in the content of additional journal files by writing an
include directive, like this:
``` {.journal}
include path/to/file.journal
```
If the path does not begin with a slash, it is relative to the current
file. Glob patterns (`*`) are not currently supported.
The `include` directive can only be used in journal files. It can
include journal, timeclock or timedot files, but not CSV files.
## Periodic transactions
Periodic transactions are a kind of rule with a dual purpose: they can
specify recurring future transactions (with `--forecast`), or budget
goals (with `--budget`). They look a bit like a transaction, except the
Periodic transaction rules (enabled by `--forecast` or `--budget`)
describe recurring transactions. They look like a transaction where the
first line is a tilde (`~`) followed by a [period
expression](manual.html#period-expressions):
expression](manual.html#period-expressions) (mnemonic: `~` is like a
recurring sine wave):
``` {.journal}
~ weekly
@ -996,26 +1007,36 @@ expression](manual.html#period-expressions):
income:acme inc
```
With `--forecast`, each periodic transaction rule generates recurring
"forecast" transactions at the specified interval, beginning the day
after the latest recorded journal transaction (or today, if there are no
transactions) and ending 6 months from today (or at the report end date,
if specified).
Periodic transactions have a dual purpose:
With `balance --budget`, each periodic transaction declares recurring
budget goals for the specified accounts. Eg the example above declares
the goal of receiving \$400 from `income:acme inc` (and also, depositing
\$400 into `assets:bank:checking`) every week.
- With `--forecast`, each periodic transaction rule generates future
transactions, recurring at the specified interval, which can be seen
in reports. Forecast transactions begin the day after the latest
recorded journal transaction (or today, if there are no
transactions) and end 6 months from today (or at the report end
date, if specified).
For more details, see: [balance: Budgeting](manual.html#budgeting) and
[Budgeting and Forecasting](budgeting-and-forecasting.html).
- With `--budget` (supported by the balance command), each periodic
transaction rule declares recurring budget goals for the specified
accounts, which can be seen in [budget
reports](/manual.html#budget-report). Eg the example above declares
the goal of receiving \$400 from `income:acme inc` (and also,
depositing \$400 into `assets:bank:checking`) every week.
## Automated postings
(Actually, you can generate one-off transactions too, by writing a
period expression with no report interval.)
Automated postings are postings added automatically by rule to certain
transactions (with `--auto`). An automated posting rule looks like a
transaction where the first line is an equal sign (`=`) followed by a
[query](manual.html#queries):
For more details, see: [balance: Budget
report](manual.html#budget-report) and [Cookbook: Budgeting and
Forecasting](https://github.com/simonmichael/hledger/wiki/Budgeting-and-forecasting).
### Automated postings
Automated postings (enabled by `--auto`) are postings added
automatically by rule to certain transactions. An automated posting rule
looks like a transaction where the first line is an equal sign (`=`)
followed by a [query](manual.html#queries) (mnemonic: `=` tests for
matching transactions, and also looks like posting lines):
``` {.journal}
= expenses:gifts
@ -1028,8 +1049,9 @@ the matched transaction's first posting, multiplied by N". They can also
be ordinary fixed amounts. Fixed amounts with no commodity symbol will
be given the same commodity as the matched transaction's first posting.
This example adds a corresponding (unbalanced) budget posting to every
transaction involving the `expenses:gifts` account:
This example adds a corresponding ([unbalanced](#virtual-postings))
budget posting to every transaction involving the `expenses:gifts`
account:
``` {.journal}
= expenses:gifts
@ -1044,10 +1066,14 @@ transaction involving the `expenses:gifts` account:
$ hledger print --auto
2017/12/14
expenses:gifts $20
assets
(budget:gifts) $-20
assets
```
Like postings recorded by hand, automated postings participate in
[transaction balancing, missing amount inference](#postings) and
[balance assertions](#balance-assertions).
## EDITOR SUPPORT
Add-on modes exist for various text editors, to make working with

View File

@ -1,10 +1,8 @@
\$toc\$
## hledger
This doc is for version **1.9 (dev)**. []{.docversions}
This doc is for version **1.9.1**. []{.docversions}
### NAME
@ -708,7 +706,7 @@ in a number of places:
- [query terms](#queries), on the command line and in the hledger-web
search form: `REGEX`, `desc:REGEX`, `cur:REGEX`, `tag:...=REGEX`
- [CSV rules](#csv-rules) conditional blocks: `if REGEX ...`
- [account alias](#account-aliases) directives and options:
- [account alias](#rewriting-accounts) directives and options:
`alias /REGEX/ = REPLACEMENT`, `--alias /REGEX/=REPLACEMENT`
hledger's regular expressions come from the
@ -773,11 +771,9 @@ which:
The following kinds of search terms can be used. Remember these can also
be prefixed with **`not:`**, eg to exclude a particular subaccount.
**`REGEX`**
: match account names by this regular expression. (No prefix is
equivalent to `acct:`).
**`acct:REGEX`**
**`REGEX`, `acct:REGEX`**
: match account names by this regular expression. (With no prefix,
`acct:` is assumed.)
: same as above
**`amt:N, amt:<N, amt:<=N, amt:>N, amt:>=N`**
@ -1120,8 +1116,33 @@ Show accounts and their balances. Aliases: b, bal.
`--show-unbudgeted`
: with --budget, show unbudgeted accounts also
The balance command displays accounts and balances. It is hledger's most
featureful and versatile command.
The balance command is hledger's most versatile command. Note, despite
the name, it is not always used for showing real-world account balances;
the more accounting-aware [balancesheet](#balancesheet) and
[incomestatement](#incomestatement) may be more convenient for that.
By default, it displays all accounts, and each account's change in
balance during the entire period of the journal. Balance changes are
calculated by adding up the postings in each account. You can limit the
postings matched, by a [query](#queries), to see fewer accounts, changes
over a different time period, changes from only cleared transactions,
etc.
If you include an account's complete history of postings in the report,
the balance change is equivalent to the account's current ending
balance. For a real-world account, typically you won't have all
transactions in the journal; instead you'll have all transactions after
a certain date, and an "opening balances" transaction setting the
correct starting balance on that date. Then the balance command will
show real-world account balances. In some cases the -H/--historical flag
is used to ensure this (more below).
The balance command can produce several styles of report:
##### Classic balance report
This is the original balance report, as found in Ledger. It usually
looks like this:
``` {.shell}
$ hledger balance
@ -1139,19 +1160,14 @@ $ hledger balance
0
```
More precisely, the balance command shows the *change* to each account's
balance caused by all (matched) postings. In the common case where you
do not filter by date and your journal sets the correct opening
balances, this is the same as the account's ending balance.
By default, accounts are displayed hierarchically, with subaccounts
indented below their parent. At each level of the tree, accounts are
sorted by [account code](/manual.html#account-directive) if any, then by
account name. Or with `-S/--sort-amount`, by their balance amount.
sorted by [account code](/manual.html#declaring-accounts) if any, then
by account name. Or with `-S/--sort-amount`, by their balance amount.
"Boring" accounts, which contain a single interesting subaccount and no
balance of their own, are elided into the following line for more
compact output. (Not yet supported in tabular reports.) Use `--no-elide`
compact output. (Eg above, the "liabilities" account.) Use `--no-elide`
to prevent this.
Account balances are "inclusive" - they include the balances of any
@ -1161,7 +1177,7 @@ Accounts which have zero balance (and no non-zero subaccounts) are
omitted. Use `-E/--empty` to show them.
A final total is displayed by default; use `-N/--no-total` to suppress
it:
it, eg:
``` {.shell}
$ hledger balance -p 2008/6 expenses --no-total
@ -1170,13 +1186,80 @@ $ hledger balance -p 2008/6 expenses --no-total
$1 supplies
```
##### Customising the classic balance report
You can customise the layout of classic balance reports with
`--format FMT`:
``` {.shell}
$ hledger balance --format "%20(account) %12(total)"
assets $-1
bank:saving $1
cash $-2
expenses $2
food $1
supplies $1
income $-2
gifts $-1
salary $-1
liabilities:debts $1
---------------------------------
0
```
The FMT format string (plus a newline) specifies the formatting applied
to each account/balance pair. It may contain any suitable text, with
data fields interpolated like so:
`%[MIN][.MAX](FIELDNAME)`
- MIN pads with spaces to at least this width (optional)
- MAX truncates at this width (optional)
- FIELDNAME must be enclosed in parentheses, and can be one of:
- `depth_spacer` - a number of spaces equal to the account's
depth, or if MIN is specified, MIN \* depth spaces.
- `account` - the account's name
- `total` - the account's balance/posted total, right justified
Also, FMT can begin with an optional prefix to control how
multi-commodity amounts are rendered:
- `%_` - render on multiple lines, bottom-aligned (the default)
- `%^` - render on multiple lines, top-aligned
- `%,` - render on one line, comma-separated
There are some quirks. Eg in one-line mode, `%(depth_spacer)` has no
effect, instead `%(account)` has indentation built in. <!-- XXX retest:
Consistent column widths are not well enforced, causing ragged edges unless you set suitable widths.
Beware of specifying a maximum width; it will clip account names and amounts that are too wide, with no visible indication.
--> Experimentation may be needed to get pleasing results.
Some example formats:
- `%(total)` - the account's total
- `%-20.20(account)` - the account's name, left justified, padded to
20 characters and clipped at 20 characters
- `%,%-50(account) %25(total)` - account name padded to 50
characters, total padded to 20 characters, with multiple commodities
rendered on one line
- `%20(total) %2(depth_spacer)%-(account)` - the default format for
the single-column balance report
##### Colour support
The balance command shows negative amounts in red, if:
- the `TERM` environment variable is not set to `dumb`
- the output is not being redirected or piped anywhere
##### Flat mode
To see a flat list of full account names instead of the default
hierarchical display, use `--flat`. In this mode, accounts (unless
depth-clipped) show their "exclusive" balance, excluding any subaccount
balances. In this mode, you can also use `--drop N` to omit the first
few account name components.
To see a flat list instead of the default hierarchical display, use
`--flat`. In this mode, accounts (unless depth-clipped) show their full
names and "exclusive" balance, excluding any subaccount balances. In
this mode, you can also use `--drop N` to omit the first few account
name components.
``` {.shell}
$ hledger balance -p 2008/6 expenses -N --flat --drop 1
@ -1186,30 +1269,37 @@ $ hledger balance -p 2008/6 expenses -N --flat --drop 1
##### Depth limited balance reports
With `--depth N`, balance shows accounts only to the specified depth.
This is very useful to show a complex charts of accounts in less detail.
In flat mode, balances from accounts below the depth limit will be shown
as part of a parent account at the depth limit.
With `--depth N` or `depth:N` or just `-N`, balance reports show
accounts only to the specified numeric depth. This is very useful to
summarise a complex set of accounts and get an overview.
``` {.shell}
$ hledger balance -N --depth 1
$ hledger balance -N -1
$-1 assets
$2 expenses
$-2 income
$1 liabilities
```
<!-- $ for y in 2006 2007 2008 2009 2010; do echo; echo $y; hledger -f $y.journal balance ^expenses --depth 2; done -->
##### Multicolumn balance reports
Flat-mode balance reports, which normally show exclusive balances, show
inclusive balances at the depth limit.
With a [reporting interval](#reporting-interval), multiple balance
columns will be shown, one for each report period. There are three types
of multi-column balance report, showing different information:
<!-- $ for y in 2006 2007 2008 2009 2010; do echo; echo $y; hledger -f $y.journal balance ^expenses --depth 2; done -->
##### Multicolumn balance report
Multicolumn or tabular balance reports are a very useful hledger
feature, and usually the preferred style. They share many of the above
features, but they show the report as a table, with columns representing
time periods. This mode is activated by providing a [reporting
interval](#reporting-interval).
There are three types of multicolumn balance report, showing different
information:
1. By default: each column shows the sum of postings in that period, ie
the account's change of balance in that period. This is useful eg
for a monthly income statement: <!--
multi-column income statement:
multicolumn income statement:
$ hledger balance ^income ^expense -p 'monthly this year' --depth 3
@ -1270,8 +1360,8 @@ of multi-column balance report, showing different information:
|| 0 0 0
```
Multi-column balance reports display accounts in flat mode by default;
to see the hierarchy, use `--tree`.
Multicolumn balance reports display accounts in flat mode by default; to
see the hierarchy, use `--tree`.
With a reporting interval (like `--quarterly` above), the report
start/end dates will be adjusted if necessary so that they encompass the
@ -1312,14 +1402,23 @@ Balance changes in 2008:
# Average is rounded to the dollar here since all journal amounts are
```
##### Budgets
Limitations:
With `--budget` and a [report interval](manual.html#report-intervals),
all [periodic transactions](journal.html#periodic-transactions) in your
journal with that interval, active during the requested report period,
are interpreted as recurring budget goals for the specified accounts
(and subaccounts), and the report will show the difference between
actual and budgeted balances.
In multicolumn reports the [`-V/--value` flag](#market-value) uses the
market price on the report end date, for all columns (not the price on
each column's end date).
Eliding of boring parent accounts in tree mode, as in the classic
balance report, is not yet supported in multicolumn reports.
##### Budget report
With `--budget`, extra columns are displayed showing budget goals for
each account and period, if any. Budget goals are defined by [periodic
transactions](journal.html#periodic-transactions). This is very useful
for comparing planned and actual income, expenses, time usage, etc.
--budget is most often combined with a [report
interval](manual.html#report-intervals).
For example, you can take average monthly expenses in the common expense
categories to construct a minimal monthly budget:
@ -1350,141 +1449,59 @@ categories to construct a minimal monthly budget:
assets:bank:checking
```
You can now see a monthly budget performance report:
You can now see a monthly budget report:
``` {.shell}
$ hledger balance -M --budget
Balance changes in 2017/11/01-2017/12/31:
|| 2017/11 2017/12
=======================++=================================================
<unbudgeted>:expenses || $20 $100
assets:bank:checking || $-2445 [99% of $-2480] $-2665 [107% of $-2480]
expenses:bus || $49 [98% of $50] $53 [106% of $50]
expenses:food || $396 [99% of $400] $412 [103% of $400]
expenses:movies || $30 [100% of $30] 0 [0% of $30]
income || $1950 [98% of $2000] $2100 [105% of $2000]
-----------------------++-------------------------------------------------
|| 0 0
```
You can roll over unspent budgets to next period with `--cumulative`:
``` {.shell}
$ hledger balance -M --budget --cumulative
Ending balances (cumulative) in 2017/11/01-2017/12/31:
|| 2017/11/30 2017/12/31
=======================++=================================================
<unbudgeted>:expenses || $20 $120
assets:bank:checking || $-2445 [99% of $-2480] $-5110 [103% of $-4960]
expenses:bus || $49 [98% of $50] $102 [102% of $100]
expenses:food || $396 [99% of $400] $808 [101% of $800]
expenses:movies || $30 [100% of $30] $30 [50% of $60]
income || $1950 [98% of $2000] $4050 [101% of $4000]
-----------------------++-------------------------------------------------
|| 0 0
```
Accounts with no budget goals (not mentioned in the periodic
transactions) will be aggregated under `<unbudgeted>`, unless you add
the `--show-unbudgeted` flag to display them normally:
``` {.shell}
$ hledger balance --budget --show-unbudgeted
Balance changes in 2017/11/01-2017/12/31:
Budget performance in 2017/11/01-2017/12/31:
|| 2017/11 2017/12
======================++=================================================
<unbudgeted> || $20 $100
assets:bank:checking || $-2445 [99% of $-2480] $-2665 [107% of $-2480]
expenses:bus || $49 [98% of $50] $53 [106% of $50]
expenses:food || $396 [99% of $400] $412 [103% of $400]
expenses:gifts || 0 $100
expenses:movies || $30 [100% of $30] 0 [0% of $30]
expenses:supplies || $20 0
income || $1950 [98% of $2000] $2100 [105% of $2000]
----------------------++-------------------------------------------------
|| 0 0
```
Note --budget first arrived in hledger in 1.5 and is still pretty young;
join the discussions on mail list and issue tracker to help us refine
it.
By default, only accounts with budget goals during the report period are
shown. `--show-unbudgeted` shows unbudgeted accounts as well. Top-level
accounts with no budget goals anywhere below them are grouped under
`<unbudgeted>`.
You can roll over unspent budgets to next period with `--cumulative`:
``` {.shell}
$ hledger balance -M --budget --cumulative
Budget performance in 2017/11/01-2017/12/31:
|| 2017/11/30 2017/12/31
======================++=================================================
<unbudgeted> || $20 $120
assets:bank:checking || $-2445 [99% of $-2480] $-5110 [103% of $-4960]
expenses:bus || $49 [98% of $50] $102 [102% of $100]
expenses:food || $396 [99% of $400] $808 [101% of $800]
expenses:movies || $30 [100% of $30] $30 [50% of $60]
income || $1950 [98% of $2000] $4050 [101% of $4000]
----------------------++-------------------------------------------------
|| 0 0
```
Note, the `-S/--sort-amount` flag is not yet fully supported with
`--budget`.
For more examples, see [Budgeting and
Forecasting](https://github.com/simonmichael/hledger/wiki/Budgeting%20and%20forecasting).
##### Custom balance output
##### Output format
You can customise the layout of simple (non-tabular) balance reports
with `--format FMT`:
``` {.shell}
$ hledger balance --format "%20(account) %12(total)"
assets $-1
bank:saving $1
cash $-2
expenses $2
food $1
supplies $1
income $-2
gifts $-1
salary $-1
liabilities:debts $1
---------------------------------
0
```
The FMT format string (plus a newline) specifies the formatting applied
to each account/balance pair. It may contain any suitable text, with
data fields interpolated like so:
`%[MIN][.MAX](FIELDNAME)`
- MIN pads with spaces to at least this width (optional)
- MAX truncates at this width (optional)
- FIELDNAME must be enclosed in parentheses, and can be one of:
- `depth_spacer` - a number of spaces equal to the account's
depth, or if MIN is specified, MIN \* depth spaces.
- `account` - the account's name
- `total` - the account's balance/posted total, right justified
Also, FMT can begin with an optional prefix to control how
multi-commodity amounts are rendered:
- `%_` - render on multiple lines, bottom-aligned (the default)
- `%^` - render on multiple lines, top-aligned
- `%,` - render on one line, comma-separated
There are some quirks. Eg in one-line mode, `%(depth_spacer)` has no
effect, instead `%(account)` has indentation built in. <!-- XXX retest:
Consistent column widths are not well enforced, causing ragged edges unless you set suitable widths.
Beware of specifying a maximum width; it will clip account names and amounts that are too wide, with no visible indication.
--> Experimentation may be needed to get pleasing results.
Some example formats:
- `%(total)` - the account's total
- `%-20.20(account)` - the account's name, left justified, padded to
20 characters and clipped at 20 characters
- `%,%-50(account) %25(total)` - account name padded to 50
characters, total padded to 20 characters, with multiple commodities
rendered on one line
- `%20(total) %2(depth_spacer)%-(account)` - the default format for
the single-column balance report
This command also supports [output
The balance command supports [output
destination](/manual.html#output-destination) and [output
format](/manual.html#output-format) selection.
##### Colour support
The balance command shows negative amounts in red, if:
- the `TERM` environment variable is not set to `dumb`
- the output is not being redirected or piped anywhere
#### balancesheet
This command displays a simple balance sheet, showing historical ending
@ -2304,7 +2321,7 @@ In a Cygwin/MSYS/Mintty window, the tab key is not supported in hledger
add.
Not all of Ledger's journal file syntax is supported. See [file format
differences](faq#file-format-differences).
differences](https://github.com/simonmichael/hledger/wiki/FAQ#file-formats).
On large data files, hledger is slower and uses more memory than Ledger.
@ -2378,7 +2395,7 @@ accepts `fr_FR.UTF8`, mac osx requires exactly `fr_FR.UTF-8`).
## hledger-ui
This doc is for version **1.9 (dev)**. []{.docversions}
This doc is for version **1.9.1**. []{.docversions}
### NAME
@ -2787,7 +2804,7 @@ program is restarted.
## hledger-web
This doc is for version **1.9 (dev)**. []{.docversions}
This doc is for version **1.9.1**. []{.docversions}
### NAME
@ -3037,7 +3054,7 @@ Does not work well on small screens.
## hledger-api
This doc is for version **1.9 (dev)**. []{.docversions}
This doc is for version **1.9.1**. []{.docversions}
### NAME
@ -3139,7 +3156,7 @@ awkward.
## journal format
This doc is for version **1.9 (dev)**. []{.docversions}
This doc is for version **1.9.1**. []{.docversions}
### NAME
@ -3156,10 +3173,11 @@ a number of transaction entries, each describing a transfer of money (or
any commodity) between two or more named accounts, in a simple format
readable by both hledger and humans.
hledger's journal format is a compatible subset,
[mostly](faq.html#file-format-differences), of [ledger's journal
hledger's journal format is a compatible subset, mostly, of [ledger's
journal
format](http://ledger-cli.org/3.0/doc/ledger3.html#Journal-Format), so
hledger can work with [compatible](faq.html#file-format-differences)
hledger can work with
[compatible](https://github.com/simonmichael/hledger/wiki/FAQ#file-formats)
ledger journal files as well. It's safe, and encouraged, to run both
hledger and ledger on the same journal file, eg to validate the results
you're getting.
@ -3414,7 +3432,7 @@ Account names may contain single spaces, eg:
`assets:accounts receivable`. Because of this, they must always be
followed by **two or more spaces** (or newline).
Account names can be [aliased](#account-aliases).
Account names can be [aliased](#rewriting-accounts).
#### Amounts
@ -3476,8 +3494,8 @@ hledger displays amounts, it will choose a consistent format for each
commodity. (Except for [price amounts](#prices), which are always
formatted as written). The display format is chosen as follows:
- if there is a [commodity directive](#commodity-directive) specifying
the format, that is used
- if there is a [commodity directive](#declaring-commodities)
specifying the format, that is used
- otherwise the format is inferred from the first posting amount in
that commodity in the journal, and the precision (number of decimal
places) will be the maximum from all posting amounts in that
@ -3773,10 +3791,6 @@ star (`*`) are comments, and will be ignored. (Star comments cause
org-mode nodes to be ignored, allowing emacs users to fold and navigate
their journals with org-mode or orgstruct-mode.)
Also, anything between [`comment` and `end comment`
directives](#multi-line-comments) is a (multi-line) comment. If there is
no `end comment`, the comment extends to the end of the file.
You can attach comments to a transaction by writing them after the
description and/or indented on the following lines (before the
postings). Similarly, you can attach comments to an individual posting
@ -3806,6 +3820,9 @@ end comment
; a file comment (because not indented)
```
You can also comment larger regions of a file using [`comment` and
`end comment` directives](#comment-blocks).
#### Tags
Tags are a way to add extra labels or labelled data to postings and
@ -3858,7 +3875,156 @@ except hledger's tag values are simple strings.
#### Directives
##### Account aliases
##### Comment blocks
A line containing just `comment` starts a commented region of the file,
and a line containing just `end comment` (or the end of the current
file) ends it. See also [comments](#comments).
##### Including other files
You can pull in the content of additional files by writing an include
directive, like this:
``` {.journal}
include path/to/file.journal
```
If the path does not begin with a slash, it is relative to the current
file. Glob patterns (`*`) are not currently supported.
The `include` directive can only be used in journal files. It can
include journal, timeclock or timedot files, but not CSV files.
##### Default year
You can set a default year to be used for subsequent dates which don't
specify a year. This is a line beginning with `Y` followed by the year.
Eg:
``` {.journal}
Y2009 ; set default year to 2009
12/15 ; equivalent to 2009/12/15
expenses 1
assets
Y2010 ; change default year to 2010
2009/1/30 ; specifies the year, not affected
expenses 1
assets
1/31 ; equivalent to 2010/1/31
expenses 1
assets
```
##### Declaring commodities
The `commodity` directive declares commodities which may be used in the
journal (though currently we do not enforce this). It may be written on
a single line, like this:
``` {.journal}
; commodity EXAMPLEAMOUNT
; display AAAA amounts with the symbol on the right, space-separated,
; using period as decimal point, with four decimal places, and
; separating thousands with comma.
commodity 1,000.0000 AAAA
```
or on multiple lines, using the "format" subdirective. In this case the
commodity symbol appears twice and should be the same in both places:
``` {.journal}
; commodity SYMBOL
; format EXAMPLEAMOUNT
; display indian rupees with currency name on the left,
; thousands, lakhs and crores comma-separated,
; period as decimal point, and two decimal places.
commodity INR
format INR 9,99,99,999.00
```
Commodity directives have a second purpose: they define the standard
display format for amounts in the commodity. Normally the display format
is inferred from journal entries, but this can be unpredictable;
declaring it with a commodity directive overrides this and removes
ambiguity. Towards this end, amounts in commodity directives must always
be written with a decimal point (a period or comma, followed by 0 or
more decimal digits).
##### Default commodity
The D directive sets a default commodity (and display format), to be
used for amounts without a commodity symbol (ie, plain numbers). (Note
this differs from Ledger's default commodity directive.) The commodity
and display format will be applied to all subsequent commodity-less
amounts, or until the next D directive.
``` {.journal}
# commodity-less amounts should be treated as dollars
# (and displayed with symbol on the left, thousands separators and two decimal places)
D $1,000.00
1/1
a 5 ; <- commodity-less amount, becomes $1
b
```
As with the `commodity` directive, the amount must always be written
with a decimal point.
##### Declaring accounts
The `account` directive predeclares account names. The simplest form is
`account ACCTNAME`, eg:
``` {.journal}
account assets:bank:checking
```
Currently this mainly helps with account name autocompletion in eg
hledger add, hledger-iadd, hledger-web, and ledger-mode.\
In future it will also help detect misspelled accounts.
Account names can be followed by a numeric account code:
``` {.journal}
account assets 1000
account assets:bank:checking 1110
account liabilities 2000
account revenues 4000
account expenses 6000
```
This affects account display order in reports: accounts with codes are
listed before accounts without codes, in increasing code order.
(Otherwise, accounts are listed alphabetically.) Account codes should be
all numeric digits, unique, and separated from the account name by at
least two spaces (since account names may contain single spaces). By
convention, often the first digit indicates the type of account, as in
[this numbering
scheme](http://www.dwmbeancounter.com/BCTutorSite/Courses/ChartAccounts/lesson02-6.html)
and the example above. In future, we might use this to recognize account
types.
An account directive can also have indented subdirectives following it,
which are currently ignored. Here is the full syntax:
``` {.journal}
; account ACCTNAME [OPTIONALCODE]
; [OPTIONALSUBDIRECTIVES]
account assets:bank:checking 1110
a comment
some-tag:12345
```
##### Rewriting accounts
You can define aliases which rewrite your account names (after reading
the journal, before generating reports). hledger's account aliases can
@ -3871,7 +4037,8 @@ be useful for:
or combining two accounts into one
- customising reports
See also [Cookbook: rewrite account names](account-aliases.html).
See also [Cookbook: Rewrite account
names](https://github.com/simonmichael/hledger/wiki/Rewrite-account-names).
###### Basic aliases
@ -3933,7 +4100,7 @@ order:
precedence over earlier ones; directives not yet seen are ignored)
2. alias options, in the order they appear on the command line
###### end aliases
###### `end aliases`
You can clear (forget) all currently defined aliases with the
`end aliases` directive:
@ -3942,53 +4109,7 @@ You can clear (forget) all currently defined aliases with the
end aliases
```
##### account directive
The `account` directive predeclares account names. The simplest form is
`account ACCTNAME`, eg:
``` {.journal}
account assets:bank:checking
```
Currently this mainly helps with account name autocompletion in eg
hledger add, hledger-iadd, hledger-web, and ledger-mode.\
In future it will also help detect misspelled accounts.
Account names can be followed by a numeric account code:
``` {.journal}
account assets 1000
account assets:bank:checking 1110
account liabilities 2000
account revenues 4000
account expenses 6000
```
This affects account display order in reports: accounts with codes are
listed before accounts without codes, in increasing code order.
(Otherwise, accounts are listed alphabetically.) Account codes should be
all numeric digits, unique, and separated from the account name by at
least two spaces (since account names may contain single spaces). By
convention, often the first digit indicates the type of account, as in
[this numbering
scheme](http://www.dwmbeancounter.com/BCTutorSite/Courses/ChartAccounts/lesson02-6.html)
and the example above. In future, we might use this to recognize account
types.
An account directive can also have indented subdirectives following it,
which are currently ignored. Here is the full syntax:
``` {.journal}
; account ACCTNAME [OPTIONALCODE]
; [OPTIONALSUBDIRECTIVES]
account assets:bank:checking 1110
a comment
some-tag:12345
```
##### apply account directive
##### Default parent account
You can specify a parent account which will be prepended to all accounts
within a section of the journal. Use the `apply account` and
@ -4026,106 +4147,13 @@ include personal.journal
Prior to hledger 1.0, legacy `account` and `end` spellings were also
supported.
##### Multi-line comments
#### Periodic transactions
A line containing just `comment` starts a multi-line comment, and a line
containing just `end comment` ends it. See [comments](#comments).
##### commodity directive
The `commodity` directive predefines commodities (currently this is just
informational), and also it may define the display format for amounts in
this commodity (overriding the automatically inferred format).
It may be written on a single line, like this:
``` {.journal}
; commodity EXAMPLEAMOUNT
; display AAAA amounts with the symbol on the right, space-separated,
; using period as decimal point, with four decimal places, and
; separating thousands with comma.
commodity 1,000.0000 AAAA
```
or on multiple lines, using the "format" subdirective. In this case the
commodity symbol appears twice and should be the same in both places:
``` {.journal}
; commodity SYMBOL
; format EXAMPLEAMOUNT
; display indian rupees with currency name on the left,
; thousands, lakhs and crores comma-separated,
; period as decimal point, and two decimal places.
commodity INR
format INR 9,99,99,999.00
```
##### Default commodity
The D directive sets a default commodity (and display format), to be
used for amounts without a commodity symbol (ie, plain numbers). (Note
this differs from Ledger's default commodity directive.) The commodity
and display format will be applied to all subsequent commodity-less
amounts, or until the next D directive.
``` {.journal}
# commodity-less amounts should be treated as dollars
# (and displayed with symbol on the left, thousands separators and two decimal places)
D $1,000.00
1/1
a 5 ; <- commodity-less amount, becomes $1
b
```
##### Default year
You can set a default year to be used for subsequent dates which don't
specify a year. This is a line beginning with `Y` followed by the year.
Eg:
``` {.journal}
Y2009 ; set default year to 2009
12/15 ; equivalent to 2009/12/15
expenses 1
assets
Y2010 ; change default year to 2010
2009/1/30 ; specifies the year, not affected
expenses 1
assets
1/31 ; equivalent to 2010/1/31
expenses 1
assets
```
##### Including other files
You can pull in the content of additional journal files by writing an
include directive, like this:
``` {.journal}
include path/to/file.journal
```
If the path does not begin with a slash, it is relative to the current
file. Glob patterns (`*`) are not currently supported.
The `include` directive can only be used in journal files. It can
include journal, timeclock or timedot files, but not CSV files.
### Periodic transactions
Periodic transactions are a kind of rule with a dual purpose: they can
specify recurring future transactions (with `--forecast`), or budget
goals (with `--budget`). They look a bit like a transaction, except the
Periodic transaction rules (enabled by `--forecast` or `--budget`)
describe recurring transactions. They look like a transaction where the
first line is a tilde (`~`) followed by a [period
expression](manual.html#period-expressions):
expression](manual.html#period-expressions) (mnemonic: `~` is like a
recurring sine wave):
``` {.journal}
~ weekly
@ -4133,26 +4161,36 @@ expression](manual.html#period-expressions):
income:acme inc
```
With `--forecast`, each periodic transaction rule generates recurring
"forecast" transactions at the specified interval, beginning the day
after the latest recorded journal transaction (or today, if there are no
transactions) and ending 6 months from today (or at the report end date,
if specified).
Periodic transactions have a dual purpose:
With `balance --budget`, each periodic transaction declares recurring
budget goals for the specified accounts. Eg the example above declares
the goal of receiving \$400 from `income:acme inc` (and also, depositing
\$400 into `assets:bank:checking`) every week.
- With `--forecast`, each periodic transaction rule generates future
transactions, recurring at the specified interval, which can be seen
in reports. Forecast transactions begin the day after the latest
recorded journal transaction (or today, if there are no
transactions) and end 6 months from today (or at the report end
date, if specified).
For more details, see: [balance: Budgeting](manual.html#budgeting) and
[Budgeting and Forecasting](budgeting-and-forecasting.html).
- With `--budget` (supported by the balance command), each periodic
transaction rule declares recurring budget goals for the specified
accounts, which can be seen in [budget
reports](/manual.html#budget-report). Eg the example above declares
the goal of receiving \$400 from `income:acme inc` (and also,
depositing \$400 into `assets:bank:checking`) every week.
### Automated postings
(Actually, you can generate one-off transactions too, by writing a
period expression with no report interval.)
Automated postings are postings added automatically by rule to certain
transactions (with `--auto`). An automated posting rule looks like a
transaction where the first line is an equal sign (`=`) followed by a
[query](manual.html#queries):
For more details, see: [balance: Budget
report](manual.html#budget-report) and [Cookbook: Budgeting and
Forecasting](https://github.com/simonmichael/hledger/wiki/Budgeting-and-forecasting).
#### Automated postings
Automated postings (enabled by `--auto`) are postings added
automatically by rule to certain transactions. An automated posting rule
looks like a transaction where the first line is an equal sign (`=`)
followed by a [query](manual.html#queries) (mnemonic: `=` tests for
matching transactions, and also looks like posting lines):
``` {.journal}
= expenses:gifts
@ -4165,8 +4203,9 @@ the matched transaction's first posting, multiplied by N". They can also
be ordinary fixed amounts. Fixed amounts with no commodity symbol will
be given the same commodity as the matched transaction's first posting.
This example adds a corresponding (unbalanced) budget posting to every
transaction involving the `expenses:gifts` account:
This example adds a corresponding ([unbalanced](#virtual-postings))
budget posting to every transaction involving the `expenses:gifts`
account:
``` {.journal}
= expenses:gifts
@ -4181,10 +4220,14 @@ transaction involving the `expenses:gifts` account:
$ hledger print --auto
2017/12/14
expenses:gifts $20
assets
(budget:gifts) $-20
assets
```
Like postings recorded by hand, automated postings participate in
[transaction balancing, missing amount inference](#postings) and
[balance assertions](#balance-assertions).
### EDITOR SUPPORT
Add-on modes exist for various text editors, to make working with
@ -4225,7 +4268,7 @@ https://twitter.com/LedgerTips/status/501767602067472384
## csv format
This doc is for version **1.9 (dev)**. []{.docversions}
This doc is for version **1.9.1**. []{.docversions}
### NAME
@ -4498,7 +4541,7 @@ rules file will be used for all the CSV files being read.
## timeclock format
This doc is for version **1.9 (dev)**. []{.docversions}
This doc is for version **1.9.1**. []{.docversions}
### NAME
@ -4567,7 +4610,7 @@ To generate time logs, ie to clock in and clock out, you could:
## timedot format
This doc is for version **1.9 (dev)**. []{.docversions}
This doc is for version **1.9.1**. []{.docversions}
### NAME
@ -4661,7 +4704,7 @@ Balance changes in 2016/02/01-2016/02/03:
```
I prefer to use period for separating account components. We can make
this work with an [account alias](/journal.html#account-aliases):
this work with an [account alias](/journal.html#rewriting-accounts):
``` {.timedot}
2016/2/4

View File

@ -1,6 +1,6 @@
# timeclock format
This doc is for version **1.9 (dev)**. []{.docversions}
This doc is for version **1.9.1**. []{.docversions}
\$toc\$

View File

@ -1,6 +1,6 @@
# timedot format
This doc is for version **1.9 (dev)**. []{.docversions}
This doc is for version **1.9.1**. []{.docversions}
\$toc\$
@ -96,7 +96,7 @@ Balance changes in 2016/02/01-2016/02/03:
```
I prefer to use period for separating account components. We can make
this work with an [account alias](/journal.html#account-aliases):
this work with an [account alias](/journal.html#rewriting-accounts):
``` {.timedot}
2016/2/4