Thursday, December 24, 2009

We can answer on qestion: What should I wear?

I create sometime software for my wife. Usually, it's simple utility for women life.She want to be always dressed immaculately and think about each details in her outfit. But she doesn't have time to think about it every time before leaving home.
We've created a program for manage a warderobe and creating the clothing sets beforehand.Use our Victoria's Clothes Organizer that answers the perennial question: What should I wear?. This program will make you happy!

Monday, December 21, 2009

Remote warehouses and XML orders. in Golden Inventory System


You can have many storage locations in your company and you may want to automate all. You can use two approaches to this. First, install MS SQL Server and connect to it from all remote locations through the internet. You use one inventory database in this case but you must have a reliable connection to the network in all your branches.Any break down of the internet connection will lead to stop work in your branches.The second approach is that you are installing a separate database for each storage location and synchronize them using XML orders.We consider each location as your customer or reseller. We create invoices when we ship goods to your remote location. We call these invoices as internal invoices and denote their the special group "internal". Then, create copies of these files in XML format. You can download Golden Inventory software for testing this function. You can send these XML invoices via email or on any flash device with a truck driver. Personal of your remote warehouse receive XML invoices and upload them in the local inventory database using the function Add from XML file at a New Item Receipt. You'll have item receipts in remote databases as copies of invoices from the main base. This provides full synchronization of data in the main and remote databases. Golden Inventory has a lot of XML functions and you can create purchase and sales orders in the XML format.This allows you to automate your workflow with remote warehouse.

Saturday, December 19, 2009

Do you like classical piano music ?

Probably, you know that piano music is a huge area of musical culture. Beginning of piano music was laid in second quarter of XVIII century, when was designed a new keyboard-stringed instrument - piano.
The real flowering of piano music associated with the period of romanticism.
Earlier known genres was reinvented, often turning into something else: a prelude becomes an independent poetic miniatures;
romantic content and images are saturated genres of fantasy,
variations, suites, is transformed and a piano sonata concert.
There are new purely romantic genres appear.For example, musical moments and Impromptus, Nocturnes and ballads, transcribed for piano of orchestral works and songs without words.
XXI century has taught piano sound in new ways. The images of piano music appeared sharp, tight rhythms, complex melodies, new piano techniques.

Kirill Korsunenko is a bright representative of the new school of piano play. He is a pianist and composer. A lot of people love his excellent performance of Clair De Lune by Debussy

How to add a meta tag to a "child" ASP.Net page.

I usually use a master page for creation all pages in my inventory software projects. It's a good way for fast creation web pages but I had only one problem. I could not edit meta tags in project's pages because we don't see the "head" section of child pages. But search engines like to see different "description" tags on all pages. You can add any meta tag on your page using the next code snippet in the Sub Page_Load :
Dim metaTag As New HtmlMeta, metaTagD As New HtmlMeta
metaTag.Name = "keywords"
metaTag.Content = "inventory software,systems"
Header.Controls.Add(metaTag)
metaTagD.Name = "description"
metaTagD.Content = "List Receiving orders or item receipts,inventory software,systems"
Header.Controls.Add(metaTagD)

It is a simple and workable solution.You have to enter an appropriate description and keywords for each your page.

Friday, December 18, 2009

Import data from an Excel file to ASP.Net application

My customers very often ask how to import their products in our SilverNet inventory system. Usually they have Excel files in various formats. Therefore we are forced to write a new utility for each client. First we create the upload function.Add the the Label, Fileupload and Button controls to our aspx file:


<asp:Label ID="ExceptionDetails" runat="server" CssClass="Warning" EnableViewState="False"
Visible="False" Width="568px"></asp:Label>
<asp:FileUpload ID="FileUpload1" runat="server" Width="500px" />

<asp:Button ID="Button1" runat="server" Text="Upload file" Width="130px" />

Then we have to add the Button click handler to our vb file for checking uploaded files and import data in the inventory database.


Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

If Not FileUpload1.HasFile Then

