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 4314 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: 2706
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: 2706
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 4109 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 4169 times
WMS_Excel_2.png
WMS_Excel_2.png (64.04 KiB) Viewed 4169 times
WMS_Excel_3.png
WMS_Excel_3.png (65.05 KiB) Viewed 4169 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: 2706
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 4126 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: 2706
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 4110 times
red1
Site Admin
 
Posts: 2706
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: 2706
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 4038 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 4038 times
red1
Site Admin
 
Posts: 2706
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 3861 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: 2706
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 3796 times
red1
Site Admin
 
Posts: 2706
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 3754 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 3754 times
Note the corresponding Warehouse Info-Window full and Percentage values.

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

PackFactorLogic.png
PackFactorLogic.png (51.14 KiB) Viewed 3754 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: 2706
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 3750 times
The code change is also elegant and minimal:

IsSameLine.png
IsSameLine.png (40.13 KiB) Viewed 3750 times
red1
Site Admin
 
Posts: 2706
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 3721 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: 2706
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 3719 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: 2706
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 3719 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 3719 times
red1
Site Admin
 
Posts: 2706
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 3671 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: 2706
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 3646 times
red1
Site Admin
 
Posts: 2706
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 3620 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 no 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: 2706
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 3588 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 3588 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 3588 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 3588 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: 2706
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Thu Jun 01, 2017 9:46 am

Some needed property to Handling Unit:

HandlingType.png
HandlingType.png (13.73 KiB) Viewed 3465 times
The last few days (while thinking of a FitNesse testing suite on WMS), i want to wrap up a powerful enough further version release that includes the following concept of forecasting bottlenecks and give warehouse maximum capacity:

Version 0.9.2
1. As DeliverySchedule is done, it can actually generate thru to Putaway List. As such the isReceived and DateStart values are key to denote that this hasn't happened yet. The underlying record will be an extra EmptyStorageLine with Date Start as such.
2. The Info views will then differentiate between on stock and future. The Percentage Available only take note of Received status.
3. Info Views can also give a Estimate Available and this can also better be exported to Excel for planning managers. The formula for estimating total storage is OnHand + Purchase - Sales. All these values are captured in the EmptyStorageLines and not in core models.
4. This can happen for both inbound (purchases) and outbound (sales and manufacturing process)
5. As a Received happens, the extra EmptyStorageLine will merge into the present EmptyStorageLine where QtyMovement is subtracted.
6. During estimate, the GuaranteeDays is taken into account and DateEnd automatically set and affects the Estimate calculation that if DateEnd has occured it is no longer in play. Of course if it isReceived, then it is as #5 above.

Version 0.9.3
1. Preferred Shipper for Business Partner
1.2 During Orders to Delivery Schedule, Shipper is also criteria in JOIN via Location of BPartners to Shippers'.
2. Putaway/Picking List Report with Barcode of items and Locator to put/pick to/from.
3. REDO capability of DeliverySchedule and Putaway/Picking routine as Shipper capacity is uncertain and changes on the warehouse floor happens. Redo will reassign targets and update dependant records.
red1
Site Admin
 
Posts: 2706
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Fri Jun 02, 2017 12:22 pm

With compliments from SYSNOVA, this is my official first release of WMS 0.9.0. 2Pack_1.0.0 will also be frozen and incremental add-ons to follow above 0.9.1 and 0.9.2 roadmap. Below is the release notice.

RELEASE-0-9a1.png
RELEASE-0-9a1.png (111.81 KiB) Viewed 3445 times
RELEASE-0-9a2.png
RELEASE-0-9a2.png (86.57 KiB) Viewed 3445 times
Please follow the README at http://sourceforge.net/projects/red1/files/Warehousing/
Thanks also to Nakarat and an end user in Thailand who gave lots of advice and support of real life usage to refer to on subject matter.
red1
Site Admin
 
Posts: 2706
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Thu Jun 08, 2017 12:36 am

FitNesse Testing is improved for the InfoWindow part that i created separately. This time it can process all records and pass arbitrary SQL WHERE conditions during its query. Below are its results:

FitNesseTest.png
FitNesseTest.png (69.19 KiB) Viewed 3283 times
Note, i arranged two InfoWindow processes together to get Purchase Orders thru to DeliverySchedule onwards to PutawayList. All done in less than 10 secs! I put a Commit so below is the result:

PutawayViaFitNesse.png
PutawayViaFitNesse.png (137.18 KiB) Viewed 3283 times
I can now proceed to do two cycles, allowing Sales Orders to pick from the Storage and put in some actual Receipts. Then have some query to specific results to confirm everything are according to rules. And without the commit rule, the Database always remain fresh for fast repeat testing.

