Try ERPNext Buy Support Partners Foundation

Easier way - Accounts Payable/Payment Entry

Hi-
Our bookkeeper is saying that her time spent processing checks for payables has increased exponentially since using ERPNext from our old system. Can you help me to understand if we are doing this process wrong or how to improve it?

Purchase Invoice is entered against Purchase Order.

We run a report on every Wednesday to prepare for Accounts Payable checks the next day. Report shows list of all Purchase Invoices due in the next week.

Then, on Thursday, she takes the stack of invoices we are going to pay and creates a payment entry - selects the invoices we will be paying, save/submit, print check.

On average, we have about 60 suppliers each week to pay. This is taking her 5 hours and used to take her 30 minutes because she could simply tell the system to create payment for all payables within a timeframe and then click pay and enter a series of check numbers (1000-1060) and push print.

I’m kind of at a loss on how to do something like this in ERPNext. Ideally, we’d be able to batch create payment entries for all invoices within a range. That would save her about 2 hours of time easily.

Any help?

4 Likes

For uploading Payment Entries in bulk, you can use the data import tool.

Also, from the Payment entry page you can select multiple payment entries to print, if that is what you are looking for.

Then you can go to the “Menu” button and choose print option. Other bulk actions like cancel, delete etc. would be available in version 11.

Thanks for the response @Pawan! Data import tool isn’t a good way for a bookkeeper to handle this. It’s not feasible for her to do that every week.

Also, what I really need is from purchase invoice page - check off the invoices I wish to pay and have a bulk create payment entry. That would be ideal for us. Or, create payment entry for all invoices due by XX/XX/XX date.

It is a kind of auto payment feature, in SAP it is F110, both the relevant configuration and user operation are some what complicated, because there are so many things to be considered, e.g auto select the invoice to be paid by user defined criteria, auto determine the house bank to pay, also need to consider whether the due invoices to be paid now or in the future considering the payment term and discount, also whether the payment should be combined for multi invoices belong to the same commercial partner etc. anyway, in real business this is a very useful feature and heavily used, but with significant support and maintenance burden.

Per your idea, if we only concern batch creating the draft payment entries for selected invoices via ad hoc or saved filters, my draft idea about the possible solution is as following

  • Define and assign the naming series for cheque number which is mandatory
  • Show a popup window(dialog) with summary info about the total to be paid amount, how many suppliers, invoices, payment entries , let the user to confirm whether to proceed
  • In the backend take the selected invoice as input, base on assigned naming series to assign the cheque number, save the draft payment entry

for more strict control of such sensitive transaction, normally before generate the payment entry , there will be a separate step by the controller to review whether the submitted invoice is the right candidate for the upcoming payment run, so this review step will mark the reviewed invoice with a kind of payment batch number or simply block the invoices which need further clarification, thus later on the payment handling person can filter the invoices by payment batch number!

All in all, this is very important missing feature so far, if there are enough feedback and interests on this topic, I am willing to contribute the coding via pull request.

1 Like

You really nailed it @szufisher. I do think this is a missing feature and I would be happy to pay for some of the development of this.

This would be a major time saver for us and probably others as well!

@charlie-cook, Could you please create this as GitHub issue by linking this post and also assigning the issue to @szufisher (i presume GitHub name is also same).

Once you do above, I’ll label it as “Paid Development” & we monitor it.
I will pitch in for some front-end testing, in case you need me. Guys, Let’s do it.

_Liyakat

No need to duplicate an issue, @cradford open one on this already, 11814. @joshreeder, @jhk and I have already built it and it’s a contribution that’s planned. It relies on the Purchase Discounts PR (discussed here) and a soon-to be PR’d Indirect Expense.

It’s not strange that lots of US businesses need this (like @charlie-cook) and the sponsor of this code Evaqua Farms. @rmehta this is what I was talking about when I said I’d be stealing the best ideas from QuickBooks and make them work for ERPNext.

3 Likes

This is EXACTLY what we want! Our bookkeeper will absolutely LOVE this as it’s even better and more concise than our other archaic albeit custom system.

What will it take @rmehta for us to get this on the ERPNext Cloud?

Game changer for us on multiple levels - discounts, Accounts Payable, Payment Entry, bulk check printing, etc…

