Programmer:Stock Assembly
Rules in Stock Assembly
- Item's UOM of quantity must be in base UOM
- The Quantity Assigned to Item in Detail (raw material) is the quantity that is consumed by Total quantity of Finished Goods.
- Eg. Finished Goods Qty = 3 Unit
- Raw Material A Qty = 12kg
- 12kg of Raw Material A is consumed by 3 Unit Finished Goods
- In Application, Finished Goods must be maintained in Item Maintenance and Item BOM Maintenance
Assemblies version 1.8
BCE.AutoCount.Stock.dll BCE.AutoCount.Manufacturing.dll
Create New Stock Assembly
public void CreateNewStockAssembly(BCE.Data.DBSetting dbSetting, StockAssemblySource source)
{
BCE.AutoCount.Manufacturing.StockAssembly.StockAssemblyCommand cmd =
BCE.AutoCount.Manufacturing.StockAssembly.StockAssemblyCommand.Create(dbSetting);
BCE.AutoCount.Manufacturing.StockAssembly.StockAssembly doc = cmd.AddNew();
doc.DocNo = source.DocNo ?? doc.DocNo;
doc.DocDate = source.DocDate;
doc.ItemCode = source.ItemCode;
doc.Qty = source.Quantity;
doc.Location = source.Location ?? doc.Location;
if (source.Project != null)
doc.ProjNo = source.Project;
if (source.Department != null)
doc.DeptNo = source.Department;
doc.RefDocNo = source.ReferenceNo;
doc.AssemblyCost = source.AssemblyCost == null ? doc.AssemblyCost : BCE.Data.Convert.ToDBDecimal(source.AssemblyCost);
//Item's UOM is always Base UOM
//When the Finished Goods is maintained as BOM Item,
//there are raw materials (sub item) maintained & added accordance to the finished goods
//So, when Finished Goods is assigned, AutoCount API will auto insert raw materials (sub items) into the detail.
//A quick & simple solution is to clear all items in detail, before adding items from source into detail
doc.ClearDetails();
//There are two types of Cost update;
//1) UpdateItemCostWithUpToDateCost : Get the latest cost from stock card
//2) UpdateItemCostWithStandardCost : Get the cost from Item Maintenance, Standard Cost of base UOM
source.Detail.ForEach(s => AddStockAssemblyDetail(
s, doc.AddDetail, doc.UpdateItemCostWithStandardCost));
try
{
doc.Save();
//Log Successful
}
catch (BCE.Application.AppException ex)
{
//Log error
}
}
public void AddStockAssemblyDetail(StockAssemblyDetailSource source,
Func<BCE.AutoCount.Manufacturing.StockAssembly.StockAssemblyDetail> addDetail,
Action<System.Data.DataRow> calcItemCost)
{
BCE.AutoCount.Manufacturing.StockAssembly.StockAssemblyDetail dtl = addDetail();
dtl.ItemCode = source.ItemCode;
dtl.Description = source.Description ?? dtl.Description;
dtl.Location = source.Location ?? dtl.Location;
if (source.Project != null)
dtl.ProjNo = source.Project;
if (source.Department != null)
dtl.DeptNo = source.Department;
dtl.Qty = source.Quantity;
//When UnitCost is null, Calculate Cost using system update Cost.
if (source.UnitCost.HasValue)
dtl.ItemCost = source.UnitCost.Value;
else
calcItemCost(dtl.Row);
dtl.OverHeadCost = source.OverheadCost;
//Item's UOM is always Base UOM
}
Classes of source
public class StockAssemblySource
{
public string DocNo { get; set; }
public DateTime DocDate { get; set; }
public string Description { get; set; }
//Finished Goods
public string ItemCode { get; set; }
//Finished Goods Assembled Qty
public decimal Quantity { get; set; }
public string Location { get; set; }
public string Project { get; set; }
public string Department { get; set; }
public string ReferenceNo { get; set; }
public decimal? AssemblyCost { get; set; }
public List<StockAssemblyDetailSource> Detail = new List<StockAssemblyDetailSource>();
}
public class StockAssemblyDetailSource
{
//Raw Materials
public string ItemCode { get; set; }
public string Description { get; set; }
public string Location { get; set; }
public string Project { get; set; }
public string Department { get; set; }
public decimal Quantity { get; set; }
public decimal? UnitCost { get; set; }
public decimal OverheadCost { get; set; }
}
Implementation
public void MainEntry(BCE.Data.DBSetting dbSetting)
{
StockAssemblySource newDoc = new StockAssemblySource()
{
DocDate = new DateTime(2017, 12, 7),
//Finished Goods
ItemCode = "FG00001",
Quantity = 3,
};
//Raw Materials
newDoc.Detail.Add(new StockAssemblyDetailSource() { ItemCode = "RW00001", Description = "Metal", Quantity = 12, UnitCost = 1 });
newDoc.Detail.Add(new StockAssemblyDetailSource() { ItemCode = "RW00002", Description = "Casing", Quantity = 1, UnitCost = 20, OverheadCost = 30 });
newDoc.Detail.Add(new StockAssemblyDetailSource() { ItemCode = "RW00003", Description = "WireRed", Quantity = 5, UnitCost = 0.40M });
newDoc.Detail.Add(new StockAssemblyDetailSource() { ItemCode = "RW00003", Description = "WireBlue", Quantity = 5, OverheadCost = 30 });
//Warning: API does not check if "FG00001" is maintained in Item BOM.
//Though Stock Card does record this entry.
CreateNewStockAssembly(dbSetting, newDoc);
}
See Also
- Programmer:Quotation
- Programmer:Sales Order
- Programmer:Delivery Order
- Programmer:Sales Invoice
- Programmer:Cash Sale with Payment
Go to top
|
Resources For AutoCount Software Developers
|