The improved FitNesse Fixture is pushed to http://bitbucket.org/red1/org.idempiere ... se.fixture
red1
Site Admin
 
Posts: 2706
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Sun Jun 11, 2017 8:42 am

Here is the movie of ongoing testing and finishing for 0.9.2/3 coming soon (which i have to remind you is highly complex and if successful shall make it the most advanced and sophisticated free WMS software in the world).


The FitNesse test script will be uploaded in this spot soon. Below is the 2 new testing story scripts i created..

WarehouseSetupViaTest.png
WarehouseSetupViaTest.png (55.04 KiB) Viewed 3187 times
This test (based on my improved FitNesseFixture) commits the setup data of Locators/Empties/Types and its TypeStrings. However TypeString setting failed and i showed how i quickly resolve the FitNesse rerun in the movie.

FitNessePickings.png
FitNessePickings.png (67.61 KiB) Viewed 3187 times
This is a failed test actually as seen with the zero success except the future routine works, so here, very quickly i waste no time in knowing something is wrong in a matter of 2.2 seconds.
red1
Site Admin
 
Posts: 2706
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Tue Jun 20, 2017 11:13 am

FitNesse seems better at setting up test data. Here in this movie i show how i replace the use of my Ninja plugin in setting up Gates, Types and Handling Units. Then i could proceed at 2nd stroke to do the Putaway process involving from Orders to Delivery Schedule to complete Delivery Schedule (Received status) to complete WM_InOut (Material Receipts creation), and onwards to Picking List process. These test scripts could be run enbloc as a single Suite or separately as debugging dictates.


From such fast iterative and repetitive testing i discovered more loophole bugs. Some are plugged and some anomally still having my attention. After that i shall proceed to complete another elaborate set where all those refined features of the WMS such as forward loops (forecasting warehouse capacity), intra stock movements, and bin handling splits and merge (code still pending).

You may fetch the FitNesse FrontPage folder containing the story script together with the FitNesseFixture plugin to replace in your iDempiere OSGI console.
red1
Site Admin
 
Posts: 2706
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Sat Jul 01, 2017 11:01 am

Making the tests more powerful and complete, i have included the whole setup to include Preferred Product setting. Thus this completely replaces the Ninja Model Import step as another convenient alternative option.

SetupWithPreferredProduct.png
SetupWithPreferredProduct.png (77.54 KiB) Viewed 2605 times
The full testing I made 2 more stacks - one for Reading Results and the other to test the 'Future Forecast' of the Warehouse Capacity (see bottom). I also finish the intra StockMovement process. Will create tests for that next.

TestWithReadResults.png
TestWithReadResults.png (89.72 KiB) Viewed 2605 times
ReadResults1.png
ReadResults1.png (52.66 KiB) Viewed 2605 times
ReadResults2.png
ReadResults2.png (51.92 KiB) Viewed 2605 times
ReadResults3.png
ReadResults3.png (44.32 KiB) Viewed 2605 times
ReadResults4.png
ReadResults4.png (31.68 KiB) Viewed 2605 times

The forecasting test all in a single standalone script (after running Warehouse Setup).

ForecastFutureMovements.png
ForecastFutureMovements.png (36.99 KiB) Viewed 2605 times

Code: Select all
!|Login|
|User        |GardenAdmin|
|Password    |GardenAdmin|
|AD_ClIEnT_id|@Ref=AD_Client[Value='GardenWorld'].AD_Client_ID|
|AD_Role_id  |@Ref=AD_Role[Name='GardenWorld Admin'].AD_Role_ID        |
|AD_Org_ID|@Ref=AD_Org[Name='HQ'].AD_Org_ID        |
|M_Warehouse_id  |@Ref=M_Warehouse[Name='HQ Warehouse'].M_Warehouse_ID        |
|*Login*     |           |

!|Read Record|
|*Table*            |WM_Gate|
|WM_Gate_ID|@Ref=WM_Gate[Name='Gate 1'].WM_Gate_ID|
|*Read*||

!|ReadInfoWindow|
|*InfoWindow*|Orders to Delivery Schedule|
|*WHERE*|b.IsSOTrx='N'|

!|RunProcess|
|*ProcessValue*|CreateDeliverySchedule|
|WM_Gate_ID|@WM_Gate.WM_Gate_ID@|
|*Run*||

