PawCom Application Note 100: Creating a Master Stock Item ========================================================= 6/4/03 Master/substock items were introduced to Peachtree Complete Accounting for Windows at version 10 (2003). When a new master stock item is added in Peachtree there will be a number of substock items defined at the same time corresponding to each possible combination of the primary and secondary attributes. When you insert a master stock item record from PawCom you must also insert all the corresponding substock item records at the same time. You must also take care to set all the attribute parameters correctly. The example below illustrates how to create a master/substock set of items from PawCom. The attribute data is hardwired into this sample code in the section labeled "Define substock data". In a real application you would get the data from elsewhere, perhaps a form or an external data table. ------------------------------------------------------------------------------------- Private Sub CreateMasterStockItem_Click() Dim oGLA As New PAW.DefaultGLAccounts Dim oLineItem As New PAW.LineItem Dim oPeachw As New PAW.Peachw Dim ItemID As String Dim NItems As Integer Dim Status As Integer Dim i As Integer Dim j As Integer Dim k As Integer Dim PayType As Integer Dim GLSalesAccount As String Dim GLInventoryAccount As String Dim GLCOGSSalaryAccount As String Dim NPrimaryAttributes As Integer Dim NSecondaryAttributes As Integer Dim PrimaryAttributeName As String Dim SecondaryAttributeName As String Dim MasterItemIndex As Long Dim PrimaryAttributeDescription() As String Dim PrimaryAttributeID() As String Dim SecondaryAttributeDescription() As String Dim SecondaryAttributeID() As String BtrieveConnect Status = oLineItem.OpenFile If Status <> btStatusOK Then MsgBox oBtrieve.ErrorMessage(Status), vbExclamation, "Error in cmdMasterItem" BtrieveDisconnect DemoAddNewLineItem = False End If i = 1 Do While i < 100 ItemID = "Test" & i Status = oLineItem.GetEqual(ItemID) If Status = btStatusOK Then i = i + 1 Else Exit Do End If Loop ' Build a example Line Item record. In the real world, you would get this data ' from an entry screen or from some other data source. The record being built ' below will specify a Master Item and the related substock items. ' Get default accounts for substock item Status = oGLA.OpenFile If Status = btStatusOK Then GLSalesAccount = oGLA.GLSales(9) GLInventoryAccount = oGLA.GLInventoryWage(9) GLCOGSSalaryAccount = oGLA.GLCostOfSales(9) Status = oGLA.CloseFile End If Set oGLA = Nothing ' Define substock data NPrimaryAttributes = 2 NSecondaryAttributes = 2 ReDim PrimaryAttributeDescription(NPrimaryAttributes) ReDim PrimaryAttributeID(NPrimaryAttributes) ReDim SecondaryAttributeDescription(NSecondaryAttributes) ReDim SecondaryAttributeID(NSecondaryAttributes) PrimaryAttributeName = "Color" PrimaryAttributeDescription(1) = "Green" PrimaryAttributeID(1) = "GR" PrimaryAttributeDescription(2) = "Red" PrimaryAttributeID(2) = "RD" SecondaryAttributeName = "Size" SecondaryAttributeDescription(1) = "Large" SecondaryAttributeID(1) = "LG" SecondaryAttributeDescription(2) = "Small" SecondaryAttributeID(2) = "SM" ' Create Master Record oLineItem.ItemID = ItemID oLineItem.ItemDescription = "Test Master " & ItemID oLineItem.DescriptionForSales = oLineItem.ItemDescription oLineItem.DescriptionForPurchases = oLineItem.ItemDescription oLineItem.Inactive = False oLineItem.ItemClass = 8 oLineItem.Index = 0 oLineItem.MasterItemIndex = 0 oLineItem.MasterItemID = "" oLineItem.PrimaryAttributeName = PrimaryAttributeName For i = 1 To NPrimaryAttributes oLineItem.PrimaryAttributeID(i) = PrimaryAttributeID(i) oLineItem.PrimaryAttributeDesc(i) = PrimaryAttributeDescription(i) Next i oLineItem.SecondaryAttributeName = SecondaryAttributeName For i = 1 To NSecondaryAttributes oLineItem.SecondaryAttributeID(i) = SecondaryAttributeID(i) oLineItem.SecondaryAttributeDesc(i) = SecondaryAttributeDescription(i) Next i oLineItem.SubstockPrimaryAttributeDesc = "" oLineItem.SubstockPrimaryAttributeID = "" oLineItem.SubstockSecondaryAttributeDesc = "" oLineItem.SubstockSecondaryAttributeID = "" oLineItem.NPrimaryAttributes = NPrimaryAttributes oLineItem.NSecondaryAttributes = NSecondaryAttributes oLineItem.ItemTaxType = 0 ' See Default Tax Type table for codes (Value=Field-1) oLineItem.VendorIndex = 0 oLineItem.MinimumStock = 0 oLineItem.ReorderQuantity = 0 oLineItem.ItemNote = "" oLineItem.NumberOfComponents = 0 oLineItem.CostingMethod = 1 ' See Lookup Costing Method table for codes (1=FIFO) oLineItem.SalesPrice(1) = 0 oLineItem.SalesPrice(2) = 0 oLineItem.SalesPrice(3) = 0 oLineItem.SalesPrice(4) = 0 oLineItem.SalesPrice(5) = 0 oLineItem.Location = "" oLineItem.SubjectToCommission = False oLineItem.PrintComponents = False oLineItem.GLSalesAccount = GLSalesAccount oLineItem.GLInventoryAccount = GLInventoryAccount oLineItem.GLCOGSSalaryAccount = GLCOGSSalaryAccount oLineItem.CustomField(1) = "" oLineItem.CustomField(2) = "" oLineItem.CustomField(3) = "" oLineItem.CustomField(4) = "" oLineItem.CustomField(5) = "" oLineItem.NotStockItem = False If PeachtreeVersion >= 10 Then oLineItem.Guid = oPeachw.Guid Set oPeachw = Nothing End If For i = 0 To 41 oLineItem.Sales(i) = 0 oLineItem.UnitsSold(i) = 0 Next i Status = oLineItem.Insert If Status <> btStatusOK Then MsgBox oBtrieve.ErrorMessage(Status), vbExclamation, "Could not add new master record" End If ' Get the MasterItemIndex Status = oLineItem.GetEqual(ItemID) If Status = btStatusOK Then MasterItemIndex = oLineItem.Index Else MasterItemIndex = 0 End If ' Add substock items For j = 1 To NPrimaryAttributes For k = 1 To NSecondaryAttributes oLineItem.ItemID = ItemID & "-" & PrimaryAttributeID(j) & "-" & SecondaryAttributeID(k) oLineItem.ItemDescription = "Test Master " & oLineItem.ItemID oLineItem.DescriptionForSales = oLineItem.ItemDescription oLineItem.DescriptionForPurchases = oLineItem.ItemDescription oLineItem.Inactive = False oLineItem.ItemClass = 9 oLineItem.Index = 0 oLineItem.MasterItemIndex = 0 oLineItem.MasterItemID = ItemID oLineItem.MasterItemIndex = MasterItemIndex oLineItem.PrimaryAttributeName = PrimaryAttributeName For i = 1 To NPrimaryAttributes oLineItem.PrimaryAttributeID(i) = PrimaryAttributeID(i) oLineItem.PrimaryAttributeDesc(i) = PrimaryAttributeDescription(i) Next i oLineItem.SecondaryAttributeName = SecondaryAttributeName For i = 1 To NSecondaryAttributes oLineItem.SecondaryAttributeID(i) = SecondaryAttributeID(i) oLineItem.SecondaryAttributeDesc(i) = SecondaryAttributeDescription(i) Next i oLineItem.SubstockPrimaryAttributeDesc = PrimaryAttributeDescription(j) oLineItem.SubstockPrimaryAttributeID = PrimaryAttributeID(j) oLineItem.SubstockSecondaryAttributeDesc = SecondaryAttributeDescription(k) oLineItem.SubstockSecondaryAttributeID = SecondaryAttributeID(k) oLineItem.NPrimaryAttributes = NPrimaryAttributes oLineItem.NSecondaryAttributes = NSecondaryAttributes oLineItem.ItemTaxType = 0 ' See Default Tax Type table for codes (Value=Field-1) oLineItem.VendorIndex = 0 oLineItem.MinimumStock = 0 oLineItem.ReorderQuantity = 0 oLineItem.ItemNote = "" oLineItem.NumberOfComponents = 0 oLineItem.CostingMethod = 1 ' See Lookup Costing Method table for codes (1=FIFO) oLineItem.SalesPrice(1) = 0 oLineItem.SalesPrice(2) = 0 oLineItem.SalesPrice(3) = 0 oLineItem.SalesPrice(4) = 0 oLineItem.SalesPrice(5) = 0 oLineItem.Location = "" oLineItem.SubjectToCommission = False oLineItem.PrintComponents = False oLineItem.GLSalesAccount = GLSalesAccount oLineItem.GLInventoryAccount = GLInventoryAccount oLineItem.GLCOGSSalaryAccount = GLCOGSSalaryAccount oLineItem.CustomField(1) = "" oLineItem.CustomField(2) = "" oLineItem.CustomField(3) = "" oLineItem.CustomField(4) = "" oLineItem.CustomField(5) = "" oLineItem.NotStockItem = False If PeachtreeVersion >= 10 Then oLineItem.Guid = oPeachw.Guid Set oPeachw = Nothing End If For i = 0 To 41 oLineItem.Sales(i) = 0 oLineItem.UnitsSold(i) = 0 Next i Status = oLineItem.Insert If Status <> btStatusOK Then MsgBox oBtrieve.ErrorMessage(Status), vbExclamation, "Could not add new substock record" End If Next k Next j ' Finish up oLineItem.CloseFile Set oLineItem = Nothing BtrieveDisconnect End Sub