'-- Missing file selection

ExceptionDetails.Text = "Please choose a file to upload."

ExceptionDetails.Visible = True

ElseIf InStr(UCase(FileUpload1.FileName), ".XLS") = 0 Then

'-- Selection of non-JPG file

ExceptionDetails.Text = "You can upload only xls files."

ExceptionDetails.Visible = True

ElseIf FileUpload1.PostedFile.ContentLength > 5000000 Then

'-- File too large

ExceptionDetails.Text = "Uploaded file size must be less than 5 MB."

ExceptionDetails.Visible = True

Else

'-- File upload


Dim fileName As String = "products.xls"


FileUpload1.SaveAs(Server.MapPath("~/files/") & fileName)



Now we have uploaded the Excel file on server and we have to open this file and load all records to a dataset. Add the special function ExcelConnection:


Protected Function ExcelConnection() As OleDbCommand


' Connect to the Excel Spreadsheet

Dim xConnStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _

"Data Source=" & Server.MapPath("~/Pictures/products.xls") & ";" & _

"Extended Properties=Excel 8.0;"


' create your excel connection object using the connection string

Dim objXConn As New OleDbConnection(xConnStr)

objXConn.Open()


' use a SQL Select command to retrieve the data from the Excel Spreadsheet

' the "table name" is the name of the worksheet within the spreadsheet

' in this case, the worksheet name is "Sheet1" and is coded as: [Sheet1$]

Dim objCommand As New OleDbCommand("SELECT * FROM [Sheet1$]", objXConn)

Return objCommand


End Function


Using this function we can extend our sub for the Button click handler:


' Create a new Adapter

Dim objDataAdapter As New OleDbDataAdapter()


' retrieve the Select command for the Spreadsheet

objDataAdapter.SelectCommand = ExcelConnection()


' Create a DataSet

Dim objDataSet As New DataSet()

' Populate the DataSet with the spreadsheet worksheet data

objDataAdapter.Fill(objDataSet)


ExceptionDetails.Visible = True

ExceptionDetails.Text = "File Uploaded"

ExceptionDetails.Text &= "File Name: " & FileUpload1.FileName & "<br/>"

ExceptionDetails.Text &= "File Size: " & FileUpload1.PostedFile.ContentLength & _
" bytes<br/>"


Now we have the dataset with data about products from the customer's Excel file but we want save all these records in our sever database. Usually we use MS SQL Server database and have the special table "Product" . Create a new function for inserting one record in the inventory database.


Function Add_ProductFull( ByVal InvDescription As String, ByVal ProductName As String, ByVal Serial As String) As long

Dim DBConnection As SqlConnection

Dim DBCommand As SqlCommand, InsCommand As SqlCommand

Dim SQLString As String, SQLInString As String, pKey As Long


DBConnection = New
SqlConnection(WebConfigurationManager.ConnectionStrings.Item(1).ConnectionString)

DBConnection.Open()

SQLString = "SELECT ProductKey FROM Product WHERE ProductName = @ProductName"

DBCommand = New SqlCommand(SQLString, DBConnection)

DBCommand.Parameters.AddWithValue("@ProductName", ProductName)

pKey = DBCommand.ExecuteScalar

'check the availability of the product in our database

If pKey > 0 Then


Add_ProductFull = pKey

Else

SQLInString = "INSERT INTO Product (ProductName,InvDescription, Serial)VALUES (@ProductName, @InvDescription,@Serial)"

InsCommand = New SqlCommand(SQLInString, DBConnection)

InsCommand.Parameters.AddWithValue("@ProductName", ProductName)

InsCommand.Parameters.AddWithValue("@InvDescription", InvDescription)

InsCommand.Parameters.AddWithValue("@Serial", Serial)

InsCommand.ExecuteNonQuery()

pKey = DBCommand.ExecuteScalar

Add_ProductFull = pKey

End If

DBConnection.Close()

End Function


It's a very simple example with three columns and you can add more fields. Sometime our customers send us file with 20-30 columns.

