Programmer:Item Opening Maintenance v2: Difference between revisions
mNo edit summary |
mNo edit summary |
||
(5 intermediate revisions by the same user not shown) | |||
Line 22: | Line 22: | ||
#:If there is any occasion when '''Seq''' is repeated for the same ItemCode, UOM, Location and BatchNo, below error message is thrown: |
#:If there is any occasion when '''Seq''' is repeated for the same ItemCode, UOM, Location and BatchNo, below error message is thrown: |
||
#:'''Sequence for Item''' 'FG00001', '''UOM''' 'UNIT', '''Location''' 'HQ', '''BatchNo''' ' ' '''is not correct'''. |
#:'''Sequence for Item''' 'FG00001', '''UOM''' 'UNIT', '''Location''' 'HQ', '''BatchNo''' ' ' '''is not correct'''. |
||
#'''Seq''' will affect how the '''cost''' of '''FIFO''' and '''LIFO''' is calculated. |
|||
==References of AutoCount Accounting version 2.0== |
==References of AutoCount Accounting version 2.0== |
||
Line 138: | Line 139: | ||
===Adding two entries of same ItemCode to Item Opening=== |
===Adding two entries of same ItemCode to Item Opening=== |
||
Following example shows the increase of '''Seq''' when 2nd entry of Item Opening has the same '''ItemCode''', '''UOM''', '''Location''' and '''BatchNo''' from the 1st entry. |
Following example shows the increase of '''Seq''' when 2nd entry of Item Opening has the same '''ItemCode''', '''UOM''', '''Location''' and '''BatchNo''' from the 1st entry. |
||
<syntaxhighlight lang="csharp"> |
<syntaxhighlight lang="csharp" highlight="22-24,31-33,27,36"> |
||
public void NewTwoEntriesOfSameItem(AutoCount.Authentication.UserSession userSession) |
public void NewTwoEntriesOfSameItem(AutoCount.Authentication.UserSession userSession) |
||
{ |
{ |
Latest revision as of 07:54, 21 September 2018
Technical Specification
- Quantity of the Item Opening must not be zero
- When adding a new entry to Item Opening, zero qty entry will be removed before saving to database
- Positive (+ve) & negative (-ve) quantity are allowed
- Best to filter the loading of Item Opening
- Avoid loading entire data of Item Opening, when there might be more than 100k records in Item Opening of different UOM, location, batches and etc.
- Filters that can be applied to reduce the loading of Item Opening data
- ItemCode
- ItemGroup
- ItemType
- ItemBrand (Module: Advanced Item)
- ItemCategory (Module: Advanced Item)
- ItemClass (Module: Advanced Item)
- Location
- The filtering will have impact on adding new record of an ItemCode that is not in the range of the filtered range.
- If the newly added ItemCode is not in the filter range, system throw exception message of "Item Code is not in Filter range."
- The value of Seq cannot repeat the same, when the value of below columns are the same, or already exist in the record of Item Opening:
- ItemCode
- UOM
- Location
- BatchNo
- If there is any occasion when Seq is repeated for the same ItemCode, UOM, Location and BatchNo, below error message is thrown:
- Sequence for Item 'FG00001', UOM 'UNIT', Location 'HQ', BatchNo ' ' is not correct.
- Seq will affect how the cost of FIFO and LIFO is calculated.
References of AutoCount Accounting version 2.0
AutoCount.Accounting.dll AutoCount.Accounting.UI.dll AutoCount.dll AutoCount.MainEntry.dll AutoCount.UI.dll AutoCount.StockMaint.dll
Load Item Opening
Load Item Opening with ItemCode Filtering
public DataTable GetStockOpening(AutoCount.Authentication.UserSession userSession)
{
AutoCount.Stock.Item.ItemOpeningDataAccess cmd = AutoCount.Stock.Item.ItemOpeningDataAccess.Create(userSession, userSession.DBSetting);
AutoCount.Stock.Item.ItemOpeningCriteria crit = new ItemOpeningCriteria(userSession.DBSetting);
crit.ItemCodeFilter.Type = AutoCount.SearchFilter.FilterType.ByRange;
crit.ItemCodeFilter.From = "FG00001";
crit.ItemCodeFilter.To = "FG00003";
DataTable dtOpening = cmd.LoadAutoGenerateTable(crit);
return dtOpening;
}
- This example shows the loading of ItemCode from "FG00001" to "FG00003".
Load Item Opening with Location Filtering
public DataTable GetStockOpening(AutoCount.Authentication.UserSession userSession)
{
AutoCount.Stock.Item.ItemOpeningDataAccess cmd = AutoCount.Stock.Item.ItemOpeningDataAccess.Create(userSession, userSession.DBSetting);
AutoCount.Stock.Item.ItemOpeningCriteria crit = new ItemOpeningCriteria(userSession.DBSetting);
crit.LocationFilter.Type = AutoCount.SearchFilter.FilterType.ByRange;
crit.LocationFilter.From = "HQ";
crit.LocationFilter.To = "HQ";
DataTable dtOpening = cmd.LoadAutoGenerateTable(crit);
return dtOpening;
}
- This example shows the loading of items opening at location "HQ".
Load Item Opening with the combination of filters
public DataTable GetStockOpening(AutoCount.Authentication.UserSession userSession)
{
AutoCount.Stock.Item.ItemOpeningDataAccess cmd = AutoCount.Stock.Item.ItemOpeningDataAccess.Create(userSession, userSession.DBSetting);
AutoCount.Stock.Item.ItemOpeningCriteria crit = new ItemOpeningCriteria(userSession.DBSetting);
//Filter ItemCode
crit.ItemCodeFilter.Type = AutoCount.SearchFilter.FilterType.ByRange;
crit.ItemCodeFilter.From = "FG00001";
crit.ItemCodeFilter.To = "FG00003";
//Filter Location
crit.LocationFilter.Type = AutoCount.SearchFilter.FilterType.ByRange;
crit.LocationFilter.From = "HQ";
crit.LocationFilter.To = "HQ";
DataTable dtOpening = cmd.LoadAutoGenerateTable(crit);
return dtOpening;
}
Add New Entry to Item Opening
Add New Item Opening with the method of NewItemOpening()
public void NewStockOpening(AutoCount.Authentication.UserSession userSession)
{
AutoCount.Stock.Item.ItemOpeningDataAccess cmd = AutoCount.Stock.Item.ItemOpeningDataAccess.Create(userSession, userSession.DBSetting);
//Create and define ItemOpeningCriteria
AutoCount.Stock.Item.ItemOpeningCriteria crit = new ItemOpeningCriteria(userSession.DBSetting);
//Filter ItemCode by each item
crit.ItemCodeFilter.Type = AutoCount.SearchFilter.FilterType.ByIndividual;
crit.ItemCodeFilter.Add("FG00001");
crit.ItemCodeFilter.Add("FG00003");
//Filter only location to "HQ"
crit.LocationFilter.Type = AutoCount.SearchFilter.FilterType.ByRange;
crit.LocationFilter.From = "HQ";
crit.LocationFilter.To = "HQ";
//Load records of existing Items
AutoCount.Stock.Item.ItemOpeningEntities entities = cmd.LoadItemOpening(crit);
//Create new Item Opening Entry
AutoCount.Stock.Item.ItemOpeningEntity entity1 = entities.NewItemOpening();
entity1.ItemCode = "FG00001";
entity1.Uom = "UNIT";
entity1.Location = "HQ";
entity1.Qty = 1;
entity1.Cost = 5.01M;
//Create new Item Opening Entry
AutoCount.Stock.Item.ItemOpeningEntity entity2 = entities.NewItemOpening();
entity1.ItemCode = "FG00003";
entity1.Uom = "UNIT";
entity1.Location = "HQ";
entity1.Qty = 2;
entity1.Cost = 6M;
try
{
cmd.Save(entities);
AutoCount.AppMessage.ShowMessage("Item Opening Saved.");
}
catch (AutoCount.AppException ex)
{
AutoCount.AppMessage.ShowErrorMessage(ex.Message);
}
}
Adding two entries of same ItemCode to Item Opening
Following example shows the increase of Seq when 2nd entry of Item Opening has the same ItemCode, UOM, Location and BatchNo from the 1st entry.
public void NewTwoEntriesOfSameItem(AutoCount.Authentication.UserSession userSession)
{
AutoCount.Stock.Item.ItemOpeningDataAccess cmd = AutoCount.Stock.Item.ItemOpeningDataAccess.Create(userSession, userSession.DBSetting);
//Create and define ItemOpeningCriteria
AutoCount.Stock.Item.ItemOpeningCriteria crit = new ItemOpeningCriteria(userSession.DBSetting);
//Filter ItemCode by each item
crit.ItemCodeFilter.Type = AutoCount.SearchFilter.FilterType.ByIndividual;
crit.ItemCodeFilter.Add("FG00001");
//Filter only location to "HQ"
crit.LocationFilter.Type = AutoCount.SearchFilter.FilterType.ByRange;
crit.LocationFilter.From = "HQ";
crit.LocationFilter.To = "HQ";
//Load records of existing Items
AutoCount.Stock.Item.ItemOpeningEntities entities = cmd.LoadItemOpening(crit);
//Create new Item Opening Entry
AutoCount.Stock.Item.ItemOpeningEntity entity = entities.NewItemOpening();
entity.ItemCode = "FG00001";
entity.Uom = "UNIT";
entity.Location = "HQ";
entity.Qty = 2;
entity.Cost = 5.01M;
entity.Seq = 0;
//Increase the Seq of 2nd Entry of same item
entity = entities.NewItemOpening();
entity.ItemCode = "FG00001";
entity.Uom = "UNIT";
entity.Location = "HQ";
entity.Qty = 5;
entity.Cost = 5.02M;
entity.Seq = 1;
try
{
cmd.Save(entities);
AutoCount.AppMessage.ShowMessage("Item Opening Saved.");
}
catch (AutoCount.AppException ex)
{
AutoCount.AppMessage.ShowErrorMessage(ex.Message);
}
}
Delete Item Opening entry
When delete existing item opening entry, "ItemOpeningKey" is required.
This example uses a function to find the ItemOpeningKey.
Highlighted shows the function to get the list of keys and deletion of existing keys.
Get "ItemOpeningKey" can also be applied to check the existing record when it can avoid the error of
"Sequence for Item 'FG00001', UOM 'UNIT', Location 'HQ', BatchNo ' ' is not correct."
public void CheckNewEntryBeforeAdding(AutoCount.Authentication.UserSession userSession)
{
AutoCount.Stock.Item.ItemOpeningDataAccess cmd = AutoCount.Stock.Item.ItemOpeningDataAccess.Create(userSession, userSession.DBSetting);
//Create and define ItemOpeningCriteria
AutoCount.Stock.Item.ItemOpeningCriteria crit = new ItemOpeningCriteria(userSession.DBSetting);
//Filter ItemCode by each item
crit.ItemCodeFilter.Type = AutoCount.SearchFilter.FilterType.ByIndividual;
crit.ItemCodeFilter.Add("FG00001");
//Filter only location to "HQ"
crit.LocationFilter.Type = AutoCount.SearchFilter.FilterType.ByRange;
crit.LocationFilter.From = "HQ";
crit.LocationFilter.To = "HQ";
//Load records of existing Items
AutoCount.Stock.Item.ItemOpeningEntities entities = cmd.LoadItemOpening(crit);
//Delete any existing entries that has same ItemCode, UOM, Location and BatchNo,
//before adding new entries
List<long> listKeys = GetExistItemOpeningKey(entities.ItemOpeningTable, "FG00001", "UNIT", "HQ", null);
listKeys.ForEach(key => entities.DeleteItemOpening(key));
//Create new Item Opening Entry
AutoCount.Stock.Item.ItemOpeningEntity entity = entities.NewItemOpening();
entity.ItemCode = "FG00001";
entity.Uom = "UNIT";
entity.Location = "HQ";
entity.Qty = 2;
entity.Cost = 5.01M;
entity.Seq = 0;
//Increase the Seq of 2nd Entry of same item
entity = entities.NewItemOpening();
entity.ItemCode = "FG00001";
entity.Uom = "UNIT";
entity.Location = "HQ";
entity.Qty = 5;
entity.Cost = 5.02M;
entity.Seq = 1;
try
{
cmd.Save(entities);
AutoCount.AppMessage.ShowMessage("Item Opening Saved.");
}
catch (AutoCount.AppException ex)
{
AutoCount.AppMessage.ShowErrorMessage(ex.Message);
}
}
Function to find a list of keys that is/are matching.
public List<long> GetExistItemOpeningKey(DataTable table, string itemCode, string uom, string location, string batchNo)
{
return table.AsEnumerable().Where(r =>
r.RowState != DataRowState.Deleted &&
r.Field<string>("ItemCode") == itemCode &&
r.Field<string>("UOM") == uom &&
r.Field<string>("Location") == location &&
r.Field<string>("BatchNo") == batchNo
).Select(r => r.Field<long>("ItemOpeningKey"))
.ToList();
}
Another function to specially handle Deleting matching Item Opening
public void DeleteAllMatchingItemOpening(IEnumerable<DataRow> itemOpenings, string itemCode, string uom, string location, string batchNo, Action<long> deleteOpening)
{
itemOpenings.Where(r => r.RowState != DataRowState.Deleted &&
r.Field<string>("ItemCode") == itemCode &&
r.Field<string>("UOM") == uom &&
r.Field<string>("Location") == location &&
r.Field<string>("BatchNo") == batchNo
).Select(r => r.Field<long>("ItemOpeningKey"))
.ToList().ForEach(key => deleteOpening(key));
}
To apply this function code;
DeleteAllMatchingItemOpening(entities.ItemOpeningTable.AsEnumerable(), "FG00001", "UNIT", "HQ", null, entities.DeleteItemOpening);
See Also
- Item Group v2
- Stock Item (Item Maintenance) v2
- Item Package v2
- Stock Adjustment v2
- Stock Transfer v2
- Stock Assembly v2
- Get Stock Cost and Stock Balance with Costing - [1.8, 1.9] [2.0]
- Item Opening Balance Maintenance - [1.8, 1.9] [2.0]
Go to top
|
Resources For AutoCount Software Developers
|