Showing posts with label Products. Show all posts
Showing posts with label Products. Show all posts

Wednesday, May 13, 2015

Get the running average cost of an item

This is how you fetch an item's running average cost. In below case both the warehouse and site are same as the retail store ID. You set the inventDim and use inventOnHand class that does the trick.

 private CostPrice getAverageCost(RetailStoreId _storeId, ItemId  _itemdId)  
 {  
   InventDim        inventDim;  
   InventDimParm      inventDimParm;  
   InventOnHand      inventOnHand;  
   ;  
   inventDim.InventLocationId = _storeId;  
   inventDim.InventSiteId   = _storeId;  
   inventDim = InventDim::findOrCreate(inventDim);  
   inventDimParm.initFromInventDim(inventDim);  
   inventOnHand = InventOnHand::newItemDim(_itemdId, inventDim, inventDimParm);  
   return inventOnHand.costPricePcs();  
 }  

This is the same cost that you see on On-hand form for an item (Cost price field at the bottom), for a particular warehouse. For weighted average model group, cost price = Financial cost amount / Posted qty.



Sunday, February 16, 2014

Handy script to update storage & tracking dimension on an item

Below code snippet updates an item's storage and tracking dimensions.

 InventTableInventoryDimensionGroups::updateDimensionGroupsForItem(curext(), inventTable.ItemId,  
 5637144577,  
 5637144577);  

All you need is itemId and recIds of the storage and tracking dimensions to update, which can be found in EcoResStorageDimensionGroup and EcoResTrackingDimensionGroup tables holding the recIds of Storage and Tracking dimensions.

I had a recent requirement to make sure there are no itemIds in the system which dont have storage or tracking dimensions not set as I had to create and post some counting journals that  require these dimensions. Luckily all the items required the same storage and tracking dimensions so my job became easier.

I used the below job to run a while loop with notexists join finding out items that don't have these dimensions set and update the same.

 static void ScriptToUpdateStorageTrackingDimensions(Args _args)  
 {  
   InventTable                       inventTable;  
   EcoResStorageDimensionGroupItem   EcoResStorageDimensionGroupItem;  
   EcoResTrackingDimensionGroupItem  EcoResTrackingDimensionGroupItem;  
   int                               storageCount, trackingCount;  
   
     while select inventTable  
     notexists join EcoResStorageDimensionGroupItem  
     where EcoResStorageDimensionGroupItem.itemId == inventTable.itemId &&  
     EcoResStorageDimensionGroupItem.ItemDataAreaId == 'abc'  
   {  
     storageCount++;  
     InventTableInventoryDimensionGroups::updateDimensionGroupsForItem(  
       curext(), inventTable.ItemId,  
       5637144577,  
       0);  
   }  
     while select inventTable  
     notexists join EcoResTrackingDimensionGroupItem  
     where EcoResTrackingDimensionGroupItem.itemId == inventTable.itemId &&  
     EcoResTrackingDimensionGroupItem.ItemDataAreaId == 'abc'  
   {  
     trackingCount++;  
     InventTableInventoryDimensionGroups::updateDimensionGroupsForItem(  
       curext(), inventTable.ItemId,  
       5637144577,  
       5637144577);  
   }    
   //sw - storage - 5637144577  
   //none - tracking - 5637144577  
   info(int2str(storageCount));    
   info(int2str(trackingCount));  
   info('Done');   
 }