Shipping potential

The following applies to companies with a make to stock strategy that generally do not work with requested delivery dates (e.g. has customers who prefer their orders delivered yesterday).

I bet my left spectacles (the ones I keep in my left-hand drawer) that every manager’s favorite report is “Shipped, not invoiced”. Who doesn’t want to know on a daily basis how much revenue is in the pipeline and just a posting run away.

I bet my other pair (from the right-hand side of my desk) that hardly any of them bother with “Sold, not shipped” and not just because there is no such report available.

We often assume that what hasn’t been shipped is simply logistic WIP, but is it? What if we have sufficient on hand inventory and orders are still not being shipped? Then we are dealing with deferred revenue and possibly other issues.

The value of available inventory sold but not shipped is what I like to call the shipping potential. There are various reasons (some valid) why orders are not being shipped, even though there is sufficient inventory on hand. What we need to beware of is having inflated shipping potential. Inflated shipping potential is a clear indicator that the elevator in the warehouse is not going to the top floor. Trouble in the aisles.

Determining the exact value of the shipping potential is actually a little tricky. The below SQL script does the job, but is not 100% accurate, because it specifically excludes scarce items (i.e. items which are available, but not sufficiently to fulfill all order requirements).

The script is however easily modified to produce order lines with scarce items or order lines that have 0-shipping potential. The latter might be an indicator for faulty master planning.

select SALESID
	, SALESSTATUS
	, sl.RECEIPTDATEREQUESTED
	, CUSTACCOUNT
	, REPLACE(DELIVERYNAME, char(10), ' ') as DLVNAME
	, LINENUM
	, ITEMID
	, REPLACE(REPLACE(NAME, char(13), ' '), char(10), ' ') as NAME
	, QTYORDERED
	, SALESUNIT
	, REMAINSALESPHYSICAL
	, COSTPRICE
	, SALESPRICE
	, PRICEUNIT
	, LINEPERCENT
	, LINEAMOUNT
	, ROUND(REMAINSALESPHYSICAL/PRICEUNIT * SALESPRICE * (100-LINEPERCENT)/100, 2) as SHIPVALUE
from SALESLINE sl
where sl.DATAAREAID = 'abcd'	--< REPLACE *****!****
and	  sl.REMAINSALESPHYSICAL > 0
and	  sl.RECEIPTDATEREQUESTED <= GETDATE()
and   sl.ITEMID in
(
	-- ITEMS WITHOUT PICKING LINES THAT HAVE FULL SHIPPING POTENTIAL
	select sl.ITEMID
	from	(
			-- OPEN SALES LINES GROUPED BY ITEM
			select SALESLINE.ITEMID, sum(REMAININVENTPHYSICAL) as REMAIN
			from SALESLINE
				left join WMSORDERTRANS ot on ot.INVENTTRANSID = SALESLINE.INVENTTRANSID and SALESLINE.DATAAREAID = ot.DATAAREAID and ot.EXPEDITIONSTATUS not in (10, 20)
			where SALESLINE.DATAAREAID = 'rsde' --< REPLACE *****!****
			and  SALESSTATUS = 1
			and ot.RECID is null
			group by SALESLINE.ITEMID
			) as sl
	join	(
			-- PHYSICAL INVENTORY GROUPED BY ITEM
			select ITEMID, sum(PHYSICALINVENT) as PHYSICAL
			from INVENTSUM
				join INVENTDIM id on id.INVENTDIMID = INVENTSUM.INVENTDIMID and id.DATAAREAID = 'abcd'	--< REPLACE *****!****
			where inventsum.DATAAREAID = 'abcd' --< REPLACE *****!****
			and id.INVENTLOCATIONID = 'WH01'    --< REPLACE *****!****
 			group by ITEMID
			) as isum on isum.ITEMID = sl.ITEMID
	where isum.PHYSICAL > 0
	and   sl.REMAIN > 0
	and	  sl.REMAIN < isum.PHYSICAL
) 
and sl.SALESSTATUS = 1
order by sl.ITEMID

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.