Finally we can finish our function for our Button handler.


Dim i As Integer = 0

Try

For i = 0 To objDataSet.Tables(0).Rows.Count - 1

Dim InvDescription As String = objDataSet.Tables(0).Rows(i).Item("Item Name").ToString

Dim Serial As String = objDataSet.Tables(0).Rows(i).Item("Serial").ToString

Dim ProductName As String = objDataSet.Tables(0).Rows(i).Item("Product ID").ToString

Add_ProductFull(ProductName, InvDescription, Serial)

Next

Catch ee As System.InvalidCastException


ExceptionDetails.Text &= "Problem with import file " & ee.Message.ToString "

Exit Sub

End Try

ExceptionDetails.Text &= objDataSet.Tables(0).Rows.Count & " records "


End If


End Sub


That is all. I think this is useful information for those who use ASP.NET in their work.

Thursday, December 10, 2009

Printing documents with GridView in IE

It's a good idea using ASP.NET web based systems for inventory and business control. But any browser is not a good place for printing documents.
I had a bit of a problem in printing GridView in Internet Explorer. I needed to print only two rows on one page. The first problem was how to break page. I used the special style
"page-break-before:always;" for the tag "br". The second problem was how to insert this unit before each odd row but exclude the first row. I used the property Container.DataItemIndex And now we have this very simple solution:
<asp:gridview....

<Itemtemplate >

<%#IIf(Container.DataItemIndex Mod 2 = 0 AND Container.DataItemIndex <> 0, "<br style=""page-break-before:always;""> ", "<br> ")%>
<div>..information....</div >
</Itemtemplate >
If you will print this gridview you will have only two rows on each page

Monday, July 20, 2009

Multi location inventory management system.

Companies very often have several locations for saving their products. They can put one item in two or more warehouses. How will our inventory management system process this item? First, we'll add the item to the Item list. We'll enter the item name and description. If we use bar code labels we'll add value of bar code in the special field. Then we should track receiving of this item on our first warehouse. Create a new receiving order with this item and select location=Warehouse#1. The inventory management system will add this item to the warehouse #1. After that, we have to create a second receiving order with the item and location=warehouse#2. We'll see the summary on hand for our item in the Inventory report and local on hand in the Inventory local report. If we sell product from our warehouse #1 we create a new invoice with this item and select the location=warehouse #1 for this invoice. The inventory system will reduce on hand amount of the item on the warehouse #1.

Saturday, July 18, 2009

The inner logical relationship of inventory database

Typical inventory software has next tables:

  • Items (Products)
  • Customers. You can create several Jobs or Contracts for one Customer
  • Vendors. You can create several Contracts or Branches for one Vendor
  • Locations -is your storehouse or warehouse with shelfs or office room. You can add a sublocation using the separator ":"
  • Vendor Types
  • Customer Types
  • Job Types
  • Purchase Orders and POrder Detail for tracking ordered items. When you create a POrder the Inventory software increases "On Order" amount in the Item form . Each record in the table POrder has relation with record in the table Vendor.
  • Receiving and Receiving Detail for tracking got products. When you create any Item Receipt the inventory system increases "On Hand" amount in the Item form and changes balance of the vendor. Some records in the table Receiving have relation with the table Vendor.
  • Vendor Payments for tracking payments to your vendors for received products. When you create the Payment the system changes balance of the vendor. All records in this table have relation with the table Vendor.
  • Estimates and Estimate Detail for tracking estimates or quotes to your customers. Each record from the table Estimate connects to one record in the table Customer.
  • Sales Orders and Sales Order Detail will help to keep track of items that you want to allocate for customers. When you create Sales Order you increase allocated amount in the Item Form. Each record in the table Sales Orders has relation with one record in the table Customer.
  • Invoice and Invoice detail . If your customers don't pay you in full at the time you provide your service or product, or if they pay in advance, you need to track how much they owe you. You create invoice if you shipping your products to a customer.The inventory software will decrease the On Hand amount of your items and changes balance of the customer.
  • Customer Payments for tracking payments from your customers for sold products. When you create the Payment the system changes balance of the customer.
  • Sales receipt. You use Sales Receipt if your customers pay in full at the time they receive your service or product. When you create a Sales Receipt the inventory system decreases "On Hand" amount but doesn't change the customer balance .
  • Work Order. You can create inventory assembly or new product using work order. You enter name of the assembly and select components for this assembly. When your create a Work order the inventory system increases the "On Hand" amount of the assembly item and decreases amount of the components. Each work order record connects with one record in the table Receiving Detail and several records in the table Invoice Detail.
  • Transfers for tracking the moving of products between your storehouse or locations. You can see stocks of the item on the Locations if you click on the button "On Hand" on the Item Form. each record in the table Transfer has connection with several records in the Receiving Detail table and in the Invoice Detail table.
  • Adjust inventory for physical count of your inventory.

