× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



I would probably throw that requirement right back to the stakeholders. The easiest thing to do is say, if there is no exact match, put the whole amount into a suspense account and run it back through a manual process.  Often the answer back will be - "put only the extra into a suspense account" or "apply any extra to the oldest invoice."

That really does seem like a requirement that has not been thought over very well, but then, it may make a ton of sense in your environment. :) 

-Paul 


On Sep 30, 2014, at 10:40 AM, Roger Harman <roger.harman@xxxxxxxxxxx> wrote:

Yep, the requirement to match (allocate) all or nothing throws a wrench into it. Additionally, there may be a credit (or credits) against an invoice (or invoices) which needs to be factored in before we start the matching so we deal with net amounts owed.


       > To: rpg400-l@xxxxxxxxxxxx
       > From: paul.raulerson@xxxxxxx
       > Subject: Re: Combinations & Permutations..... sort of
       > Date: Tue, 30 Sep 2014 15:33:29 +0000
       >        > Wonderful fun stuff. :)        >        > Of course, you realize that the algorithm you choose to do this also knocks down, usually pretty dramatically, the number of choices and compares you have to deal with.        >        > For example, in English, here is roughly the way one of my AR packages looks at and matches up payments and invoices.        >        > For payment 9999 in the amount of $999.99 from clientID 9999:
       > For unpaid or partially paid invoices billed to clientID 9999,
       > Sort by date, showing the oldest invoice first.
       > Find exact match for payment? -  > If yes, pay it.        > No exact match
       > Pay oldest invoice
       > Repeat find of exact match
       >        > All of payment applied?
       > Yes, is there change left over?
       > (varies by program, can range from putting into suspense account to refund of overpayment to applying the overage to different balances....)        > No Change
       > Apply payment transactions
       >        > ....
       >        > Of course, it gets much more complex if you need to apply payments on invoices for different interest rates, promotional payments,        > and many other issues, but running a select for exact match usually cuts the run time down quite a bit.        >        > I realize in your case, you are looking got not have any "change" left over, so you may need to get more creative, for example, checking for an exact match on 1/2 the payment - late fee, in cases where you are dealing with periodic payments, such as utilities or any consistent period recurring billing.        >        > Hope that helps -        > Paul        >        >        >        >        > On Sep 29, 2014, at 11:58 PM, Vernon Hamberg <vhamberg@xxxxxxxxxxxxxxx    > wrote:
       >        > Hey Roger - it's been a long time since my math major days!
       >        > So Google is my friend - combinations are unordered sets from a larger        > set - sounds like that's what you want. A number of combinations of n        > items taken k at a time is n! / (k! * (n-k)!)
       >        > For the non-math folks, n! is n-factorial, or the product of all number        > from 1 to n - 1 * 2 * 3 * ... n-1 * n - so 2! is 1 * 2 = 2
       > So if n = 2 and k = 1, 2C1 = (2*1)/(1*1) = 2 (a trivial case)
       >        > The sum of combination so n items taken k at a time, where k ranges from        > 0 to n, is 2**n - as one article says, the binomial theorem shows this -        > and Pascal's triangle is an easy way to see it -
       >        > 1 = 1
       > 1+1 = 2
       > 1+2+1 = 4 = 2C0 + 2C1 + 2C2
       > 1+3+3+1 = 8
       > 1+4+6+4+1 = 16
       >        > If you take out the one with 0, you have 2**n - 1
       > etc.
       >        > So by this, for 10 items, the total combinations is 2**10 - 1 = 1023.
       >        > To walk through this, you don't want to go backwards - if your items are        > the letters from A - J, you don't want to get anything like B-A or I-D.
       >        > Does that help some? It should certainly make the job shorter!! Your        > total is more along the lines of 2**22 - probably some zero-ish things        > ignored.
       >        > I'm wondering if some kind of recursion would help - there are code        > samples for generating these things out there.
       >        > Vern
       >        > On 9/29/2014 8:02 PM, Roger Harman wrote:
       >      > After some more thinking, I believe I've figured out the total.
       >      >        >      > For 10 items, there are 4,037,913 possible combinations.
       >      >        >      > Calculated as:
       >      > for x01 = 1 to 1
       >      > Total += 1
       >      > for x02 = 1 to 2
       >      > Total += 1
       >      > <and so on    >
       >      > for x10 = 1 to 10
       >      > Total += 1
       >      > endfor
       >      > endfor
       >      > endfor
       >      >        >      > Smaller sample size is definitely in order.
       >      >        >      >
       >      >        >      >    > From: roger.harman@xxxxxxxxxxx
       >      >    > To: rpg400-l@xxxxxxxxxxxx
       >      >    > Subject: Combinations & Permutations..... sort of
       >      >    > Date: Mon, 29 Sep 2014 17:17:55 -0700
       >      >    >
       >      >    > Put your math hats on......
       >      >    >        >      >    > I'm looking at a means to *attempt* to auto-match payments to invoices. We do not want to apply payments to oldest first and end up with a partial payment or credit leftover.
       >      >    >        >      >    > Pick an arbitrary number of invoices for the attempt - say 10.
       >      >    >        >      >    > Any combination of 1 or more of these 10 invoices that total the payment amount would be considered a match.
       >      >    > Could be invoice 1, or 2, or.... Could be invoices 2 and 5 and 8..... etc.
       >      >    >        >      >    > I assume it's going to have to be a brute force approach but I'm stumped on the total # of possible matches. Combinations & permutations I understand (3 out of 10, etc) but this "1 or 2 or (1 and 2) or (2 and 5 and 8)" is giving me a mind block. I do know it's a big number and I'll likely cut back the sampling size.
       >      >    >        >      >    > Any suggestions or clarifications would be very welcome.
       >      >    >        >      >    > Thanks.
       >      >    >        >      >    >
       >      >    >
       >      >    > Roger Harman
       >      >    >
       >      >    >
       >      >    > COMMON Certified Application
       >      >    > Developer – ILE RPG on IBM i on Power
       >      >    >
       >      >    >
       >      >    >
       >      >    >        >      >    >        >      >    > --        >      >    > This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L) mailing list
       >      >    > To post a message email: RPG400-L@xxxxxxxxxxxx
       >      >    > To subscribe, unsubscribe, or change list options,
       >      >    > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
       >      >    > or email: RPG400-L-request@xxxxxxxxxxxx
       >      >    > Before posting, please take a moment to review the archives
       >      >    > at http://archive.midrange.com/rpg400-l.
       >      >    >
       >      >        >        > --        > This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L) mailing list
       > To post a message email: RPG400-L@xxxxxxxxxxxx
       > To subscribe, unsubscribe, or change list options,
       > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
       > or email: RPG400-L-request@xxxxxxxxxxxx
       > Before posting, please take a moment to review the archives
       > at http://archive.midrange.com/rpg400-l.
       >        > --        > This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L) mailing list
       > To post a message email: RPG400-L@xxxxxxxxxxxx
       > To subscribe, unsubscribe, or change list options,
       > visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
       > or email: RPG400-L-request@xxxxxxxxxxxx
       > Before posting, please take a moment to review the archives
       > at http://archive.midrange.com/rpg400-l.
       >                          

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.