@tmatteson, if any development work is pending Or code review needed, might be we could ask @szufisher to pitch in.

To be noted! we see a willingness from the community to help each other in different way possible. Let’s get this moved swiftly.

1 Like

The process is pretty simple. @tmatteson has already mentioned that this will be contribututed so let’s wait for the Pull Requests. We are happy to help in any way.

I am willing to pay to get this expedited. Not sure how that works or who I pay but let me know! This will save us hours each week! :slight_smile:

@rmehta @charlie-cook I’ll link to branch with it in its current state by the end of the day. It’s working in a custom app and I’ve been building the other dependencies (discount payment terms, indirect expense). Code review today to get the Indirect Expense stuff ship shape.

1 Like

@charlie-cook,
if you really need this new feature now, here is a simple workaround.

  1. go to purchase invoice list view, open the browser’s web console, copy & paste the following javascript code into the command line, then press ENTER
    cur_list.page.add_menu_item(__(“Auto Pay”), function() {
    var me = this;
    var dialog = new frappe.ui.Dialog({
    title: __(“Create Payment Entries for selected invoices”),
    fields: [
    {“fieldtype”: “Data”, “label”: __(“Check Prefix”), “fieldname”: “prefix”},
    {“fieldtype”: “Int”, “label”: __(“from check number”), “fieldname”: “check_number”},
    {“fieldtype”: “Date”, “label”: __(“check date”), “fieldname”: “check_date”,“reqd”:1,“default”: frappe.datetime.get_today()},
    {“fieldtype”: “Button”, “label”: (“create Payments”), “fieldname”: “make_payment_entry”, “cssClass”: “btn-primary”},
    ]
    });
    dialog.fields_dict.make_payment_entry.$input.click(function() {
    var args = dialog.get_values();
    dialog.hide();
    args.names = cur_list.get_checked_items().map(function (item) {
    return item.name;
    });
    var eachcount=0;
    $.each(args.names,function(i,v){
    frappe.call({
    method: “erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry”,
    args: {
    “dn”: v,
    “dt”: cur_list.doctype
    },
    freeze: true
    }).then(r =>{
    if (!r.exc){
    var cur_doc = frappe.model.sync(r.message);
    cur_doc = cur_doc[0];
    cur_doc.reference_no=args.prefix + (args.check_number+1);
    cur_doc.reference_date=args.check_date;
    //console.log(cur_doc);
    frappe.call({
    method: “frappe.desk.form.save.savedocs”,
    args: { doc: cur_doc, action: “Save”},
    freeze: true
    }).then(r =>{
    eachcount ++;
    if (eachcount>= args.names.length){
    frappe.msgprint(
    (“Created " + args.names.length + " Payment entries”));
    frappe.route_options = {“reference_name”: [“in”,args.names.join(",")]};
    frappe.set_route(“List”,“Payment Entry”);
    }
    });
    }
    });
    });
    });
    dialog.show();
    });

here the screenshot for your reference

  1. select the to-be paid invoices , click the newly created Auto Pay menu as below
    autopaymenu

  2. input check number prefix, the start check number and payment day(default as today), click the Create Payment Button

  3. After finish, it will show a popup window with message xx payments created, switch to the payment entries list which filtered by the newly created payment entries

side note, currently custom script is not supported in list view, otherwise the above code can be included in the doctype’s custom script, thus no need to manually copy & paste the code into web console every time . anyway this is at least the doable huck!

Changes are on the agritheory-check_run branch. At minimum I’d expect the named to be changed to Cheque Run or Cheque Batch or something with the Indian English spelling of “cheque”.
@joshiparthin @jhk

3 Likes

@tmatteson great :+1:

@szufisher How does this work exactly? Do you still have to create a payment entry, attach the invoices to be paid, etc…?

What we need is something to select a grouping or purchase invoices (by due date) and have the system automatically calculate the total for each supplier and then print accordingly to the check.

@tmatteson Any progress on this? I’m considering switching off of ERPNext Cloud at this point so that I could potentially use this module you’ve created. Is it ready for prime time?

Any update on integration into base ERPnext? Going from Payables list to printing checks for each Supplier with selected invoices for payment is too slow and cumbersome now.

Hi guys, any update on this feature?