[GNC] Adding Transactions From Another Program

Stu Perlman sgperlman at gmail.com
Tue Apr 28 17:41:17 EDT 2020


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.
>


More information about the gnucash-user mailing list