Recently at my job I was confronted with a challenge to create a new business process for capturing shipping information and integrate that process into our ERP system. I’d like to describe the solution that I came up with and how I think it would have been easier to do with Acumatica.
First, Some Background
I work for a company that makes machines that dig tunnels. We are an old-school company with a proud owner who takes care of his employees and employees who are proud to work here. And we make a product that everyone here is proud of too.
Basically, our machines are used to dig tunnels all around the world. Here are a couple of pictures as examples of our machines. The machine in the first picture was used to dig the Chunnel from England to France. The machine in the second picture was used to dig a hydro tunnel near Niagara Falls.
ERP Shipping Challenges
In our business, we often assemble a machine somewhere in the world before actually delivering it to the site of the tunnel (somewhere else in the world). This way it can be fully tested before going into the field. From an ERP perspective, the challenge is that the individual part numbers going into an assembly shop are not the same part numbers coming out of an assembly shop. We don’t want to use work orders at the assembly locations. Also, the parts are considered Project WIP, not Inventory, when they land in the assembly shops.
What this means is that the shipping from assembly location to tunnel location is not done through Sage 500, our ERP product. It’s instead done “off the system” and the costs are collected on a project. This is nice, but it resulted in not having data other than dollars in project buckets. We wanted to have some kind of shipping record for all of our shipments (including those leaving assembly locations) so we could globally analyze things like: freight spent on goods going from Australia to China, the percentage of freight spent on AIR versus OCEAN shipments, etc. In order to do this, we had to create a shipping entity that didn’t exist at the time in our ERP system.
Also, in addition to recording metadata about each shipment, we wanted to store documentation on each shipment: pictures, word documents, excel documents, pdf files, etc.
Of course, there are many possible solutions to this problem. I’m not saying that this is the best solution, but it’s the best solution that we could come up with at the time.
I turned to Microsoft SharePoint which is very good at storing documents. Originally I wanted to create the new shipping entity in our ERP system, but Sage 500 doesn’t allow you to store documents in the system. So, we used a customized windows folder in SharePoint which allows us to do two things. First, we were able to create custom columns for all the stuff that we wanted to track about each shipment (from location, to location, GL Account coding, Project coding, etc.). Then, since SharePoint thinks each shipping record is a windows folder, we were able to store all the shipping documentation in a windows folder structure underneath each shipment record.
Overall, things turned out pretty good and people like it. But there are still some challenges.
- Time lag. We still needed a way to associated these new shipment records to Accounts Payable invoices so we could combine invoiced dollars with our shipping metadata. We needed a way for the ERP world to communicate with the new SharePoint world. Sage 500 is based on Microsoft SQL Server. SharePoint can read from SQL Server via BIDS, but SQL Server can’t easily read up-to-the-minute information from SharePoint (at least not easily as far as I could determine). So, I settled on using SSIS (SQL Server Integration Services) to bring SharePoint data into SQL Server once a night. The downside is that the ERP world can only see the SharePoint world as it existed last night. It can’t see any shipments that were created today.
- Source Code Limitations. I can’t easily add a lookup field which references the new shipment entity to the Accounts Payable invoice screen. First, in order to do so we would have to buy the source code from Sage which is expensive. Second, I would still have the problem of binding to data that is only as current as last night. Side note: I have to say that it’s nice to even have the option of purchasing the source code for Sage 500 because with many ERP products, you simply don’t have access to it.
- Email, email, who gets to email? We would like to be able to send an email to our customers immediately after ERP shipments leave a warehouse. The problem is that the trigger for the event happens in the ERP system, but the data that we want to put in the email, including the documents, exists in SharePoint. I currently don’t have a solution for this, although I’m wondering if I can use SharePoint workflow or build an app in Microsoft Outlook which would introduce yet another application piece to this hybrid puzzle.
These are classic problem symptoms that come about when you create a solution that is a hybrid of different applications.
How Acumatica Could Have Helped
- No time lag. This one is obvious. If all the information is stored in the same application (Acumatica), you don’t have any integration problems which can introduce a time lag.
- Free source code. The source code is included with the purchase of the Acumatica application suite (click here). I could have easily created a new DAC for this new shipping entity using the free source code and then created a new screen with a simple grid format of rows for each shipment record and columns for each piece of metadata that we care about.
- Integrated Document Management. Acumatica is very flexible about allowing you to store documents in the system. It seems like you can attach documents to anything: not just header documents, but detail grid lines as well. So, I would have been able to attach documents to the shipment grid lines created above. Acumatica even gives you the technical options of either storing the documents in your Acumatica database or in an outside file system. Dynamics GP recently added a document storage option, but you can only store them in the Dynamics GP database (click here).
- Integrated Email Engine (click here). Since the trigger point for sending email and the data needed by the email would all be in one place, I’m pretty sure I could have tapped into the Acumatica email engine to automatically send an email from the shipping screen when a shipment gets committed.
- Unlimited Users. In this case, we didn’t have a user license issue because the people entering this data are already Sage 500 and SharePoint users. However, many times when you are integrating new business processes into the ERP system, it involves people who don’t currently have a license. And if your ERP system is priced per user, you need to do some analysis to justify the cost of buying more licenses.
The fact is that, in the real world, many of your business processes are unique to your company. That’s what gives you a competitive advantage in the marketplace. If you address these unique business processes by combining the strengths of multiple applications, then you wind up with a hybrid solution and the challenges that come with it. Or, you can use an application like Acumatica which is really more of a platform than an application. Acumatica gives you extensive customization options which allow you to bake your customized business processes into the core of your ERP solution.