New WMS Design

The migration of Adempiere modules to iDempiere

New WMS Design

Postby red1 » Mon Apr 03, 2017 12:08 pm

Based on the movie at viewtopic.php?f=45&t=1838, i am documenting my SYSNOVA sponsored work in progress of designing WMS from scratch. The Excel ModelMaker sheet defines the models we are creating. What is of 'fun' right now is for me as the software architect to jump quickly into business logic for Putaway of arriving materials, from Gates to Locators, giving a 'Forklift' route through the Warehouse floor. And this Excel greatly helps me in dispensing away with lots of plumbing as well as blind spots.

WMS_Excel.png
WMS_Excel.png (171.94 KiB) Viewed 740 times
The ModelMaker sheet shows the entries for the Ninja ModelMaker tab which will generate accordingly the data models under the respective master windows. The ColumnSet shows the property types. The major extension happens in the Warehouse & Locators window (and without touching the core) I intend to add those sub tabs which are BinDimensions, RouteLocation, and Gates. I have put in comments in the Help column (not shown in screenshot) which you can read further by fetching the Excel from http://sourceforge.net/projects/red1/files/Warehousing/.

Under Warehouse' Locator sub-tab is further extended with StorageType, PreferredProduct, and EmptyStorage. Empty Storage has its sub lines.

Under Product window, is ProductType tab. HandlingUnit, DeliverySchedule and WM_InOut (Putaway and Picking) have their own windows.

Next i will go to the CodeMaker. The fun part.
red1
Site Admin
 
Posts: 2660
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Wed Apr 05, 2017 10:43 pm

Made the first process code for Generating Locators. Plugin binary is uploaded to http://sourceforge.net/projects/red1/files/Warehousing. It contains all the data models generated from the Excel I spoke about in the previous post. You can find the process as shown in the following movie. Onwards, will be the Empty Storage generator and then the crucial Putaway routing.

red1
Site Admin
 
Posts: 2660
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Tue Apr 18, 2017 8:40 am

Done.

EmptyStorage.png
EmptyStorage.png (50.22 KiB) Viewed 535 times
I have discovered more essential properties while coding the Putaway and been mindful of other WMS experience. This is where the Excel to Ninja approach is awesome. I could quickly modify in a well displayed Excel and export/zip it into iDempiere in a matter of seconds. Together with its sample or actual data sets to migrate into the new models. I put in lengthy description in the Help and Description fields of the Excel and upload into the repository after every major change or improvement to the models and properties.

WMS_Excel_1.png
WMS_Excel_1.png (108.04 KiB) Viewed 595 times
WMS_Excel_2.png
WMS_Excel_2.png (64.04 KiB) Viewed 595 times
WMS_Excel_3.png
WMS_Excel_3.png (65.05 KiB) Viewed 595 times
The Putaway process essentially is assisted by setup tools to populate the Locator designations, StorageTypes, BinDimensions, and EmptyStorages. The Putaway will do the following:
1. Look at WM_InOut (Inbound WM_DeliverySchedule that came from Purchases sent by suppliers to the warehouse gate) details.
2. User can specify from which Gate to process and to which Warehouse and even its X,Y,Z limit params.
3. System will either locate by PreferredProduct definition or StorageType definition such as Hazardous, Fragile, Liquid and Slow moving.
4. When either is found, or if no type is found it will look for untype EmptyStorage to consider its suitability
5. Suitability is determined according to available room (by subtracting the remaining vacant capacity) and then the Locator is assigned.

After this Putaway process, another process can then process them into MaterialReceipts. Where AttributeSet is defined for a particular product, its AttributeSetInstance is created (with Guarantee/Expiry date which is essential for FIFO/LIFO picking later) during the DeliverySchedule to WM_InOut (pre Putaway process).
red1
Site Admin
 
Posts: 2660
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Sat Apr 22, 2017 11:10 am


