Provided that the service or product your client supplies does not depend on a particular invoice being paid, such as insurance policies or different phone lines etc. then the following system might do the job for you.
Have the invoice records setup so that those paid in full are separated.
Then have a system that opens the invoices for the client and in ascending order of size. We assume $2000 has been paid and the following invoice amounts are outstanding.
300
600
800
900
1100
If the $2000 is bigger than the first then the first gets and entry "paid' and a calculated field (or the result of a SetValue action) gets 2000 -300 =1700
That value is applied to the invoice of 600 which will leave 1100.
That value is applied to the next invoice which will leave 300
So we have invoices 300, 600 and 800 paid and $300 left. That $300 could be added to the persons next payment and assuming no more invoices had gone out the next time things were run the invoices called up would be the 900 and 1100.
You could make a macro or code that runs through your client's entire customer list opening the invoices and doing the above procedure and then moving to the next record. From an Access point of view I am certain there will be nicer ways of doing it but I think something like that might get you over the line.
As a side note, I use to have a system similar to what I outlined for inserting client ID number into policy benefits we would get from the insurance company. The problem is the insurance company treats a "policy number" as a client and as such they might have the one person entered in their system 3 times. However, we only want the person in the records once and a subform showing all 9 policy benefits with the different policy numbers. Quite some time ago I changed the system to do it through a query and a copy and paste. I have a few other insurance people who use the system and all of them wanted to retain the system of a macro running through all the records on the screen with Echo at Yes
Mike