Additional tables using in the transactions:


  1. Payment Terms
  2. Payment Methods
  3. Customer Messages
  4. Tax Code List
  5. Ship Via List

Records from these tables are used in invoices,orders and receipts.

Tuesday, June 30, 2009

How will software track your inventory.

Inventory systems use Item receipts for tracking all incoming products and invoices and sales receipts for tracking all outcoming products. These documents have information about vendor or customer and list of items with quantities and prices. You can print these documents and save in your company and send to your partners.


First of all, you create an initial item receipt with all your existed products. You enter in the column Quantity current stocks of your items. The inventory system will show these values in the Item list form in the column On hand. If you have several warehouses you'll create item receipt for each warehouse with defined field Location. When you sell you product you have to create an invoice and save it. After that, the inventory system will subtract shipped amount from received amount and show in the on hand field of the Item list the current on hand amount.


Syatem will recalculate on hand amounts for your products after each new item receipt or invoice. If you want to have accurate information about your inventory you have to create document for each receiving and shipping.

Sunday, June 28, 2009

Customer and vendor list in inventory systems

You have deal with many companies in your business. And you can divide them in customers and vendors. Any inventory system has tables for customers and vendors. You'll define their names, addresses, discounts, contact persons and other information in these tables. Customer and vendor lists allow to find any company and edit it. You'll be use the customer and vendor list for tracking your receiving and shipping operations. You'll enter information about your partner only one time. Then you'll find required company in the customer or vendor list and add it to your invoice , sales order or purchase order.

Saturday, June 27, 2009

Item list in an inventory system.

Any inventory system has two parts. The first one is a program and the second one is a database. The database is a set of tables. Some tables we'll name lists. These tables will keep information about your products,customers, vendors and other constant parameters. The other tables we will name Actions. These tables must include information on the inflow and outflow of inventory items as well as the quantities and prices of items.

Items or products are base of any inventory system. You'll keep information about your items in the item table. This table usually has fields Item Name,Description,Vendor Price, Sales Price,Department, Bar Code. You'll fill out these fields one time when you receive an item in your warehouse. If you receive this item second time you use your first record. You can only change vendor and sales prices. You'll be able to search any item in the item list.

And you'll be able to edit any record in the item list.


The item table doesn't have information about current on hand amount of items. The inventory system calculates this amount as difference between received and shipped quantity each time when your open the item list form.

Friday, June 26, 2009

What is inventory software?

If you have any business you face with inventory control everyday. Inventory is an asset that must be managed as it has a direct influence on your money. Obviously, you are tracking all your inventory at paper or in MS Excel. Sometime, you think I spend a lot of time calculating real amounts of your items in warehouse but inventory software systems are expensive and complex. But if you want that your business grows you have to improve inventory accounting in your company.
It's not so hard and not so expensive as you thought. And you'll have the next benefits:
Get items on hand when you need them.
Increase customer satisfaction.
Reduce carrying costs.
Improve the ordering process.
Maximize order flow.
Reduce waste.
I'll describe in this blog how inventory systems work.