Visual Basic POS Demo Day

Wednesday, March 29, 1995

Designed, Coded (VB3) and

Presented by Randall K. Skelton


By mutual agreement, this document is proprietary.

Copyrighted 1994,1995,1996, 1997, 1998, 1999 by Randall K. Skelton.


The Visual Basic Development Environment



User Friendly


Powerful Visual Metaphors


Easy Access to Everything


Extremely Productive


"Most Productive Program Dev. System on the Market"


No royalties or Surcharges on software produced


Huge third party Support. Save $30,000.00 on the first tool you buy from third party supplier over in-house development costs for same tool.


Declaring your customer is handled three ways:

1) Type in first letter, second letter, etc. until only one name left

2) Type in telephone number one digit at a time until one left

When only one line left on the screen, the screen dissolves and your customer is selected for you.

3) Type the first letter and look at the list. If you see your customer, use the down-arrow to enter the selection box. Highlight the customer visually and hit enter. Your customer is selected and appears in the "customer" box.


SKU entry and QTY specification

SKU entry is assumed when the QTY is 1.

When Qty is other than 1, the operator enters both on the one line using the following real life metaphor:

[QTY] "x" [MDSE]


In the Merchandise Description box you see the next line item being entered as "5x30021" meaning qty=5 and SKU=30021. SKU lookup by Description is explained in a later section.



From the screen behind, the operator uses the F10 key as shown in the Default Menu Box. The Current Total amount is displayed as a subtotal and some other common amounts appear to reflect the progress of the tendering.

Highlights of Tendering:

  1. Any number of tenders can be used.
  2. Any number of types can be specified dynamically in an external table (external to the program, User-defined).
  3. Use of the Esc key to change a tender partially entered.
  4. Use of Esc key to temporarily exit the tendering screen and add more line items or...
  5. Use the Esc key to return to the MDSE screen and select SUSPEND to suspend both the line items and the tenders already entered.

Receipt Printing in VB POS

After the Sale has been completed (Balance Due = 0.00) the receipt prints on the high speed printer almost immediately. In our demonstration, I pop it up on the screen for quick review.

In a real Implementation, a similar-looking Receipt would appear on the screen at all times allowing the operator to scroll up and down selecting line items and their associated modifiers. This method is supported in the NCR NICE Client development environment as their standard way of showing and printing receipts in POS.

Some Line modifiers you might see:

Markdowns Discounts Coupons Deletions Sale Return items


Customer Inquiry Facility

  1. Built-in access to any customer’s history of transactions.
  2. Quick- access through hot key once Customer is declared
  3. Scrollable through ALL customers on file;
  4. Scrollable through any one customer’s transactions
  5. Scrollable through any line items on selected transaction
  6. Scrollable through any Tendering methods used in the selected transaction


Quick Access to Store Record

Access through System menu with password protection

Change next transaction number to be used as needed

Change store/register numbers as needed

See name of currently signed-on operator

See if Transaction is underway

Serves as basis for consolidated reporting


Resume a Suspended Transaction

A few menu selections puts a list of all previously suspended transactions on the screen. The record you see here is the transaction header record. The transactions are in two lists.

Top List shows "Resume-able Transactions" meaning you can highlight one of them with the down-arrow and hit enter. The next screen you see will be the MDSE screen with all of the line items just as they were when the transaction was suspended minutes, hours, days or even weeks ago.

The Bottom list records all previously Resumed transactions.

Tenders are also resumed in this implementation but may be inappropriate in some circumstances. A case where they would be appropriate would be in Layaways, Special Order, Back Order. With this in mind, I can implement a complete Layaway or Special/Back order with very little work. I’m thinking that 10 to 20 lines of code would be sufficient!

Viewing a Resumed Transaction

This transaction was just resumed. Please see the previous page for reference.

Since tendering is resume-able by default, this screen shows the completion of the previous transaction.

Automated Performance Metrics

Built in to my implementation is a way to monitor performance increase/decrease on a daily basis.

The automated test is integrated in such a way as to be transparent unless invoked through menu selection.

The test runs faster than any operator since it relies on Event Processing built in to Visual Basic.

Any reduction in performance can be identified immediately.

The annotation field points to possible causes of slow-down if any.

Review the page below and then flip the page to see how the system tracks performance across systems and revisions.

Automated QC and Benchmarking are obvious first thoughts for expansion of this facility.

Test Statistics View

In order to track Performance of the POS development in Visual Basic, I capture the data at the end of each test.

The operator has the opportunity to enter the annotation field seen at the right of the grid. This field opens up and drops down to reveal 255 characters of information regarding

1. the latest changes,

2. the machine the test is run on,

3. the revision of the software being tested.

Looking at some of the results in the table shown below, you can see the value of this kind of built-in tracking facility.

SKU Updates For One and All registers

I wrote this facility in 10 hours time. It incorporates the basis for a corporate Client-Server system to handle SKU Updates/Deletes/Additions.

