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, t...@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@entry=true, > extendedKeys=extendedKeys@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@entry=true, > extendedKeys=extendedKeys@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@entry=true, extendedKeys=extendedKeys@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@entry=0x7fffdc005000, block=block@entry=1, > dispatch=dispatch@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