Thank you very much for your answers. In the end I took your advice and defined metadata on the account's Open directive:
2017-03-01 open *Assets:Credits:CLIENT* name: "Client's Company Name" address: "1234 somewhere, someplace 0000 USA" e-mail: "[email protected]" And accessed the metadata in Python directly: #!/usr/bin/env python3 from beancount.core import data import re def get_open_meta(entries, acct_regex): """ Return a dictionary formed from combining the metadata dictionaries of all 'Open' statements for accounts matching 'acct_regex'. Will return an empty dicionary if no accounts matched. Done this say so that metadata from multiple related accounts can be gathered into one set, which can then be queried. """ meta = {} for ent in entries: if type(ent) == data.Open and re.match(acct_regex, ent.account): meta.update(ent.meta) return meta # MAIN if __name__ == "__main__" : from beancount import loader entries, errors, options = loader.load_file("somefile.beancount") meta = get_open_meta(entries, '.*CLIENT') #client metadata print(""" {0} {1} {2}""".format(meta['name'], #will error if 'name' not defined ' \n'.join(meta['address'].split('; ')), #allows multiple lines as 'line1; line2' meta.get('e-mail')) #doesn't barf if e-mail isn't specified ) On Wednesday, April 26, 2017 at 5:07:14 PM UTC+2, [email protected] wrote: > > Hello All, > > Is there a way to query directives which are not transactions? > Currently I'm seeing this: > > beancount> select * where type != "transaction" > > (empty) > > beancount> > > > > The problem I'm trying to solve is invoice generation: want to store > client-specific metadata (e.g.: address) in the ledger somewhere; then > query them and have the results be the various fields of the generated > invoice. > > An example might be: > > 2017-03-01 note *Assets:Credits:CLIENT* "Via Lungolago 13, > CH-6900 Lugano" #address > > And an example query might be: > > SELECT last(narration) FROM (type = "note") AND ("address" in tags) WHERE > account = "*Assets:Credits:CLIENT*" > ... assuming that a note's text field is referred to as "narration". > > This would have the advantage of being able to declare new addresses if > the client moves. > The #address tag is so that other notes may exist without breaking this > query. > > > > I'm not sure if this is the way this problem should be solved, maybe a > different approach is best? > > Thank you very much, > > Sirio > -- You received this message because you are subscribed to the Google Groups "Beancount" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/fd6fd747-fc78-48f1-a86e-5e282a8676d2%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
