In a previous post, I recommended guidelines on when you should and should not customize your ERP system. This post prompted a discussion that I believe you would be interested in.
Summary: “We want to change how ADempiere works by allowing the user to choose what GL account a particular document posts to. How does this change relate to your previous customization post? Accounting seems to be a core part of ADempiere.”
Here is my response:
First: let’s discuss what it means to customize an existing ADempiere and iDempiere class.
When you customize a class in ADempiere, you essentially make a copy of it, and you make your changes in the copy. When you upgrade, you need to see what changes have happened in the original class as part of the upgrade process. If nothing changed, you are good. If something changed, you need to understand and potentially merge the two classes.
To modify how the Material Receipt posts, you need to start by looking at Doc_InOut.java. The Doc_InOut class is responsible for posting inbound and outbound shipments and receipts. The Doc_InOut calls on the getAccount() method in the DocLine class. In concept, you can change the DocLine class to get the GL account from the Material Receipt line itself instead of from the product or charge.
There are a number of concepts that make this change challenging:
- Documents do not post in isolation. For example, the Matched Invoice document depends on the Material Receipt and Invoice (Vendor) for its posting. Therefore, you may need to modify multiple classes to achieve the desired results.
- Making a change to a class means you must test all related processes that use this class. Since DocLine is used by alldocuments, you must test many, many scenarios.
Second: do we really need to change a core process?
There is a big scope difference between modifying an existing class and bolting on your own class/process. The real question is “why does someone want to change how a product or charge posts?” The answer: because the user often wants to skip steps.
Let’s apply this scenario to a project accounting (project management) example. When you receive product for a specific project, you (a) receive the product, and (b) issue the product to the project’s WIP account. As a shortcut, people often want to change the Material Receipt’s posting to receive the product directly against WIP. The problem is that storage and accounting break when a user does this.
A better solution is to automate the two steps to accomplish the same result. Here is a proposed solution:
- Add a flag to the MR to autoIssueToWIP. You can default this flag to ‘Y’, and you allow a user to uncheck this flag when applicable. An example of when you would uncheck this flag is when you want to buy in bulk and issue the products as needed over time.
- When the MR completes and the autoIssueToWIP is set to Yes, create a new process to automatically call on ADempiere’s Project Issue process that applies the product to the project’s WIP account.
Here is what I like about this solution:
- The Project Issue process already exists in ADempiere and iDempiere. You are simply automating/emulating what a human would do otherwise.
- You are not changing the Material Receipt class, Project Issue, or their respective posting classes (no customization of a core process).
- Since the solution calls for creating new code as opposed to modifying existing code, the chances of upgrades breaking your customization go way down. In the event that your customization is broken, the fix should be minor. This is an example of using ADempiere and iDempiere’s ModelValidator to extend instead of replacing features.
- You can perform the process manually, and you can unwind the process manually. Therefore, your customizations are not painting you into a corner.
- Creating code that automates existing processes is typically assigned to a junior developer; therefore, the change should incur far less expense – both now and in the future.
This situation helps illuminate the importance of having someone who knows ADempiere, iDempiere and best practices. What first seemed like a major customization ended up being resolved by the simple task of automation.
I hope this helps!!
Why consider Open Source ERP
Open source ERP gives you every opportunity to prove or disprove its ability to support your company’s ERP needs on a timeline that satisfies your organizational needs. With open source ERP, you do not face the same financial constraints nor do you face the same conflicts of interest as with commercial ERP. Instead, you invest in the appropriate skills and knowledge for your people and processes. Best of all – if open source ERP cannot solve your company’s needs, you can safely justify spending the additional $2K to $5K per person per year for life of your commercial ERP to help drive your organization’s success.
ADempiere vs iDempiere vs Openbravo vs Compiere
Please note that ADempiere, iDempiere and Openbravo are forks or copies from Compiere. Therefore, they have similar abilities mentioned above. The biggest difference is that ADempiere and iDempiere are pure open source. There are no features held behind a commercial or paid license.
About Chuck Boecking: I am an ERP educator. I believe that open source ERP have achieved mainstream capabilities, and as a result, more companies can create greater efficiency across their organization. I started using the iDempiere code base in 2003. Back then, it was called Compiere. In 2006, I started my first multi-million dollar installation. Since then, ADempiere has helped me create great success with distribution and manufacturing companies all over the world. My vision of success is to find companies that can best use open source ERP to help them achieve a single, global instance that drives a discontinuous increase in profitability. I believe that organizations win when they own their technology.
If you have questions, comments or concerns, let me know. I definitely want your feedback.
You can contact me by phone using 512.850.6068.
My email is firstname.lastname@example.org.
You can complete the form on this page.
Thank you for taking the time. I look forward to speaking with you.