[GNC] Adding Transactions From Another Program

David H hellvee at gmail.com
Tue Apr 28 17:58:54 EDT 2020


Have you checked out the GnuCash Python Bindings -
https://code.gnucash.org/docs/MAINT/python_bindings_page.html - no point in
re-inventing the wheel :-)

Cheers David H.

What can Python Bindings be used for ?

The python bindings supply the ability to access a wide range of the core
functions of GnuCash. You can read and write Transactions, Commodities,
Lots, access the business stuff... You gain the ability to manipulate your
financial data with a flexible scripting language.

Not everything GnuCash can is possible to access though. The bindings focus
on basic accounting functions. Have a look at the examples to get an
impression.

Some functions are broken because they have not been wrapped properly. They
may crash the program or return unaccessible values. Please file a bug
report if you find one to help support the development process.

On Wed, 29 Apr 2020 at 07:44, Stu Perlman <sgperlman at gmail.com> wrote:

> Hal,
>
> I'm sort of doing a liter version of what you are describing. I do
> manipulate some GC data from outside of GC.  I have GC setup with the MySQL
> backend and while I don't create any new transactions from outside of GC I
> do manipulate them. I have some SQL routines that I created to clean up
> data points such as the Memo & Notes attributes that are part of each
> transaction. I have not run into any problems or data corruption after a
> few months of doing this.  I did put a circuit breaker into my bolt-on app
> that at startup the 1st thing it does it check the GC lock record and if it
> detects that GC may still be running it will not allow my SQL routines to
> do anything.
>
> INSERTING new transaction records using SQL on the surface appears like it
> should be simple enough but I would proceed with extreme caution and a lot
> of testing as you go.  I did not try creating any new transactions but I
> did try to create my own little routine  (and then abandoned the effort)
> to let me set monthly budget amounts. *The reasons for that attempt are not
> important to this thread but the outcome may be*.
>
> I gave up after spending time creating the logic that I needed to insert
> into and/or change records in the SQL table [budget_amounts].  Everything I
> tested always looked perfect in the SQL backend until I went to work with
> that data in GC.  It was like I did not change anything behind the scenes
> once I opened up GC again.  I would go back to the SQL world and would
> sometimes notice that my changes to [budget_amounts] were either being a)
> ignored, b) wiped out or c) some other corruption.  Through trial and
> error, I discovered that the SQL table [slots] (and it's various
> pseudo-tables) also maintains budget amount data and that said data in
> [slots] will persist when GC is restarted after my changes from SQL were
> executed.  It was then that I decided that the amount of effort that I
> would spend reverse engineering the logic that GC is using with the [slots]
> table was never going to be worth the reward nor the risk.
>
> I don't know for a fact that for your particular use case that writing to
> [slots] will even be required because I never dug into the transactions
> that deeply.  Maybe [transactions] and [splits] are isolated from the
> apparently superior related data that GC maintains in [slots].  If you
> happen to know the languages that the GC engine is written in you might be
> able to get the answer with a little bit of code review instead of the time
> consumed doing a bunch of testing, observing, and evaluating.
>
> Good luck!  I'd love to know how it goes for you if you end up pursuing
> this idea.
>
> - Stu
>
>
>
> On Tue, Apr 28, 2020 at 3:15 PM Hal Vaughan <hal at hal.dance> wrote:
>
> > I’ve done some research on this issue and I’m trying to determine if it’s
> > worth doing more or if I’d just spend time on this topic and find it
> won’t
> > work.
> >
> > I have a situation I’ve been told GnuCash can’t handle, but I have a
> > Python library that can handle it.  (It has to do with calculating
> interest
> > on a credit line with a variable balance.)
> >
> > Years ago, I remember checking into GnuCash and reading the XML data
> files
> > and finding that each transaction seemed to have a UUID with it, but that
> > the other data in each entry would be easy to generate from my own
> library
> > written in Python.  I also know that now the data files can be in SQL,
> > using several different engines, and that if it’s an XML file, it’s in
> gzip
> > format.
> >
> > I do not need my program to run as a plug-in or anything like that.
> (Last
> > I looked, I had to install MacPorts for that, and last time I installed
> > MacPorts, it made a mess of the libraries for my old Perl scripts and
> some
> > Python ones.)
> >
> > But here’s what I’d like to do:
> > 1. Enter my transactions involving the credit line normally in GnuCash.
> > 2. Exit GnuCash
> > 3. Run my Python script that would read the GnuCash data file and find
> all
> > transactions with any credit lines.
> > 4. Do the interest calculations for my credit line
> > 5. Add a debit transaction for the interest amount before each new
> > transaction with the credit line
> > 6. Edit the comment field for each transaction involving the credit line
> > to include notes on interest and totals
> > 7. Save the ledger and exit my library script.
> > 8. Run GnuCash again and have the new transactions included and their
> > amounts included in any account totals.
> >
> > Is this even possible?  I don’t mind doing the research to find out how
> to
> > generate a transaction ID and all the rest.  I just want to know if I can
> > use my own library to add transactions to a file (or edit comments in a
> > transaction) and, when I’m done, for GnuCash to be able to read that
> file,
> > with my new transactions, in and to include the amounts in the added
> > transactions in account totals.
> >
> >
> >
> > Hal
> > _______________________________________________
> > gnucash-user mailing list
> > gnucash-user at gnucash.org
> > To update your subscription preferences or to unsubscribe:
> > https://lists.gnucash.org/mailman/listinfo/gnucash-user
> > If you are using Nabble or Gmane, please see
> > https://wiki.gnucash.org/wiki/Mailing_Lists for more information.
> > -----
> > Please remember to CC this list on all your replies.
> > You can do this by using Reply-To-List or Reply-All.
> >
> _______________________________________________
> gnucash-user mailing list
> gnucash-user at gnucash.org
> To update your subscription preferences or to unsubscribe:
> https://lists.gnucash.org/mailman/listinfo/gnucash-user
> If you are using Nabble or Gmane, please see
> https://wiki.gnucash.org/wiki/Mailing_Lists for more information.
> -----
> Please remember to CC this list on all your replies.
> You can do this by using Reply-To-List or Reply-All.
>


More information about the gnucash-user mailing list