As shown in movie above, the Excel template is used in very agile manner to quickly recreate any version of a progressive WMS from scratch. I am about to test Putaway process logic, which comes in after DeliverySchedule for Vendors to plan their delivery to the Gate of Warehouse. The Vendor may provide another DateTime, and this can be edited in the DeliverySchedule as DatePromised, and during actual delivery will be recorded in DateDelivered.

DeliverySchedule.png
DeliverySchedule.png (143.09 KiB) Viewed 552 times
The Delivery Schedule is directed more towards a single supplier or shipper, thus the WM_Truck model is also created for such future use. From the DeliverySchedule, the WM_InOut (replacing the old Libero InOutBound) will corelate directly to Putaway/Picking process where locating EmptyStorage by Types and PreferredProduct Storage is considered.

You can download this first trial version as i have exported into a WMS binary jar at http://sourceforge.net/projects/red1/files/Warehousing/. It will self pack in its metadata. The source is at http://bitbucket.org/red1/org.red1.wms
red1
Site Admin
 
Posts: 2660
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Sat Apr 22, 2017 10:15 pm

Improved the Purchasing to Delivery Info-Window better with a WHERE Clause
Code: Select all
NOT EXISTS (SELECT a.C_OrderLine_ID FROM WM_DeliveryScheduleLine b WHERE b.C_OrderLine_ID=a.C_OrderLine_ID)
so that as lines are scheduled, they disappear from the Order Info-Window to appear in the Delivery Info-Window.
Then i also put in two more columns, DatePromised as a criteria, and DateDelivered as a displayed column:

DeliveryScheduled.png
DeliveryScheduled.png (60.65 KiB) Viewed 536 times
red1
Site Admin
 
Posts: 2660
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Sat Apr 22, 2017 10:45 pm

Hereby declaring this as Version 0.1 alpha. Prototpying Stage

Download: http://sourceforge.net/projects/red1/files/Warehousing/
a. org.red1.wms<timestamp> all in OSGi plugin with metadata.
b. WMSdata.zip sample data importable via Ninja (Product Types, Warehouse Gates, Handling Unit tags)
c. WMS_Excel.xlsx artifact for complete system design rendering into iDempiere

Important Development Protocol - utility styled maintenance
a. No touching or overiding of core be they code or metamodels
b. Separate menu tree and backward compatible checking during design rendering
c. Full use of Ninja generated code stubs and minimal code logic placement.
d. Agile design from scratch to extend variations of data and code models.
e. Use of Excel for BI dashboard reporting

Ninja Plugin Integration
1. Powerful integration from requirements analysis and systems design spreadsheet
2. Fast data preparation and import into user instance. Sample data provided as WMSdata.zip

Subject Matter Expertise Reference:
1. Libero WMS
2. SAP WMS
3. Nakarat of Thailand

WMS Model Design Features:
1. Warehouse-Locators extension to cover Loading Gate, StorageType, EmptyStorage, Warehouse Route, Bin Dimensions
2. Product Preferred at Locators
3. Handling Units to cover pallets, drums, QR code tags
3. Product Types with dynamic data i.e. Hazardous, Fragile, Slow/Fast moving goods
4. Automatic generation of above i.e. Locators, EmptyStorage, Types matching
5. Process flow of Orders to Delivery to Locators (Sales/Purchasing = Outbound/Inbound)
6. Info-Windows for (5).

Next task: Putaway to EmptyStorage Locator process.
red1
Site Admin
 
Posts: 2660
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Fri Apr 28, 2017 9:46 pm

Using Ninja i can easily inject a process button at the bottom of the Product Info Window to code the SetPreferredLocator for each Product/s. The parameters are Warehouse and limits of X,Y,Z.