A Separate Database holding one table named "SkuUpdates" is structured the same as the "SKUS"

table except for the addition of one field, the A/D/U flag which identifies each entry as an Add, Delete or Update respectively.

At the register, you first build the table of SKU Adds, Updates and Deletes. When you enter an Update or Delete, the SKU entry is presented for identification verification or editing, making the job simple.

In the case of Adds, just enter the information and update the SKU UPDATES table.

Finally, press the Apply SKU Updates button. The new entries and modifications are usable immediately, even in the middle of a transaction (if need be).

The table holding the SKU updates can be placed on a server and accessed by any register wanting SKU updates. Additional methods and procedures would be developed to handle Corporate changes and the distribution thereof.

Use of SKU Updates

SKU updates are usable immediately.

Although some discipline must be exercised, the demonstration more clearly shows the power of VB in Software development. This form was conceived, designed, debugged in one day. I thought I was going to have to skip it for the demonstration, but finished it in about 10 hours of interrupted time.


Built-in Diagnostic Suite (Printer)

When interfacing the Scanner and Printer devices, I reviewed the code behind the diagnostics provided by NCR with their NICE CLIENT development system for Visual Basic.

They were so helpful that I integrated their use into VB POS.

If there is ever any problem with a device, using these tools would provide quick resolution of System Hardware Vs Software problems should they arise. In the not too distant future I can see remote dial-in trouble shooting of such problems through many of the off-the-shelf Remote-Control for Windows.

Built-in Diagnostic Suite (OCIA devices)

When interfacing the Scanner and Printer devices, I reviewed the code behind the diagnostics provided by NCR with their NICE CLIENT development system for Visual Basic.

They were so helpful that I integrated their use into VB POS.

This screen shows the diagnostics to set up and isolate problems with the OCIA devices.

The Scanner is an OCIA Device.

The Signature Capture is an OCIA Device.

SKU lookup by Description

F6 can be used at any time during a transaction to popup the box shown below. The user enters a "STRING" such as the "as" shown below. The search is a linear search capable of 1000 items per second on my system at home.

To initiate the search, hit enter key after the partial string is entered. The screen shows the results after it has found a full screen of matches or the end of the search.

Any key can be used to cancel the search and a new string entered.

The operator visually inspects to see what line 1 through 9 the item he is looking for is on. The keys 1 through 9 are HOT selectors and the item goes into the transaction immediately.

You can enter "[QTY]x[F6]", find the entry, hit 1 through 9 and buy the SKU without further keystrokes required.

Another Metric Demonstrated (SKU Lookup)

While experimenting with different LAN configurations, I needed a way to compare SKU lookup times independent of other transactional activities. I have a "Buy 1 of everything" in the store option which I now limit to 78 line items. It randomizes the SKU number and the QTY bought to vary the activity but gives a consistent overall average for all items looked up.

In the example below, the results indicate SKU lookup times for a 66Mhz machine with 16 meg and the ROCKET disk access method. A register gives different but repeatable times to fine tune SKU table lookup topologies in the future.

Timings indicate that when 3 "registers" are run as clients on the same PC as the Server, the throughput calculates approximately 40 sku lookup and insertions into the main grid per second. These means that if 40 registers requested a sku lookup at precisely the same instant, VB POS could return the price lookup to all 40 registers during the same second!

799 Random SKU Lookups Timed

In the above display, I allowed the program to buy 799 line items as fast as it could. The SKU entry box was a complete blur for 49.542 seconds. I suspended the line items and recalled them later.

I think there is a practical limit to the number of line items, but no real limit as the grid supports "virtualized" space without a bit of programmer support.

Parting Shots (Suspend/Resume Screen)

This screen shows the 799 line item transaction as a suspended transaction.

Last night I Resumed it accidentally. I simply suspended it again for the demonstration.

In addition, the lower box shows the record left from resuming a transaction (#333) earlier in the demonstration.

I hope This VB Prototype of POS illustrates the power of the new Visual Development Environments. This project was adapted from a personal effort I was working on and represents 5 to 6 weeks of time. The first 3 weeks were outside of normal working hours. The second three weeks were fragmented and interrupted for other projects such as the Time Management. project. If one man can do this much work, a VB team can do a whole lot more.

Addendum: (06-18-99) by Randall Skelton

Although G.E.R.S chose Powerbuilder for their first introduction to GUI development (Object Pascal was used for their POS product I worked on officially), I have it on good authority that they later switched to Visual Basic.   They no doubt frequently recall the Visual Basic Demo Day that this presentation was created for. 

I hope you enjoyed this demonstration. Try to remember this was VB3, prior to Object Oriented VB4.  If I were doing this today, the screens would be more inline with today's mature GUI rules and the code would certainly be done with class objects and OLE servers.  Due to my flagrant use of third party products there is no push-button conversion to VB6.  Today, my experience would tell me to not use any third party products for this very reason.  VB6 has all of the controls by now and VB POS could be done without going outside the box.