!|Read Record|
|*Table*            |WM_DeliverySchedule|
|WM_Gate_ID|@Ref=WM_Gate[Name='Gate 1'].WM_Gate_ID|
|*Read*||
|WM_DeliverySchedule_ID||

!|Read Record|
|*Table*            |WM_HandlingUnit|
|WM_HandlingUnit_ID|@Ref=WM_HandlingUnit[Name='HU01'].WM_HandlingUnit_ID|
|*Read*||
|WM_HandlingUnit_ID||

!|ReadInfoWindow|
|*InfoWindow*|Delivery Schedule to Putaway/Picking|
|*WHERE*|b.IsSOTrx='N'|

!|RunProcess|
|*ProcessValue*|CreatePutawayList|
|WM_HandlingUnit_ID|@WM_HandlingUnit.WM_HandlingUnit_ID@|
|IsSameLine|Y|
|*Run*||

!|Set DocAction|
|*Table*|WM_DeliverySchedule|
|WM_DeliverySchedule_ID|@WM_DeliverySchedule.WM_DeliverySchedule_ID@|
|docAction   |CO       |
|*Save*  |         |

!|Read Record|
|*Table*            |WM_HandlingUnit|
|WM_HandlingUnit_ID|@Ref=WM_HandlingUnit[Name='HU01'].WM_HandlingUnit_ID|
|*Read*||

!|ReadInfoWindow|
|*InfoWindow*|Putaway/Picking Info-Window|
|*WHERE*|b.IsSOTrx='N'|

!|RunProcess|
|*ProcessValue*|AssignHandlingUnit|
|WM_HandlingUnit_ID|@WM_HandlingUnit.WM_HandlingUnit_ID@|
|IsSameDistribution|N|
|*Run*||

!|Read Record|
|*Table*            |WM_Gate|
|WM_Gate_ID|@Ref=WM_Gate[Name='Gate 2'].WM_Gate_ID|
|*Read*||
|WM_Gate_ID||

!|Read Record|
|*Table*            |WM_HandlingUnit|
|WM_HandlingUnit_ID|@Ref=WM_HandlingUnit[Name='HU01'].WM_HandlingUnit_ID|
|*Read*||
|WM_HandlingUnit_ID||

!|ReadInfoWindow|
|*InfoWindow*|Orders to Delivery Schedule|
|*WHERE*|b.IsSOTrx='Y'|

!|RunProcess|
|*ProcessValue*|CreateDeliverySchedule|
|WM_Gate_ID|@WM_Gate.WM_Gate_ID@|
|*Run*||

!|Read Record|
|*Table*            |WM_DeliverySchedule|
|WM_Gate_ID|@Ref=WM_Gate[Name='Gate 2'].WM_Gate_ID|
|*Read*||
|WM_DeliverySchedule_ID||

!|Read Record|
|*Table*            |WM_InOut|
|WM_Gate_ID|@Ref=WM_Gate[Name='Gate 1'].WM_Gate_ID|
|*Read*||
|WM_InOut_ID||

!|Set DocAction|
|*Table*|WM_InOut|
|WM_InOut_ID|@WM_InOut.WM_InOut_ID@|
|docAction   |CO       |
|*Save*  |  |

!|Read Record|
|*Table*            |WM_Gate|
|WM_Gate_ID|@Ref=WM_Gate[Name='Gate 2'].WM_Gate_ID|
|*Read*||
|WM_Gate_ID||

!|Read Record|
|*Table*            |WM_HandlingUnit|
|WM_HandlingUnit_ID|@Ref=WM_HandlingUnit[Name='HU01'].WM_HandlingUnit_ID|
|*Read*||
|WM_HandlingUnit_ID||

!|ReadInfoWindow|
|*InfoWindow*|Delivery Schedule to Putaway/Picking|
|*WHERE*|b.IsSOTrx='Y'|

!|RunProcess|
|*ProcessValue*|CreatePutawayList|
|WM_HandlingUnit_ID|@WM_HandlingUnit.WM_HandlingUnit_ID@|
|IsSameDistribution|Y|
|IsSameLine|N|
|*Run*||

!|Set DocAction|
|*Table*|WM_DeliverySchedule|
|WM_DeliverySchedule_ID|@WM_DeliverySchedule.WM_DeliverySchedule_ID@|
|docAction   |CO       |
|*Save*  |         |

!|ReadInfoWindow|
|*InfoWindow*|Putaway/Picking Info-Window|
|*WHERE*|b.IsSOTrx='Y'|