SetPreferredLocator.png
SetPreferredLocator.png (114.55 KiB) Viewed 464 times
The Product Info however is hardcoded to block another Product Info Window i made so i have to submit a JIRA ticket with my patch IDEMPIERE-3356. When accepted it will allow the alternative simpler Info-Window that gives view to UOM and Purchasing Vendor to SetPreferredLocator for any set of Products.

SecondaryProductInfo.png
SecondaryProductInfo.png (98.42 KiB) Viewed 464 times
red1
Site Admin
 
Posts: 2660
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Thu May 11, 2017 6:09 pm

Following Carlos advice and with Hiep in office helping here, i overwrite the above Info Product by pure plugin implementing IInfoFactory.
Below i introducing a new Info Window for Warehouse Management:

WarehouseInfo.png
WarehouseInfo.png (146.18 KiB) Viewed 287 times
Note i have included the IsFull checkbox so that users can quickly see which is full. Later i can add processes such as Block/Unblock or Forecast Inventory as an Info Sub Tab.
red1
Site Admin
 
Posts: 2660
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Mon May 15, 2017 10:25 am

Made a movie of the progress and all work been posted.


Noticed an error at the end of the movie that the 2nd putaway was not set to full and vacant capacity wasn't affected. Now rectified:

BalanceLogic.png
BalanceLogic.png (49.62 KiB) Viewed 222 times
red1
Site Admin
 
Posts: 2660
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Tue May 16, 2017 5:21 pm

I made a further improvement in capacity management of storage bins. This is due to some packings have different volumes and will fit differing quantities. The solution is quite simple and elegant. Using the unused 2 properties in Product model which is Units Per Pack and Units Per Pallet. They can be generated in the Product Warehouse Info-Window:

UnitPackFactorSetting.png
UnitPackFactorSetting.png (119.44 KiB) Viewed 180 times
After running the Putaway Process note the 2.5 affected factor. The HollyBush qty of 10 is thus filling up a bin storage with only 5 units. Note how bin 2-1-2 are shared by two putaway lines.

PutawayPackFactor.png
PutawayPackFactor.png (153.46 KiB) Viewed 180 times
Note the corresponding Warehouse Info-Window full and Percentage values.

WarehouseFullStorage.png
WarehouseFullStorage.png (110.91 KiB) Viewed 180 times
AvailablePercentage.png
AvailablePercentage.png (102.85 KiB) Viewed 180 times
The code logic also change slightly:

PackFactorLogic.png
PackFactorLogic.png (51.14 KiB) Viewed 180 times
Now this is not the whole story. I am trying to handle where a Packing can be a variable UOM such as a roll of cloth, or drum of cable length. So next, i will make use of the UnitsPerPallet as another factor in play.

