doc, cli: improvements for -B, -V, prices docs #403
This commit is contained in:
		
							parent
							
								
									a5992c38a8
								
							
						
					
					
						commit
						701fb5496f
					
				
							
								
								
									
										10
									
								
								doc/lib.m4
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								doc/lib.m4
									
									
									
									
									
								
							| @ -140,11 +140,15 @@ m4_define({{_reportingoptions_}}, {{ | |||||||
| : show items with zero amount, normally hidden | : show items with zero amount, normally hidden | ||||||
| 
 | 
 | ||||||
| `-B --cost` | `-B --cost` | ||||||
| : show amounts in their cost price's commodity | : convert amounts to their cost at transaction time | ||||||
|  | (using the [transaction price](journal.html#transaction-prices), if any) | ||||||
| 
 | 
 | ||||||
| `--pivot TAG` | `--pivot TAG` | ||||||
| : will transform the journal before any other processing by replacing the account name of every posting having the tag TAG with content VALUE by the  account name "TAG:VALUE". | : will transform the journal before any other processing by replacing | ||||||
| : The TAG will only match if it is a full-length match. The pivot will only happen if the TAG is on a posting, not if it is on the transaction. If the tag value is a multi:level:account:name the new account name will be "TAG:multi:level:account:name". | the account name of every posting having the tag TAG with content VALUE | ||||||
|  | by the  account name "TAG:VALUE". The TAG will only match if it is a full-length match. | ||||||
|  | The pivot will only happen if the TAG is on a posting, not if it is on the transaction. | ||||||
|  | If the tag value is a multi:level:account:name the new account name will be "TAG:multi:level:account:name". | ||||||
| 
 | 
 | ||||||
| `--anon` | `--anon` | ||||||
| : show anonymized accounts and payees | : show anonymized accounts and payees | ||||||
|  | |||||||
| @ -373,15 +373,23 @@ instead of just reading it. | |||||||
| 
 | 
 | ||||||
| ### Transaction prices | ### Transaction prices | ||||||
| 
 | 
 | ||||||
| When recording a transaction, you can also record an amount's price in another commodity. | Within a transaction posting, you can record an amount's price in another commodity. | ||||||
| This documents the exchange rate, cost (of a purchase), or selling price (of a sale) that was in effect within this particular transaction (or more precisely, within the particular posting). | This can be used to document the cost (for a purchase), or selling price (for a sale), | ||||||
| These transaction prices are fixed, and do not change. | or the exchange rate that was used, for this transaction. | ||||||
|  | These transaction prices are fixed, and do not change over time. | ||||||
|  | <!-- | ||||||
|  | This is different from Ledger, where transaction prices fluctuate by | ||||||
|  | default.  Ledger has a different syntax for specifying | ||||||
|  | [fixed prices](http://ledger-cli.org/3.0/doc/ledger3.html#Fixing-Lot-Prices): | ||||||
|  | `{=PRICE}`.  hledger parses that syntax, and (currently) ignores it. | ||||||
|  | --> | ||||||
|  | <!-- hledger treats this as an alternate spelling of `@ PRICE`, for greater compatibility with Ledger files. --> | ||||||
| 
 | 
 | ||||||
| Such priced amounts can be displayed in their transaction price's | Amounts with transaction prices can be displayed in the transaction price's | ||||||
| commodity, by using the `--cost/-B` flag (B for "cost Basis"), | commodity, by using the [`--cost/-B`](hledger.html#reporting-options) flag | ||||||
| supported by most hledger commands. | supported by most hledger commands (mnemonic: "cost Basis"). | ||||||
| 
 | 
 | ||||||
| There are three ways to specify a transaction price: | There are several ways to record a transaction price: | ||||||
| 
 | 
 | ||||||
| 1. Write the unit price (aka exchange rate), as `@ UNITPRICE` after the amount: | 1. Write the unit price (aka exchange rate), as `@ UNITPRICE` after the amount: | ||||||
| 
 | 
 | ||||||
| @ -423,37 +431,30 @@ rate of purchases made in a foreign currency. | |||||||
| 
 | 
 | ||||||
| ### Market prices | ### Market prices | ||||||
| 
 | 
 | ||||||
| Market prices are not tied to a particular transaction; they represent | Market prices are not tied to a particular transaction; they represent historical exchange rates between two commodities. | ||||||
| historical exchange rates between two commodities. For example, the prices  | (Ledger calls them historical prices.) | ||||||
| published by a [stock exchange](https://en.wikipedia.org/wiki/Stock_exchange) | For example, the prices published by a [stock exchange](https://en.wikipedia.org/wiki/Stock_exchange) | ||||||
| or the [foreign exchange market](https://en.wikipedia.org/wiki/Foreign_exchange_market). | or the [foreign exchange market](https://en.wikipedia.org/wiki/Foreign_exchange_market). | ||||||
|  | Some commands ([balance](hledger.html#market-value), currently) can use this information to show the market value of things at a given date. | ||||||
| 
 | 
 | ||||||
| When market prices are known and in effect at the  | To record market prices, use P directives in the main journal or | ||||||
| [report end date](hledger.html#report-start-end-date) (see hledger -> Report start & end date),  | in an [included](#including-other-files) file. Their format is: | ||||||
| the balance command's `-V/--value` option will show balances as their market value on that date.  |  | ||||||
| (This option is currently available only with the [balance](#balance) command.) |  | ||||||
| 
 |  | ||||||
| To record market prices (Ledger calls them historical prices), use P directives,  |  | ||||||
| in the journal or an [included](#including-other-files) file. Their format is: |  | ||||||
| ```journal | ```journal | ||||||
| P DATE COMMODITYSYMBOL UNITPRICE | P DATE COMMODITYBEINGPRICED UNITPRICE | ||||||
| ``` | ``` | ||||||
| <!-- (A time and numeric time zone are allowed but ignored, like ledger.) --> | <!-- (A time and numeric time zone are allowed but ignored, like ledger.) --> | ||||||
|  | DATE is a [simple date](#simple-dates) as usual. | ||||||
|  | COMMODITYBEINGPRICED is the symbol of the commodity being priced (just the symbol, no quantity). | ||||||
|  | UNITPRICE is an ordinary [amount](#amounts) (symbol and quantity) in a second commodity, | ||||||
|  | specifying the unit price or conversion rate for the first commodity in terms of the second, on the given date. | ||||||
| 
 | 
 | ||||||
| For example, the following directives say that the euro's exchange rate was 1.35 US dollars during 2009, and $1.40 from 2010 onward (and unknown before 2009). | For example, the following directives say that one euro was worth 1.35 US dollars during 2009,  | ||||||
|  | and $1.40 from 2010 onward: | ||||||
| ```journal | ```journal | ||||||
| P 2009/1/1 € $1.35 | P 2009/1/1 € $1.35 | ||||||
| P 2010/1/1 € $1.40 | P 2010/1/1 € $1.40 | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| <!-- |  | ||||||
| This is different from Ledger, where transaction prices fluctuate by |  | ||||||
| default.  Ledger has a different syntax for specifying |  | ||||||
| [fixed prices](http://ledger-cli.org/3.0/doc/ledger3.html#Fixing-Lot-Prices): |  | ||||||
| `{=PRICE}`.  hledger parses that syntax, and (currently) ignores it. |  | ||||||
| --> |  | ||||||
| <!-- hledger treats this as an alternate spelling of `@ PRICE`, for greater compatibility with Ledger files. --> |  | ||||||
| 
 |  | ||||||
| ## Comments | ## Comments | ||||||
| 
 | 
 | ||||||
| Lines in the journal beginning with a semicolon (`;`) or hash (`#`) or | Lines in the journal beginning with a semicolon (`;`) or hash (`#`) or | ||||||
|  | |||||||
| @ -275,7 +275,7 @@ balancemode = (defCommandMode $ ["balance"] ++ aliases) { -- also accept but don | |||||||
|         "show historical ending balance in each period (includes postings before report start date)\n " |         "show historical ending balance in each period (includes postings before report start date)\n " | ||||||
|      ,flagNone ["tree"] (\opts -> setboolopt "tree" opts) "show accounts as a tree; amounts include subaccounts (default in simple reports)" |      ,flagNone ["tree"] (\opts -> setboolopt "tree" opts) "show accounts as a tree; amounts include subaccounts (default in simple reports)" | ||||||
|      ,flagNone ["flat"] (\opts -> setboolopt "flat" opts) "show accounts as a list; amounts exclude subaccounts except when account is depth-clipped (default in multicolumn reports)\n " |      ,flagNone ["flat"] (\opts -> setboolopt "flat" opts) "show accounts as a list; amounts exclude subaccounts except when account is depth-clipped (default in multicolumn reports)\n " | ||||||
|      ,flagNone ["value","V"] (setboolopt "value") "convert amounts to current market value in their default valuation commodity" |      ,flagNone ["value","V"] (setboolopt "value") "convert amounts to their market value on the report end date (using the most recent applicable market price, if any)" | ||||||
|      ,flagNone ["average","A"] (\opts -> setboolopt "average" opts) "show a row average column (in multicolumn reports)" |      ,flagNone ["average","A"] (\opts -> setboolopt "average" opts) "show a row average column (in multicolumn reports)" | ||||||
|      ,flagNone ["row-total","T"] (\opts -> setboolopt "row-total" opts) "show a row total column (in multicolumn reports)" |      ,flagNone ["row-total","T"] (\opts -> setboolopt "row-total" opts) "show a row total column (in multicolumn reports)" | ||||||
|      ,flagNone ["no-total","N"] (\opts -> setboolopt "no-total" opts) "omit the final total row" |      ,flagNone ["no-total","N"] (\opts -> setboolopt "no-total" opts) "omit the final total row" | ||||||
|  | |||||||
| @ -142,7 +142,7 @@ reportflags = [ | |||||||
|  ,flagNone ["real","R"]      (setboolopt "real") "include only non-virtual postings" |  ,flagNone ["real","R"]      (setboolopt "real") "include only non-virtual postings" | ||||||
|  ,flagReq  ["depth"]         (\s opts -> Right $ setopt "depth" s opts) "N" "hide accounts/postings deeper than N" |  ,flagReq  ["depth"]         (\s opts -> Right $ setopt "depth" s opts) "N" "hide accounts/postings deeper than N" | ||||||
|  ,flagNone ["empty","E"]     (setboolopt "empty") "show items with zero amount, normally hidden" |  ,flagNone ["empty","E"]     (setboolopt "empty") "show items with zero amount, normally hidden" | ||||||
|  ,flagNone ["cost","B"]      (setboolopt "cost") "show amounts in their cost price's commodity" |  ,flagNone ["cost","B"]      (setboolopt "cost") "convert amounts to their cost at transaction time (using the transaction price, if any)" | ||||||
|  ,flagNone ["anon"]              (setboolopt "anon") "output ledger with anonymized accounts and payees." |  ,flagNone ["anon"]              (setboolopt "anon") "output ledger with anonymized accounts and payees." | ||||||
|  ] |  ] | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -17,7 +17,8 @@ Show accounts and their balances. Alias: bal. | |||||||
| : show accounts as a list; amounts exclude subaccounts except when account is depth-clipped (default in multicolumn reports) | : show accounts as a list; amounts exclude subaccounts except when account is depth-clipped (default in multicolumn reports) | ||||||
| 
 | 
 | ||||||
| `-V --value` | `-V --value` | ||||||
| : convert amounts to current market value in their default valuation commodity | : convert amounts to their market value on the report end date | ||||||
|  | (using the most recent applicable [market price](journal.html#market-prices), if any) | ||||||
| 
 | 
 | ||||||
| `-A --average` | `-A --average` | ||||||
| : show a row average column (in multicolumn mode) | : show a row average column (in multicolumn mode) | ||||||
| @ -235,15 +236,50 @@ Balance changes in 2008: | |||||||
| 
 | 
 | ||||||
| ### Market value | ### Market value | ||||||
| 
 | 
 | ||||||
| The `-V/--value` flag converts all the reported amounts to their | The `-V/--value` flag converts the reported amounts to their market value | ||||||
| "current market value" using their default market price. That is the | on the report end date, using the most recent applicable market prices, | ||||||
| latest [market price](#market-prices) (P directive) found in the | when known. | ||||||
| journal (or an included file), for the amount's commodity, dated on or | Specifically, when there is a [market price](journal.html#market-prices) (P directive) | ||||||
| before the report end date. | for the amount's commodity, dated on or before the | ||||||
|      | [report end date](hledger.html#report-start-end-date) (see hledger -> Report start & end date),  | ||||||
| Unlike Ledger, hledger's -V only uses the market prices recorded with | the amount will be converted to the price's commodity. | ||||||
| P directives, ignoring transaction prices recorded as part of posting | If multiple applicable prices are defined, the latest-dated one is used | ||||||
| amounts (which -B/--cost uses). Using -B and -V together is allowed. | (and if dates are equal, the one last parsed). | ||||||
|  | 
 | ||||||
|  | For example: | ||||||
|  | 
 | ||||||
|  | ```journal | ||||||
|  | # one euro is worth this many dollars from nov 1 | ||||||
|  | P 2016/11/01 € $1.10 | ||||||
|  | 
 | ||||||
|  | # purchase some euros on nov 3 | ||||||
|  | 2016/11/3 | ||||||
|  |     assets:euros        €100 | ||||||
|  |     assets:checking | ||||||
|  | 
 | ||||||
|  | # the euro is worth fewer dollars by dec 21 | ||||||
|  | P 2016/12/21 € $1.03 | ||||||
|  | ``` | ||||||
|  | How many euros do I have ? | ||||||
|  | ``` | ||||||
|  | $ hledger -f t.j bal euros | ||||||
|  |                 €100  assets:euros | ||||||
|  | ``` | ||||||
|  | What are they worth on nov 3 ? (no report end date specified, defaults to the last date in the journal) | ||||||
|  | ``` | ||||||
|  | $ hledger -f t.j bal euros -V | ||||||
|  |              $110.00  assets:euros | ||||||
|  | ``` | ||||||
|  | What are they worth on dec 21 ? | ||||||
|  | ``` | ||||||
|  | $ hledger -f t.j bal euros -V -e 2016/12/21 | ||||||
|  |              $103.00  assets:euros | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Currently, hledger's -V only uses market prices recorded with P directives, | ||||||
|  | not [transaction prices](journal.html#transaction-prices) (unlike Ledger). | ||||||
|  | 
 | ||||||
|  | Using -B and -V together is allowed. | ||||||
| 
 | 
 | ||||||
| ### Custom balance output | ### Custom balance output | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -130,7 +130,7 @@ and can have less-significant date parts omitted (defaulting to 1). | |||||||
| 
 | 
 | ||||||
| Examples: | Examples: | ||||||
| 
 | 
 | ||||||
| ------------------------------------------------- ------------------------------------------------------ | ------------------------------------------------- ----------------------------------------------------------------------------- | ||||||
| `2009/1/1`, `2009/01/01`, `2009-1-1`, `2009.1.1`  simple dates, several separators allowed | `2009/1/1`, `2009/01/01`, `2009-1-1`, `2009.1.1`  simple dates, several separators allowed | ||||||
| `2009/1`, `2009`                                  same as above - a missing day or month defaults to 1 | `2009/1`, `2009`                                  same as above - a missing day or month defaults to 1 | ||||||
| `1/1`, `january`, `jan`, `this year`              relative dates, meaning january 1 of the current year | `1/1`, `january`, `jan`, `this year`              relative dates, meaning january 1 of the current year | ||||||
| @ -159,7 +159,7 @@ so you need to write the date *after* the last day you want to include. | |||||||
| 
 | 
 | ||||||
| Examples: | Examples: | ||||||
| 
 | 
 | ||||||
| -----------------------------------  ------------------------------------------------------ | -----------------------------------  ------------------------------------------------------------------------------------------- | ||||||
| `-b 2016/3/17`                       begin on St. Patrick's day 2016 | `-b 2016/3/17`                       begin on St. Patrick's day 2016 | ||||||
| `-e 12/1`                            end at the start of december 1st of the current year (11/30 will be the last date included) | `-e 12/1`                            end at the start of december 1st of the current year (11/30 will be the last date included) | ||||||
| `-b thismonth`                       all transactions on or after the 1st of the current month | `-b thismonth`                       all transactions on or after the 1st of the current month | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user