two oddnesses in new ledger

thb at net-bembel.de thb at net-bembel.de
Sat Jul 2 08:19:52 BST 2022


Jack via KMyMoney-devel schrieb am 02.07.2022 01:54 (GMT +02:00):

> [trimming to just the problem with apparent bad schedule date]
> 
> On 2022.07.01 11:58, thb at net-bembel.de wrote:
>> Jack via KMyMoney-devel schrieb am 01.07.2022 15:49 (GMT +02:00):
>> > On 7/1/22 04:34, thb--- via KMyMoney-devel wrote:
>> >> Jack via KMyMoney-devel schrieb am 30.06.2022 18:42 (GMT +02:00):
>> >>
>>>>> First, on startup (multiple times) I get a pop-up: Unable to enter  
>>>>> scheduled transaction 'Patreon Podcast'  with details "Unable to  
>>>>> add transaction with invalid postdate  
>>>>> /var/tmp/portage/app-office/kmymoney-9999/work/kmymoney-9999/kmymoney/mymoney/mymoneyfile.cpp:1540."
> there was apparently a commit to that file, so the line is now  1569
> 
>>>> Hmm, that happens indeed when the postdate is invalid. So we have  
>>>> to figure out why that is. Is this caused by an auto-enter upon  
>>>> start of the application?
>>> Yes, on startup, before I do anything.  I have not yet tried it  
>>> today, but that schedule is for today. Both in the ledger and the  
>>> Scheduled transactions View, that schedule seems to correctly show  
>>> the next date as 2022-07-01, or tomorrow.
> [corrected typo in above line]
>>>> I expect that 4th digit '2' in the date to be a typo. Then July 1st  
>>>> is in fact a valid date, but it does not seem to be setup when the  
>>>> transaction is actually created. We need to figure out where that  
>>>> happens. That is why I asked above about the auto start feature.
>>> Yes, that was just a typo on my part.  The date was correctly  
>>> 2022-07-01.  There are also schedules for 2 July, so we have one  
>>> more day to diagnose before creating fake data. :-)   The version I  
>>> have currently compiled does have full debugging info, so I can run  
>>> under gdb if you want to suggest where to set a breakpoint.
>> 
>> I would set it on mymoneyfile.cpp:1540 (that should be the throw  
>> statement) and analyze the backtrace to find out where it came from.  
>> That should give us more information.
> Here's the BT
> 
> (gdb) bt
> #0  MyMoneyFile::addTransaction(MyMoneyTransaction&)  
> (this=0x7ffff7b4bab0 <MyMoneyFile::instance()::file>, transaction=...)  
> at  
> /var/tmp/portage/app-office/kmymoney-9999/work/kmymoney-9999/kmymoney/mymoney/mymoneyfile.cpp:1569
> #1  0x0000555555670939 in  
> KScheduledViewPrivate::enterSchedule(MyMoneySchedule&, bool, bool)  
> (this=0x555555dcf830, schedule=..., autoEnter=autoEnter at entry=true,  
> extendedKeys=extendedKeys at entry=true) at  
> /var/tmp/portage/app-office/kmymoney-9999/work/kmymoney-9999/kmymoney/views/kscheduledview_p.h:282
> #2  0x000055555566a02f in  
> KScheduledView::enterSchedule(MyMoneySchedule&, bool, bool)  
> (this=<optimized out>, schedule=..., autoEnter=autoEnter at entry=true,  
> extendedKeys=extendedKeys at entry=true) at  
> /var/tmp/portage/app-office/kmymoney-9999/work/kmymoney-9999/kmymoney/views/kscheduledview.cpp:122
> #3  0x000055555564c815 in KMyMoneyView::enterSchedule(MyMoneySchedule&,  
> bool, bool) (this=<optimized out>, schedule=...,  
> autoEnter=autoEnter at entry=true, extendedKeys=extendedKeys at entry=true)  
> at  
> /var/tmp/portage/app-office/kmymoney-9999/work/kmymoney-9999/kmymoney/views/kmymoneyview.cpp:273
> #4  0x00005555555e74f3 in KMyMoneyApp::slotCheckSchedules()  
> (this=0x555555cc0f60) at  
> /var/tmp/portage/app-office/kmymoney-9999/work/kmymoney-9999/kmymoney/kmymoney.cpp:3830
> #5  0x00005555555d6181 in KMyMoneyApp::qt_static_metacall(QObject*,  
> QMetaObject::Call, int, void**) (_o=0x555555cc0f60, _c=<optimized out>,  
> _id=<optimized out>, _a=0x55555ecb93d8) at  
> /var/tmp/portage/app-office/kmymoney-9999/work/kmymoney-9999_build/kmymoney/kmymoney_autogen/EWIEGA46WW/moc_kmymoney.cpp:446
> #6  0x00007ffff5eac4e6 in QObject::event(QEvent*) () at  
> /usr/lib64/libQt5Core.so.5
> #7  0x00007ffff77b14f7 in KXmlGuiWindow::event(QEvent*) () at  
> /usr/lib64/libKF5XmlGui.so.5
> #8  0x00005555555dc81c in KMyMoneyApp::event(QEvent*) (this=<optimized  
> out>, event=<optimized out>) at  
> /var/tmp/portage/app-office/kmymoney-9999/work/kmymoney-9999/kmymoney/kmymoney.cpp:4194
> #9  0x00007ffff69639af in QApplicationPrivate::notify_helper(QObject*,  
> QEvent*) () at /usr/lib64/libQt5Widgets.so.5
> #10 0x00007ffff5e80b38 in QCoreApplication::notifyInternal2(QObject*,  
> QEvent*) () at /usr/lib64/libQt5Core.so.5
> #11 0x00007ffff5e841c5 in  
> QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*)  
> () at /usr/lib64/libQt5Core.so.5
> #12 0x00007ffff5ed33c3 in  () at /usr/lib64/libQt5Core.so.5
> #13 0x00007ffff3d8c60b in g_main_dispatch (context=0x7fffdc005000) at  
> ../glib-2.72.1/glib/gmain.c:3417
> #14 g_main_context_dispatch (context=0x7fffdc005000) at  
> ../glib-2.72.1/glib/gmain.c:4135
> #15 0x00007ffff3d8c8c8 in g_main_context_iterate  
> (context=context at entry=0x7fffdc005000, block=block at entry=1,  
> dispatch=dispatch at entry=1, self=<optimized out>) at  
> ../glib-2.72.1/glib/gmain.c:4211
> #16 0x00007ffff3d8c97f in g_main_context_iteration  
> (context=0x7fffdc005000, may_block=1) at  
> ../glib-2.72.1/glib/gmain.c:4276
> #17 0x00007ffff5ed2e54 in  
> QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)  
> () at /usr/lib64/libQt5Core.so.5
> #18 0x00007ffff5e7f51b in  
> QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at  
> /usr/lib64/libQt5Core.so.5
> #19 0x00007ffff5e87b7d in QCoreApplication::exec() () at  
> /usr/lib64/libQt5Core.so.5
> #20 0x00005555555d702e in runKMyMoney(QApplication&, QUrl const&, bool)  
> (a=<optimized out>, file=<optimized out>, noFile=<optimized out>) at  
> /var/tmp/portage/app-office/kmymoney-9999/work/kmymoney-9999/kmymoney/main.cpp:385
> #21 0x00005555555d85e8 in main(int, char**) (argc=<optimized out>,  
> argv=<optimized out>) at  
> /var/tmp/portage/app-office/kmymoney-9999/work/kmymoney-9999/kmymoney/main.cpp:294
> 
> And here is the schedule as extracted from the xml file:
>    <SCHEDULED_TX autoEnter="1" endDate="" fixed="1" id="SCH000039"  
> lastDayInMonth="0" lastPayment="2022-06-01" name="Patreon Podcast"  
> occurence="32" occurenceMultiplier="1" paymentType="8"  
> startDate="2021-03-01" type="1" weekendOption="2">
>     <PAYMENTS/>
>     <TRANSACTION commodity="USD" entrydate="" id="" memo="833-9728766    
> CA" postdate="2022-07-01">
>      <SPLITS>
>       <SPLIT account="A000370" action="" bankid="" id="S0001"  
> memo="Patreon for Podcast" number="" payee="P000003" price="1/1"  
> reconciledate="" reconcileflag="0" shares="-21/4" value="-21/4"/>
>       <SPLIT account="A000043" action="" bankid="" id="S0002"  
> memo="Patreon for Podcast" number="" payee="" price="1/1"  
> reconciledate="" reconcileflag="0" shares="21/4" value="21/4"/>
>      </SPLITS>
>     </TRANSACTION>
>    </SCHEDULED_TX>
> 
> So as Thomas suspected, this it trying to automatically enter this  
> schedule, although I'm not sure why it would have tried that yesterday,  
> one day early.  Also, I think (but cannot easily confirm) that this  
> thrown error seemed to block KMM from trying to auto-enter other  
> scheduled transactions on the same date.
> 
> Further clue: tracing through earlier phases of the enterSchedule chain  
> (KScheduledViewPrivate::enterSchedule() at kscheduledview_p.h:202  
> (approx line) the origDueDate, which is from schedule.nextDueDate()  
> shows up as jd = 2459762.  This is an invalid Julian date, assuming  
> that is what it is supposed to be.
> 
> I'm still digging through the code related to schedules, so I'm not  
> totally stuck yet, although I don't currently have any useful ideas of  
> what's going on.

Thanks for those details. They tremendously helped. Fixed with 
https://invent.kde.org/office/kmymoney/commit/99b880dd3e6817a947d14739af1711d25243bac7

It needed fixed="1" and autoEnter="1" to fail but only on startup.

Thomas


More information about the KMyMoney-devel mailing list