For example, lets say a storage bin shelf can accomodate 20 rolls of cloth of 70 yards each. Thus the whole bin capacity is 1400 yards, but the delivery is tagged each HandlingUnit per roll. The delivery may note a change in length such as 65 yards thus a back order of 5 yards vs the Purchase. So how do we consider all such cases in the continuous elegant manner? (to be cont'd).
red1
Site Admin
 
Posts: 2660
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Tue May 16, 2017 11:23 pm

It seems the roll of cloth case is a straightforward solution. The total length X rolls shall be the VacantCapacity, not needing an UOM conversion approach. Thus for 10 rolls of 70 yards each = 700. Each roll is a single line of record to Putaway = 70. If there is under delivery i.e. 65 is recorded as the QtyPicked.
All that is needed is a IsSameLine checkbox to ensure the whole roll qty is treated as one Putaway.

IsSameLineParam.png
IsSameLineParam.png (28.07 KiB) Viewed 176 times
The code change is also elegant and minimal:

IsSameLine.png
IsSameLine.png (40.13 KiB) Viewed 176 times
red1
Site Admin
 
Posts: 2660
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Thu May 18, 2017 11:43 am

Most vital during Putaway and Picking is the sequence of handling the items. Thus I have put a simple property 'Sequence' into WM_InOutLine and reprocess the Lines to be set a running Sequence.

PickingPutawaySequence.png
PickingPutawaySequence.png (114.39 KiB) Viewed 147 times
Now, the Putaway/Picking List can be printed in Aisle/Bin/Level order. This assume that the Aisles are staggered on a snake-like flow shape. Later we can use the Routing model to set alternative flows. For now the above is extremely useful.
red1
Site Admin
 
Posts: 2660
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Thu May 18, 2017 12:19 pm

I have also arranged and renamed the Info-Windows to be more noticeable. Firstly i sequenced them to be at the bottom from the core main Info-Windows. Each name describes its function more clearly.

WMS Info-Windows.png
WMS Info-Windows.png (21.87 KiB) Viewed 145 times
The first item is to set the Packing Factor if left alone, is already defaulted in the Product model as '1'.
Next is to generate Delivery Schedule plans from either Sales Order/Purchase orders. Then is to sort out the Picking/Putaway listing of each schedule. Then the other info views allow the user to see more clearly in a dashboard fashion of the Warehouse Locator Vacant Capacity, and Storage details.

Next i will make the Putaway/Picking printout out its list (easy using Ninja Plugin Info-Report feature!) that can export to Excel format for fast proto-formating there. Lastly i will solve the conversion of WM_InOuts into M_InOut for Shipments and Material Receipts. From there the WMS is considered quite complete.

However we have a dream giant Excel dashboard graph to make - to export a SQL View of Purchases to Delivery to Locator and along foreacasted in and out movement times, so as to give a time based outlook of the Warehouse. This will then integrate or be reference for all purchasing/sales as well as internal production as the Warehouse becomes the constraint or wastage. That will make this WMS very expensive! :)
red1
Site Admin
 
Posts: 2660
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Thu May 18, 2017 2:52 pm

And the Report Listing is done within clicks! First in the Putaway/Picking View window there is a Report button to press.

ReportPutawayPicking.png
ReportPutawayPicking.png (174.12 KiB) Viewed 145 times
Then the output can be in any format. You have to go to the ToolBox to reorder the display and put Sequence as Sort item. Then close and open the Report again:

OutputPutawayPicking.png
OutputPutawayPicking.png (299.65 KiB) Viewed 145 times
red1
Site Admin
 
Posts: 2660
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Sun May 21, 2017 7:36 pm

For the Picking side, I have incorporated the three Route Order methods - FIFO, LIFO and Normal (Shortest path). If no RouteOrder is selected, then FIFO for Products with Guarantee Days value and LIFO if no Gurantee Date. Normal is the default RouteOrder which is forced shortest for all products. Choosing FIFO or LIFO will force all products accordingly irrespective of Guarantee Days.

FIFOLIFOPicking.png
FIFOLIFOPicking.png (33.8 KiB) Viewed 97 times
Note that I am using the same data models and Putaway process. It is the IsSOTrx flag that means Purchases for false and Sales for true.

What is special about this FIFO/LIFO ruling is that it requires no Attribute Set Instance on the products. The only property to set is the Product's Guarantee Days value.
red1
Site Admin
 
Posts: 2660
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Mon May 22, 2017 8:07 am

Prior to the above, I have made the WM_InOut CompleteIt() routine to create a Material Receipt and transfer the original Purchase Order other details onto it. Below is the WM_InOut Info-Window showing the Shipment/Receipt Lines. With that the full cycle of intermediate WMS model has done its job. From here I shall be doing a full test, then write a well documented guide on how to use and extend this, together with a FitNesse test suite to ensure the lowest maintenance possible. One thing I am very proud of is that this is done with SME advice in the industry here in Thailand and i change not a single line of core iDempiere plugin nor its Application Dictionary. During its evolution, the use of my Ninja plugin together with its Excel coupling makes such highly complex development a breeze.

InOutCompleteShipment.png
InOutCompleteShipment.png (206.44 KiB) Viewed 72 times
red1
Site Admin
 