!|RunProcess|
|*ProcessValue*|AssignHandlingUnit|
|WM_HandlingUnit_ID|@WM_HandlingUnit.WM_HandlingUnit_ID@|
|IsSameDistribution|N|
|*Run*||

PUCRHASING STORAGE LINE
!|Read Record|
|*Table*            |WM_EmptyStorageLine|
|M_Product_ID|@Ref=M_Product[Name='Azalea Bush'].M_Product_ID|
|isSOTrx|'N'|
|*Read*||
|DateStart||
|DateEnd||
|QtyMovement||
|WM_HandlingUnit_ID||

LOCATOR STORAGE
!|Read Record|
|*Table*            |WM_EmptyStorage|
|WM_EmptyStorage_ID|@WM_EmptyStorageLine.WM_EmptyStorage_ID@|
|*Read*||
|M_Locator_ID||
|AvailableCapacity||
|Percentage||
|IsFull||

LOCATOR INFO
!|Read Record|
|*Table*            |M_Locator|
|M_Locator_ID|@WM_EmptyStorage.M_Locator_ID@|
|*Read*||
|Value||

STORAGE LINK
!|Read Record|
|*Table*            |WM_ESLine|
|WM_EmptyStorageLine_ID|@WM_EmptyStorageLine.WM_EmptyStorageLine_ID@|
|*Read*||
|Value||
|Processed||

WM INOUT LINE
!|Read Record|
|*Table*            |WM_InOutLine|
|M_Product_ID|@Ref=M_Product[Name='Azalea Bush'].M_Product_ID|
|WM_HandlingUnit_ID|@WM_EmptyStorageLine.WM_HandlingUnit_ID@|
|*Read*||
|M_InOutLine_ID||

MATERIAL RECEIPT LINE
!|Read Record|
|*Table*|M_InOutLine|
|M_InOutLine_ID|@WM_InOutLine.M_InOutLine_ID@|
|M_Product_ID|@Ref=M_Product[Name='Azalea Bush'].M_Product_ID|
|*Read*||
|M_InOut_ID||
|C_UOM_ID||

MATERIAL RECEIPT
!|Read Record|
|*Table*|M_InOut|
|M_InOut_ID|@M_InOutLine.M_InOut_ID@|
|*Read*||
|Updated||
|AD_Org_ID||
|C_Order_ID||
|IsSOTrx||

SALES STORAGE LINE
!|Read Record|
|*Table*            |WM_EmptyStorageLine|
|M_Product_ID|@Ref=M_Product[Name='Azalea Bush'].M_Product_ID|
|isSOTrx|'Y'|
|WM_EmptyStorage_ID|@WM_EmptyStorage.WM_EmptyStorage_ID@|
|*Read*||
|DateStart||
|DateEnd||
|QtyMovement||
|WM_HandlingUnit_ID||

!|Read Record|
|*Table*            |WM_EmptyStorageLine|
|M_Product_ID|@Ref=M_Product[Name='Plum Tree'].M_Product_ID|
|QtyMovement|2|
|isSOTrx|'Y'|
|*Read*||
|DateStart||
|DateEnd||
|WM_HandlingUnit_ID||

PURCHASE STORAGE LINE
!|Read Record|
|*Table*            |WM_EmptyStorageLine|
|M_Product_ID|@Ref=M_Product[Name='Weeder'].M_Product_ID|
|isSOTrx|'N'|
|*Read*||
|DateStart||
|DateEnd||
|QtyMovement||
|WM_HandlingUnit_ID||

!|Roll Back|
|*Commit*|True|
red1
Site Admin
 
Posts: 2706
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Re: New WMS Design

Postby red1 » Sat Jul 01, 2017 12:21 pm

Stock Movement is allowed within the Storage view. As time goes by, the Warehouse needs at anytime to shift its contents around and in numerous manners:
1. A direct move, Handling Unit in all from a locator to another.
2. Combining with other stock, onto a new handling unit.
3. Breaking up contents of a handling unit into more units or vice versa, merging a few into one
4. Filling up a locator till full or not opening up the handling unit.
5. Moving to a specified type of locator.
6. Moving contents according to a set Qty or Percent for each locator selected.
7. If Storage has core MaterialReceipt records, then MaterialMovement records are raised.
(Main code logic is done but open to finer features custom code).

StockMovement.png
StockMovement.png (96.77 KiB) Viewed 2604 times
red1
Site Admin
 
Posts: 2706
Joined: Tue Jul 06, 2004 3:01 pm
Location: Kuala Lumpur, Malaysia

Next

Return to iDempiere

Who is online

Users browsing this forum: No registered users and 4 guests

cron