Scheduled Transactions Unparsable Formula
John Ralls
jralls at ceridwen.us
Mon May 2 10:57:08 EDT 2016
> On May 1, 2016, at 11:37 PM, 子風 <zpsyhapcst at gmail.com> wrote:
>
> John Ralls 於 2016/5/2 下午 01:20 寫道:
>>> On May 1, 2016, at 7:13 PM, 子風 <zpsyhapcst at gmail.com> wrote:
>>>
>>> John Ralls 於 2016/5/1 下午 10:29 寫道:
>>>>> On May 1, 2016, at 1:57 AM, 子風 <zpsyhapcst at gmail.com> wrote:
>>>>>
>>>>> GnuCash 2.6.12
>>>>> Window 7 32bit
>>>>>
>>>>> When I try to use Scheduled Transactions and make it more automatic.
>>>>>
>>>>> So I modified the "fin.scm" to meet what I need.
>>>>>
>>>>> But I can't do it. It always shows the error message "Couldn't parse redit-formula".
>>>>>
>>>>> The credit-formula is "computeInterestIncrementFixed(10422:i)"
>>>>>
>>>>> However, if I replaced "i" with "-i" like "computeInterestIncrementFixed(10422:-i)", it would be OK.
>>>>>
>>>>> But It is not what I need.
>>>>>
>>>>> There are source code as below. And I run it online working fine.
>>>>>
>>>>> https://repl.it/CLmn/1
>>>>>
>>>>> ;; for fixed rate once in a year
>>>>> (define ratePublic 0.0116)
>>>>>
>>>>> (define (gnc:futureValueR a t)
>>>>> (if (<= t 0)
>>>> Shouldn't that be "if (>= t 0)"?
>>> I tried this as below, but it still had the same error message.
>>> And when I used "computeInterestIncrement" like online example, it still had the same error message.
>>> (define (gnc:futureValueR a t)
>>> (if (> t 0)
>>> (round (* (+ 1 ratePublic) (gnc:futureValueR a (- t 1))))
>>> a
>>> )
>>> )
>>>>> a
>>>>> (round (* (+ 1 ratePublic) (gnc:futureValueR a (- t 1))))
>>>>> )
>>>>> )
>>>>>
>>>>> (define (gnc:computeInterestIncrementFixed a t)
>>>>> (let ((thisVal (gnc:futureValueR a t))
>>>>> (prevVal (gnc:futureValueR a (- t 1)))
>>>>> )
>>>>> (- thisVal prevVal)
>>>>> )
>>>>> )
>>>>>
>> Oh, sorry, missed the "a" for the condition being true.
>>
>> I'm confused. computeInterestIncrement raises "can't parse credit-formula" but computeInterestIncrementFixed doesn't if you pass -i for the second argument but does if you pass i?
>>
>> The way you wrote the call above, computeInterestIncrementFixed(10422:i) isn't right, it needs to have spaces around the ':'
>> like computeInterestIncrementFixed(10422 : i), the parser tokenizes on spaces. Did you just type it without spaces here and had it right in GnuCash?
>>
>> I can enter computeInterestIncrement(1000 : 100 : 12 : i) and GnuCash doesn't raise an error.
>>
>> Regards,
>> John Ralls
>>
>>
> As test.png, when I tried computeInterestIncrement(1000 : 100 : 12 : i), but it still raise an error again like split test2
>
> And when I entered computeInterestIncrement(1000 : 100 : 12 : -i), it would be fine like split test1.
>
> However, as test2.png if I filled the form, and didn't key enter to finish, I just directly clicked the bottom right button, it would be fine.
>
> But when I want to edit it, it raised an error again.
> <test.png><test2.png>
Aha! I made the mistake of not completing the split before clicking OK. Now I can replicate the problem.
Hmm. The parse error I see in gnucash.trace is
CRIT <gnc.gui> [func_op()] Attempt to convert nan to GncNumeric Failed: GNC_ERROR_OVERFLOW.
A divide-by-zero error. That suggests it's not recognizing 'i' as a variable. Indeed, if I change 'i' to 'int' it works OK. See if it works for you.
Regards,
John Ralls
More information about the gnucash-devel
mailing list