Posts: 2660
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Wed May 24, 2017 11:56 am

The above Picking strategy was due to Nakarat showing me another system's clever use of 'Last or Oldest Picked Bin' idea which leads to more case scenarios:
1. When a picking order must not open new boxes but take from previously opened ones so as not to create disorder all over the locators.
2. When a picking order must be an exact fit and not to take partially from more than one locators.

No. 1 seemed solved when the system repeats the same picking strategy either FIFO or LIFO as the last picked is where the container or bin has lesser balance of quantity if it was not fully picked.
No. 2 creates some complexity and so i reduce them to a table for reference during my coding:

PickingConfig.png
PickingConfig.png (36.41 KiB) Viewed 46 times
Thus for exact fit to happen, there must be no handling unit given to the picker thus forcing him/her to take wholesale of the qty either in container box, drum or cloth roll. The SameLine checbox is also ticked. If s/he encounters a lesser or larger quantity, s/he avoids until she exhaust finding an exact fit.
Same Distribution has ho effect. New Handling Units are assigned where needed. But in the case where there are lesser (total absorb in picking) the HU can be replaced with new one (this last case i am not implementing just yet unless there is a real actual user out there).

The Picking process alots Locators but also create all the facts i.e. adjust all HUs and EmptyLines, or zeroise if fully picked off. Now the user can also readjust the Locator in the WM_InOut window. In that case the BeforeSave will adjust the facts again. However this opens up a needed new parameter during the Putaway/Picking: To allow repeat runs on the same WM_InOut document.

Nakarat also made a suggestion of order by exact Lot (HandlingUnit) as the customer wants the exact characteristics that may change and not differentiated by attributes i.e. a certain kind of colour tone. Thus this will mean an extra tab under the OrderLine as WM_OrderLine that will prebook and block the item. This also sets the DocStatus of the HandlingUnit to be in InProgress (a status that i am fixing to mean 'this is in play, do not touch')
red1
Site Admin
 
Posts: 2660
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Thu May 25, 2017 5:42 pm

Done what Nakarat suggested in previous post about prebooking a particular warehouse inventory during the Sales Order process. So i have easily included a sub tab below the Sales Order Line which captures such information. It will let you pick via the Handling Unit and StorageLine which are DynamicValidated to match for you which storage and handling units bear the product!

PreBookWarehouse.png
PreBookWarehouse.png (60.54 KiB) Viewed 14 times
Upon saving the document, that Storage is booked! Note the DocStatus and that it is the exact product matched in the Sales Order. During Picking this prebook will be fetched together with the rest of the Picking List.

InProgressBookPick.png
InProgressBookPick.png (71.79 KiB) Viewed 14 times
I also made DynamicValidation whenever a new Putaway/Picking is done, only those HandlingUnits that are not 'CO' (Putawayed) and 'IP' (Picked) are listed. Note that i now allow appending to an ongoing WM InOut! Later i will handle changes that may be done all over the place such as a change of Putaway/Picking, Delivery items etc even the splitting of a box into two (or similar in cable drum, where some cable is rolled into another drum).

ValidatedParams.png
ValidatedParams.png (131 KiB) Viewed 14 times
I also made the WMS layout to be more storage centric, showing Shipper, Weight and Volume info. In the above screenshot, its a Picking Delivery preparation for the outbound Carrier before the Picking List is generated. Thus the full cycle is solved at the same time.

PickingInfo.png
PickingInfo.png (110.75 KiB) Viewed 14 times
What is remaining besides the micro movements mentioned just now, will be the dream integration into a master Excel dashboard that gives "Aging' movement to manage Warehouse Capacity Planning and forecast constrains and prepared routes for any event. A test suite and user manual will also be written.
red1
Site Admin
 
Posts: 2660
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia


Return to iDempiere

Who is online

Users browsing this forum: No registered users and 1 guest