I will be at the EPTECH electronics exhibition in Calgary on March 9 to present webERP as the ideal platform for engineering PLM and to manage parts and orders for engineering prototyping and small-volume production. Watch for me if you’re going to be there, I would love to hear about the challenges facing you, and what strategies you have found work best.
Engineering teams need to manage part numbers for off-the-shelf and custom parts, and bills of materials for assemblies, including keeping track of selected COTS OEM part numbers and vendor information for purchasing, and the current revision of a custom part (and why it’s the current version). Engineering teams must also control source documents for custom parts, such as mechanical drawings, schematics and PCB fabrication files, and also often manage prototype and small-volume purchasing and manufacturing.
webERP is the ideal platform for an engineering team to organize and manage this information with trust and transparency, providing controlled access to anyone in the organization who needs it. webERP is a fully-featured enterprise-grade ERP system, but it is equally suitable for use at an engineering department level.
EPTECH is Canada’s only series of coast-to-coast national electronics shows, targeting electronics designers, engineers, technicians, technologists, purchasers, technical managers and researchers. A broad spectrum of the electronics industry will be on display, including passive and semiconductor devices, electro-mechanical components, test equipment, contract test and manufacturing services…. EPTECH is also a place where the local community can cross paths on an annual basis, the significance of which is often under-estimated.
Here are some terms in the context they will be used here.
Vendor. Who you purchase goods or services from. Also called a Supplier.
Purchase Order. A request to purchase sent to a vendor. If the purchase order is accepted by the vendor, it becomes a legally binding contract between the two parties.
Purchasing Cycle
The general purchasing cycle in webERP is:
Create and print purchase order. The order will be approved automatically if the creator has authorization permission, otherwise it will be queued for authorization. “Printing” is really a euphemism for issuing the order to the vendor, and an order must be printed before stock can be received against it.
Receive stock against purchase order.
Print a Goods Received Note and submit to the Accounts Payable department for matching to the vendor invoice.
Print and attach QA labels to the received goods.
Pay Vendor. Paying is generally made after goods receipt according to the purchase terms (e.g. “30 day”), however prepayment is also common.
A Vendor Invoice must be created first and matched to the order and a goods receipt note before paying the vendor.
The following diagram from the webERP manual illustrates the purchasing cycle.
TODO replace flow-chart diagram with swim-lane drawings: 1-Create and Issue PO, 2-Receive Stock, 3-Pay Vendor.
Setup
Purchase Order Authorization
I will give myself purchase order authorization so that purchase orders I create will be automatically approved (automatic authorization must be enabled in Main > Setup > System Parameters). Note that separate authorization is required for each currency used in a purchase order.
Main > Setup > Receivables/Payables Setup > Set Purchase Order Authorisation Levels
Bank Accounts
Some basic bank account information must be entered before recording payment to a vendor will be possible (because payment will be made from a bank account). I setup the basic chequing, saving and petty cash accounts, although only the chequing account will be used in this tutorial.
Main > General Ledger > Maintenance > Bank Accounts
In addition to entering the bank account information, I also need to give myself authorization to use the bank accounts. You can access bank account authorization either by user, or by bank account, depending on which is more convenient at the time.
Main > General Ledger > Maintenance > User Authorized Bank Accounts
Order Items
Before an Aircraft Wireless system can be manufactured, the raw material will be required must be procured. The items that must be ordered have been documented through the SCC’s Aircraft Wireless product lifecycle. I will show details for purchasing item 90000001-00, electrical wire which is part of sub-assembly item 20000001-00, a custom electrical inductor.
The unit of measure for item 90000001-00 wire is centimeters (cm), which means the wire will be inventoried and consumed by length as measured in centimeters. However, the wire will be purchased by the spool, which is the vendor unit of measure (the datasheet for the wire indicates there are 19,300 feet of wire on a spool).
Issue Order
Start the order process by selecting the item to purchase, in this case item 90000001-00. There are several ways to initiate a purchase order and this is only one, you will learn others as you gain familiarity with webERP.
Select Item 90000001-00, here I have filtered the list of items with the item stock code.
Items > Search > Select
Now that I have selected item 90000001-00, I can place an order for a spool.
The order defaults to quantity 1 (spool), which is what I need. The order is complete and I can select Process Order. If you need to change the quantity from the default 1, you must first select Update Order Lines, then process the order.
Since I have order authorization privileges, and the system is configured for automatic authorization, the order will be authorized automatically and I can next print the purchase order and/or enter a vendor invoice.
Printing the order creates a PDF document that can be saved or printed locally, or emailed to the vendor directly from webERP. More significantly, printing an order means to webERP that the order has been accepted by the vendor.
It can happen sometimes that a verbal order is given to a vendor, and the paperwork is “cleaned-up” later. In those situations, it is often the arrival of an invoice from a vendor that initiates creation of a purchase order. This is why there a command to create a vendor invoice is provided on the same screen an order can be printed from. However, I will be receiving the order before creating a vendor invoice.
You can see that an order has been issued by searching for outstanding purchase orders.
Stock is received in webERP when ownership transfers from the vendor. I will start the receiving process by searching for outstanding orders for item 90000001-00. After selecting the appropriate purchase order, I will be able to Receive the order so long as it has been authorized and printed.
The Goods Received screen shows and allows the quantities received to be entered. The quantity in purchase units is shown together with the conversion factor from purchase units to the item’s unit of measure, and the receive quantity must be entered in the item’s unit of measure.
Finally a Goods Received Note (GRN) can be printed for signing and sending to the Accounts Payable department for matching with the vendor invoice before payment.
You can also print QA labels for attaching to the received goods from the same screen.
If you select Item 90000001-00 (likely still selected if you access Main > Items), you will see that the quantity on hand now reflects the received order.
Pay Vendor
Create Vendor Invoice
A vendor invoice is created to record an that an invoice has been received from a vendor for goods or services provided. The vendor invoice is matched to the purchase order and to a goods receipt note before paying the vendor. One way to start the vendor invoice process is to search for the vendor that provided the invoice. After selecting the Vendor access Vendor Transactions > Enter a Vendor Invoice.
Main > Vendors > Select > Newark
The first step is to enter a reference identifier for the vendor invoice. Vendor invoice references for each vendor must be unique. Next click the Purchase Order button and match the vendor invoice to the purchase order.
Main > Vendors > Vendor Transactions > Enter a Vendor Invoice > Purchase Order
Select the purchase order line item that the vendor invoice pertains to and add to the invoice.
After adding the order reference to the vendor invoice, return to invoice entry.
Add a comment and enter the invoice.
The vendor invoice has now been created.
If desired, you could proceed with paying the invoice by using the Enter Payment command, but I will start over from the beginning in the next section.
Issue Vendor Payment
The vendor can be paid as soon after a purchase order has been printed, a goods receipt notice has been created, and a vendor invoice been created. However vendors will typically be paid based on operational procedures and vendor payment terms. One way to start the vendor payment process is to select the vendor again.
Main > Vendors > Select Newark
Use the Enter a Payment to, or Receipt from the Vendor command to access the Bank Account Payment Entry screen.
Enter the cheque reference and description.
If desired, you can enter a Supplier Narrative, Reference and Transaction Text for the supplier transaction payment. I will leave them blank and they will populate as indicated. Finally process the payment.
Optionally print the cheque and complete the payment.
The payment can be allocated from the final screen, but this is the end of the purchasing cycle for this example.
Rinse and Repeat
Now that item 90000001-00 has been dealt with, I will order sufficient quantities of 90000002-00 and 90000003-00 to manufacture custom inductor item 20000001-00 (which I will describe in an upcoming tutorial on manufacturing).
Reports
A variety of reports are available for managing the materials procurement process, indicating demand, or orders that need to be issued, or following up on orders already issued.
Show all suppliers for a particular item.
Show Where-Used for an item.
Change Happens
When an custom item is revised, it may impact on items already purchased and waiting to be received, or items which are about to be ordered:
Cancel POs if possible for items no longer required
Modify POs to mitigate cost, possibly reducing quantities, extending delivery dates, stopping vendor work and paying only for work performed to date, and modifying vendor work to meet new requirements.
It can be helpful to proactively check for new part numbers, or new revisions of existing part numbers. Presumably they will need to be ordered eventually, and in the case of a revision may indicate changes coming for orders of current revisions.
Summary
This completes the overview of purchasing using webERP. A future tutorial will detail purchasing using a BOM (Bill of Materials) to save time. Instead of purchasing items individually, I will have webERP create purchase orders for all the items on a BOM.
This post is #2 in a series on using webERP, and is a work-in-progress. Search for “webERP” to find other posts in the series.
Product lifecycle management (PLM) is the act of consciously managing a product from concept through design, into manufacturing and sales, supporting on-going production and sales through sustaining engineering, and finally winding down. PLM integrates people, data, processes and business systems, and provides a trustable and transparent product information backbone for operations.
Features of using WebERP for PLM include:
Integrated data. Projects, people, hours, other expenses, purchase orders, production builds, bills of materials, etc., are conveniently managed in one controlled system.
A visible, trusted, change management process providing chain of truth.
Scales with number of users, items and complexity of item trees.
Create child and parent items to model an assembly.
Define appropriate work centers.
Capture expected manufacturing labour.
Identify item vendor information for purchasing.
Identify item manufacturer information for purchasing through distribution.(manufacturer part number vs vendor part number).
Identify an appropriate change management or ECO process. COMING SOON
Definitions
Here are some terms in the context I will be using them.
Revision Level. Each item has a unique revision level, indicating changes made to the item or its supporting documentation since it was initially defined. The revision level is changed following a well-defined sequence.
Release. A release is the creation or update of a logical set of items and supporting documentation. This may be to publish information for review, to support processes such as purchasing or manufacturing, or to recognize a milestone in the development project.
ECO (Engineering Change Order). A well-defined process for making changes to a part or assembly, usually custom.
Setup
Create Inventory Categories
The Swift Construction Company, like many engineering services and product companies, grew organizationally from a single-person engineering department to eventual separate mechanicals and electronics development teams. Knowing if a thing is a “mechanical thing”, or an “electronics, firmware, or basically anything but a mechanical thing” indicates which department is responsible for it.
As a result of the SCC’s organization structure, physical things are categorized as either either ELEC or MECH for raw materials and parts, or RADIOS for finished goods (currently the SCC’s only product line).
Main > Setup > Inventory Setup > Inventory Categories Maintenance
ELEC Inventory Category
MECH Inventory Category
RADIOS Inventory Category
Create Units of Measure
An item’s Unit of Measure (UOM) specifies how the item is to be inventoried and consumed. webERP supports different purchase units, for example to purchase in US gallon jugs but inventory and consume in millilitres.
A new unit of measure is typically created if needed when a new item is created, but using the SCC Aircraft Wireless development project documentation we can create all necessary units of measure now.
Main > Setup > Inventory Setup > Inventory Units of Measure
Create Vendors
A new vendor is typically created ad hoc, but using the SCC Aircraft Wireless development project documentation we can create each vendor now (vendors can also be imported from a CSV file).
Main > Vendors > Add a New Vendor
Create Items
Create new items according to the SCC Aircraft Wireless development project. I will shjow details for creating sub-assembly 20000001-00 (a custom inductor), and the rest of the items and bills of materials will be similar.
The unit of measure for the wire will be centimetres, meaning the wire will be inventoried and consumed by the centimeter. However, it will be purchased by the spool, which is the vendor unit of measure (the datasheet for the wire indicates a spool has 19,300 feet).
The consumption unit of measure will generally be the most relevant for any transaction other than purchasing or inventory control. When purchasing, the unit of measure will generally be determined by the vendor, and webERP supports a separate purchase unit when creating a purchase order. This means in an inventory audit that it will be necessary to convert from the counted number of full spools, add fractions of a spool for any partial spools, and convert to centimeters. However, the conversion factor can be found in the item master purchasing data, and the math is not too laborious.
Items > Create New Item
Enter Purchasing Information
Items > Item Maintenance > Maintain Purchasing Data
Enter Standard Cost
The standard cost for cm UOM is C$0.00026308 per cm (C$154.83/spool x [ 1 / [ 19300ft x 30.48cm/ft ] ] ).
Items > Item Maintenance > Maintain Standard Cost
Upload Documentation
Upload the manufacturers’ datasheet to the Knowledge Base.
Items > Item Inquiries > Wiki Product Knowledge Base
I’m using the same template for each page. It is essentially a list of categories of typical documentation. It’s a judgement call at the time the part is created what is required though.
90000002-00 Ferrite Rod
Items > Create New Item
Enter Purchasing Information
Items > Item Maintenance > Maintain Purchasing Data
Enter Standard Cost
Items > Item Maintenance > Maintain Standard Cost
Upload Documentation
Upload the catalogue page, datasheet and application note to the Knowledge Base.
Items > Item Inquiries > Wiki Product Knowledge Base
90000003-00 Tape
Items > Create New Item
Enter Purchasing Information
Items > Item Maintenance > Maintain Purchasing Data
Enter Standard Cost
Items > Item Maintenance > Maintain Standard Cost
Upload Documentation
Upload the product datasheet and MSDS to the Knowledge Base.
Items > Item Inquiries > Wiki Product Knowledge Base
20000001-00 Inductor
Item 20000001-00 is a custom inductor that will be manufactured in-house using the parts listed in a Bill of Materials (BOM). An item must be explicitly specified as Manufactured in the Item Properties for a creation of an associated BOM to be allowed.
Items > Create New Item
Enter Standard Cost
Set the standard cost to be the total calculated cost including labor and any fixed overhead costs.
Items > Item Maintenance > Maintain Standard Cost
Enter Standard Price
Items which may be sold require pricing. It is expected field technicians may wish to purchase 20000001-00 for maintenance repair.
Items > Item Maintenance > Maintain Pricing
Create Bill of Materials
The raw material required to manufacture one item 20000001-00 are specified by creating a Bill-of-Materials, including quantities. The raw materials are also referred to as child items of the parent 20000001-00, and are set to auto-issue, which will simplify creating a manufacturing work order later.
Main > Manufacturing > Maintenance > Bills Of Material
This post is the first in a series on using webERP. Search for “webERP” to find other posts in the series.
webERP is a mature open-source ERP system providing best practise, multi-user business administration and accounting tools over the web. webERP can be used with a wiki CMS to provide an integrated Knowledge Base. I will be installing MediaWiki, which is one of the supported wiki applications.
Goals
The goals of this exercise will be to:
Install webERP software.
Install MediaWiki software.
Configure webERP and MediaWiki for use.
Install Applications
I will be hosting webERP and MediaWiki on FreeBSD, a unix-like operating system (GNU/Linux is another popular unix-type operating system). The server has been previously configured with Apache 2.4 for the http (web) server and MariaDB 10.0 (compatible with MySQL) for the database server.
webERP
Copy the webERP software files to the server and configure the Apache web server.
Extract distribution to /usr/local/www/
Rename extracted directory webERP/ to weberp-4.13.1
Create soft link “weberp” to weberp-x.y.z
Create Apache virtual server e.g. http://weberp.dalescott.net
Access http://weberp.dalescott.net with a web browser to run the installer.
Language: US
Db user and password: root (only for install, future access will be changed to a dedicated user after installation)
Company name: e.g. Swift Construction Company
Install demo data: YES
User “admin” email: e.g. dale@dalescott.net
admin user password: (keep this safe)
After the installer has completed, change the database access user to a new database user with privileges to webERP databases only.
Create a new database user “weberp” with all privileges to the weberp and weberpdemo databases.
Edit the webERP configuration file weberp/config.php and change the database access user and password to the new dedicated user.
MediaWiki
Copy the MediaWiki software files to the server and configure the Apache web server.
Extract the distribution to /usr/local/www/ (which will create mediawiki-x.y.z/)
Create a soft link “wiki” to mediawiki-x.y.z/
Create an Apache virtual server http://wiki.dalescott.net
Access http://wiki.dalescott.net/mw-config/index.php with a web browser to run the installer.
Name of wiki: webERP
User rights profile: Authorized editors only (public viewing is allowed)
Enable file uploads
Configure Applications
webERP
Log into webERP using the admin user credentials entered into the auto-installer and create new named user e.g. dalescott. The new user will be used for all subsequent work to identify the administration user specifically for audit purposes.
email: e.g. dale@dalescott
system administrator privileges
The original admin user (created by the auto-installer) cannot be deleted due to a now existing audit trail.
Location
I will create a new location “Shopton” for the SCC headquarters.
Main > Setup > Inventory Setup > Inventory Locations Maintenance
Note: Delivery Address 1 must be given a value, otherwise a “missing delivery address” error will occur when later attempting to create a purchase order.
After creating the new location, change the location of the administration user to the new location (and of any other users).
Currencies
I will create a new CAD currency as some items will need to be purchased in Canadian dollars. webERP will obtain currency exchange rates from either Google or the European Central Bank (Main > Setup > General > System Preferences).
Main > Setup > General Setup > Currencies Maintenance
“USD” is shown as the “Functional Currency” because United States is set as the SCC company currency in the Company Preferences.
Company Preferences
Operating practices for a specific company are configured in the Company Preferences screen (webERP supports multiple companies and the desired company is selected at login).
Main > Setup > General > Company Preferences.
System Preferences
General system-wide behavior is configured in the System Preferences screen. I will quickly review some interesting parameters, and get into a bit more detail with a few specific parameters.
Date format: Y-m-d. I prefer ISO 8601 dates for clarity over familiarity (e.g. 2017-03-08 for March 8, 2017), which avoids the ambiguity of d/m/Y and m/d/Y.
Frequently Ordered Items: 0. I left this disabled but may experiment with it once the system has some orders entered.
Sales Order Allows Same Item Multiple Times: Yes. I will revisit this later, but at least initially I don’t want anything to block operation.
Languages to Maintain Translations for Item Descriptions: None. Don’t complicate things at least initially.
Picking note must be produced before an order can be delivered: No. I don’t want to complicate the process too soon.
Create Debtor Codes Automatically: No. I want to use my own mnemonic codes, but set to Yes if you don’t care and would prefer to let the system assign a sequential integer.
Create Supplier Codes Automatically: No. I prefer to use my own mnemonic codes.
Country of operation: United States (used when calculating shipping costs).
Purchase Order Allows Same Item Multiple Times: Yes. I will revisit this later, but at least initially I don’t want anything to block operation.
Automatically authorise purchase orders if user has authority: Yes. I will disable this later so I can follow the approval process.
Financial year ends on: December (if only to avoid having to answer of why not calendar years).
Maximum Size in KB of uploaded images: 300. I left this at its default value, although some images and screenshots will likely require re-sizing before uploading.
Directory to store images: part_pics (directory already exists)
Directory to store reports: reports (directory already exists)
Wiki application: MediaWiki (I’m already familiar with MediaWiki), Wiki Path: http://wiki.dalescott.net/
Inventory Costing Method: Standard. webERP also supports weighted average, but Standard Costing behavior will be more obvious to start with.
Auto issue components: Yes. Automatically decrement items from stock according to the BOM for an Item when it is manufactured to reduce admin effort.
Prohibit Negative Stock: No. I’m pretty sure I will set this to Yes later, but prefer no blocking operations at least initially.
Log Severity Level: All, Path to log files: log. I want to see all possible log entries initially and can be reduced later (I also had to create the “log” directory and set ownership of the directory to the www:www, which is the Apache http server user on FreeBSD).
Controlled Items Defined At Work Order Entry: Yes. When set to yes, controlled items are defined at the time of the work order creation. Otherwise controlled items (serial numbers and batch/roll/lot references) are entered at the time the finished items are received against the work order
Auto Create Work Orders: Yes. Setting this parameter to Yes will ensure that when a sales order is placed if there is insufficient stock then a new work order is created at the default factory location
Default Factory Location: Shopton. This will be the default location for automatically created work orders.
Factory manager email: dale@dalescott.net, Purchasing manager email: dale@dalescott.net, Inventory manager email: dale@dalescott.net. I’m setting all email addresses to me for convenience so I see the traffic.
Using Smtp Mail: No. My server will route email from webERP out through my ISP’s mail server.
Main > Setup > System Preferences
Wiki Application
In particular, note the setting for “Wiki application”. When enabled by selecting a particular Wiki dialogue (MediaWiki, WackoWiki or DokuWiki), a link to the “Wiki Product Knowledge Base” will be shown in the Inquiries column of the main Items, Vendors and Customers screens (once an Item/Vendor/Customer has been selected).
You also need to set the root path to the wiki (that webERP will append to) in the system parameters screen. In my case, I needed a trailing “/” in the Wiki Path, but YMMV.
Database Maintenance
webERP can be configured to lock out users by setting Perform Database Maintenance at Logon to Allow SysAdmin Access Only. Only users with security profile “System Administrator” will be allowed to login or enter data when this is set, which is important when performing maintenance on the application code or database. A maintenance notice also appears on the login prompt when Allow SysAdmin Access Only is set.
Main > Setup > General > System Parameters
This parameter can also be used to periodically run the query “OPTIMIZE DATABASES” at set intervals. It is not clear how often this should be run, or even if there is a significant benefit. However, users will notice a slight delay during login when the it runs, it might have been a half-second with an almost empty Swift Construction Company database (on a older dual-core desktop PC with 4GB memory). If periodically running OPTIMIZE DATABASES is desired, you may consider creating an entry in the cron table to run the mysql command line interface, giving the query as a command argument.
MediaWiki
The webERP Knowledge Base, MediaWiki in my case, is a completely separate system from webERP, including separate users, user permissions, etc. webERP simply provides structured links into the Knowledge Base (with some variation depending on the wiki protocol selected in webERP Main > Setup > General > System Parameters > Wiki application).
I intentionally configured MediaWiki during install for public access, but required that a user be logged-in to create a new page, edit an existing page or upload a file. This allows anyone to see information, and in most cases get on with their job, without having to be concerned with logging into the Knowledge Base. For me, this is a nice balance of visibility and trust within a homogeneous organization. Users can also set their browsers to remember their login credentials and once set won’t be inconvenienced again (I wouldn’t necessarily recommend this when there are shared workstations, but then again many people use shared workstations and don’t control who the user is, it all depends….).
Upload File Types
I configured the permitted upload file types to include OpenOffice/LibreOffice files, dwg files and zip archives (see MediaWiki documentation).